|
|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式8 N2 r9 Z, K1 B% U1 e9 N r
文件加密方式,变量混淆+字符串加密
8 C% O+ a5 a/ ]2 d 文件原始内容 :+ N V7 x7 R; @ X/ F
$OOO0O0O00=__FILE__;
( n/ p- y# L/ E- E( \3 m& B $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
& _: Y0 [/ p9 f2 J2 }9 R $OO00O0000=164;
3 @+ E# D3 G4 W/ \% n $OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
" }7 e$ i% S6 Y* f, g $OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};+ n4 n. m S8 ~; B1 ?3 e3 M! C! D
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
) E; d, I5 w0 c: o. p# h $O0O0000O0='OOO0000O0';
. d/ r* ]' @ ^0 d0 t* _/ {& E' ? eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));# ]% E9 M: E8 `
return;?>
6 b8 x. h3 a. L4 L8 g2 t 这是一段php代码,后面跟了一串加密过的字符串。
. G; C9 p7 ]# ]7 ^- r1 J" i, a 很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。
: y& u, C6 T) |1 O/ `8 \ 进行分析:
; [& C& y6 [, u $OOO0O0O00=__FILE__;//本文件路径和文件名& a* i d6 u+ d
//字符串用于下面构造新的字符串
! q; }( @- t: a8 K $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
! K4 m) d# E Q( h2 V //下面几行构造字符串base64_decode
* P5 p0 J% m) j $OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};1 v/ l" c t) R
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
: Q# B0 ^4 [; V6 ?! n7 n( g6 A! Q $OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
% ?: X( {* P) G3 {1 { //下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法,* s1 s2 a7 C& |6 ~0 H- e" i, U
function crack($src, $dst) {$ Z: a: L. C Y# o9 b
$content = file_get_contents($src);& s. |! F" n; X& q: c5 R' |% U( j
$pos = strpos($content, '?>');5 ~4 t2 ]% f& ^5 c& g; h7 F
//删除读取文件的代码" j6 t/ f4 L- \ N
$code = substr($content, $pos + 3);
9 Q0 s) x9 B$ m2 q //删除解码代码4 q W6 p' y- g1 z
$code = substr($code, 700);6 O7 p9 _) w4 T! v+ t
//解码目标代码# \8 p- F( N4 ^3 |1 F! f0 d# Y
$cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/'));( ]( C5 Z) z6 i3 \( h1 d7 ^9 p
//写入目标文件
i% j* L9 l9 p8 ^ file_put_contents($dst, "<?php " . $cracked . " ?>");
7 N6 D, T7 d0 v- g log_info("解码文件:$src 至 $dst 完成");( T& ?% z2 R* j+ Q2 E
}
0 g. @5 l. g" @+ @' F* h9 G# l) b2 A 使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!
0 J1 m6 n1 k0 l; o1 U; \在线解密工具:http://www.niusoso.net/vidun-decode.php
& r& w$ q5 w& m+ A; W0 m
9 w! [5 q; a7 z$ A$ ^% F- i* o, D7 Y
0 u) \$ A3 l5 V |
|