|
|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式) a2 g% D. M9 x" g$ }; H8 a
文件加密方式,变量混淆+字符串加密 }9 Z. F+ F' T
文件原始内容 :" }" y3 \. T1 a: K
$OOO0O0O00=__FILE__;( e" N, r8 m) H: v: b
$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
2 t$ l* s* ^3 ]! |# j$ ^ $OO00O0000=164;
2 X7 k3 `9 Y8 n1 k* I. V $OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
r' c3 A$ Y; F. p+ i# b $OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
! k* i; N% ~) m& U% \; y $OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};; ~' a" A: C+ h0 t" v& l! S
$O0O0000O0='OOO0000O0';
/ c9 b0 b& a, d eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));$ \" |; D& m" |0 m
return;?>
' v* r9 ]# o {; D 这是一段php代码,后面跟了一串加密过的字符串。5 d/ M0 g! S, p# K
很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。
( o2 }) a3 S8 y9 h T. o/ q# w 进行分析:( I5 k2 o; O+ z( g3 Y$ d
$OOO0O0O00=__FILE__;//本文件路径和文件名
6 r7 \2 c2 Q* z+ W- y //字符串用于下面构造新的字符串
* x0 u8 s/ i9 O. s: q, w $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');) Z) \4 C7 G7 }& E$ A' W q
//下面几行构造字符串base64_decode
4 I5 N, v0 B& V- e, `( ^ $OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
7 t8 |. [4 g- i( ]; }' w) g $OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
4 ~' W& x' w! p9 C" j% l9 X& { $OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};, W5 l; m9 O d' D7 n: [! H
//下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法,
[1 s! }- B5 |$ t. h function crack($src, $dst) {+ g4 U5 V! L' E7 p. N
$content = file_get_contents($src);3 v8 M* J; J3 z8 e% Y
$pos = strpos($content, '?>');
7 k6 O- W/ |' s: C! y5 g //删除读取文件的代码
9 A4 S, q1 P2 P. `7 ~1 i $code = substr($content, $pos + 3);+ t8 n0 E' [. d$ u) J0 i
//删除解码代码$ {1 G- u0 T9 p
$code = substr($code, 700);' w- N: r- _2 B( v6 ]4 s
//解码目标代码
8 h% F& `* W0 m0 b6 c5 b $cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/'));
" Q; F1 {% B, C //写入目标文件( o. A8 |$ w! A/ ^
file_put_contents($dst, "<?php " . $cracked . " ?>");9 l5 ~3 T! K; ^4 V) F* j8 u
log_info("解码文件:$src 至 $dst 完成");7 G3 E. _ H e1 |+ G% ?
}
$ D0 a) _8 Y) K" ^2 ]6 e8 k 使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!5 R$ \/ H& B/ M3 G0 w% L! N8 z& ?, ~
在线解密工具:http://www.niusoso.net/vidun-decode.php, F+ r( ~6 }2 t- Y* b8 P: h
, B, i' g7 L0 A! D' q; @- z
' t/ I3 R' J w5 d
|
|