|
|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式/ T6 D; ~' L- R5 K
文件加密方式,变量混淆+字符串加密3 k9 J6 S! l" b5 `- i @+ D
文件原始内容 :4 T0 J2 U1 r" @
$OOO0O0O00=__FILE__;
# `# |0 K3 V- {% N2 E $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
: @7 a& q7 [5 i+ _; l) h; h# ?% D; @ $OO00O0000=164;" ]" J/ B; l6 E0 f0 c
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
. }- E# U" M8 ]# Z4 G" e' } z $OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
1 \" c3 ~- F' I6 t. M $OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
6 x5 ]7 n) o2 |( Z1 E) I $O0O0000O0='OOO0000O0';
# i9 W; E2 Q, v eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));5 W5 ^' U% x' J3 t! R' {$ |
return;?>* {9 U0 n: u/ D( A N& M, c
这是一段php代码,后面跟了一串加密过的字符串。
9 T. S( ^" B2 Z, A9 C 很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。) M; }/ u6 G E
进行分析:
+ H8 V$ x0 a1 F* T: J3 r" _2 D $OOO0O0O00=__FILE__;//本文件路径和文件名7 h! ?6 U* i9 ~
//字符串用于下面构造新的字符串
6 [, g4 R8 L% l8 h3 ?- p; D $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
& Y" Z- G9 q& y l" }8 ^$ h6 v" t, { //下面几行构造字符串base64_decode& f% C7 S/ A3 o/ h& S$ h# C& v
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
% r7 ]/ d- f y, H- K $OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};0 ~- D( J% O# Z0 F2 c
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};$ q8 r) r* K! ?0 R0 ~$ b& l- D3 Z3 ]; S
//下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法,' E3 N8 M# F$ @# c8 A
function crack($src, $dst) {: _( |$ L/ c( l7 X' i
$content = file_get_contents($src);
5 A# [: _+ ]4 @2 |% @* n" g $pos = strpos($content, '?>');2 T8 Y/ |3 x8 ?' W/ |) F" y0 k
//删除读取文件的代码
+ W. R) w- D+ b6 d) n $code = substr($content, $pos + 3);
% @+ P) U! i+ M! N; k- Z, P //删除解码代码7 x# C" T0 C* m+ d
$code = substr($code, 700);; p) [$ Q% |2 A' Q% s
//解码目标代码
+ C! n: y& `! t. a, M $cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/'));6 q& l% t* s1 Q/ G
//写入目标文件
. @6 A& ]' r, P file_put_contents($dst, "<?php " . $cracked . " ?>");; F+ \/ ?2 \0 v6 d3 N4 B
log_info("解码文件:$src 至 $dst 完成");; K! v1 ^5 o; q# q+ K( {% \2 k
}/ V. P8 ^! `% o
使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!
6 @! C. ]" V2 `- T! P5 h, v在线解密工具:http://www.niusoso.net/vidun-decode.php+ x* c D: K; R( i$ ?
4 m: B" X; L4 S" [
; Z' B/ S$ S k2 r! N- x |
|