|
|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式
+ {- E- u6 F( j) ? s% S$ N文件加密方式,变量混淆+字符串加密* X8 V( Q ]1 G( P
文件原始内容 :; k8 E; S5 a& i1 E
$OOO0O0O00=__FILE__;
0 y# i. M' W8 d) |& P- H3 } $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
1 y( J/ \+ P k, O $OO00O0000=164;9 a# J }1 Y, E3 A" H2 V" v
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
3 K4 |4 l0 D1 {* z7 Z; c $OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};8 J" d6 _) |) b
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
/ d- @8 G. u, y, B+ ^; | $O0O0000O0='OOO0000O0';
q3 p6 W& H) _3 Q7 ^1 R L" E eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));
' M' w5 d5 Q. p' j5 ^* s return;?>
( }& F: i! w4 X* x: m* |: U 这是一段php代码,后面跟了一串加密过的字符串。, K+ O4 X0 F( K4 I4 N5 L' b7 @* O
很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。
3 r6 K. S. c5 w 进行分析:8 q. M5 i @' j" {
$OOO0O0O00=__FILE__;//本文件路径和文件名
7 N' ]( k% l- v. U2 p) o7 A //字符串用于下面构造新的字符串
/ ~0 r, w' Z# e+ D0 I, R $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');" E: g {8 C" }5 l/ A
//下面几行构造字符串base64_decode N: L9 `9 [! ^1 C' z b6 Y4 n& M
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
" u3 M- W. H. J' Q& m $OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
5 L3 ~7 k4 B& Y! G% U $OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};: M/ w: K4 H# r( S' a
//下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法,
5 k9 I0 Z' V. b( L( @ function crack($src, $dst) {3 ~/ T( P' b. n) }8 L
$content = file_get_contents($src);5 S6 d- h+ t; \6 X9 C& W m
$pos = strpos($content, '?>');
3 c, P- z6 l4 p2 B6 T+ ?4 v( @ //删除读取文件的代码
" ?8 k' r+ c$ J {: y+ s8 o4 u $code = substr($content, $pos + 3);/ A$ S2 a1 r; N- r
//删除解码代码
4 D# g& O! o! }7 i; {5 u $code = substr($code, 700);
# U ]- O6 d6 |% C8 X //解码目标代码! I) P; _5 u. u8 R7 F$ }2 d
$cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/'));. p5 J4 g) F& \; x6 ~$ @1 E
//写入目标文件: d) L. ~! Z! L7 B0 ^! K
file_put_contents($dst, "<?php " . $cracked . " ?>");
) G+ l, f4 @; ?9 _: a; R log_info("解码文件:$src 至 $dst 完成");" {# b4 o6 g) A6 O5 W; z
}
% `0 n4 K/ `( C5 c 使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!
' s' E0 u4 A& N B X在线解密工具:http://www.niusoso.net/vidun-decode.php3 H' [# G" z( w. e! i U/ G
! J$ [9 r J- N
% w/ y; j& W5 ]8 e [( j0 b+ ~4 s
|
|