|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式5 s5 J& u" Z, u$ [
文件加密方式,变量混淆+字符串加密7 x; t& X: @8 p- X4 w: H
文件原始内容 :) |: f& v" d; I% T8 Y
$OOO0O0O00=__FILE__;- O' s( E& `/ q6 Q# d
$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');! G, K$ g0 S' m
$OO00O0000=164;
. G. d, r& \# O: d $OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};9 ^1 t" P& A1 n. d3 d% Z
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16}; z2 y- w. z# B, ~3 ?1 G7 _
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
3 K/ n# h6 ]1 t6 ` $O0O0000O0='OOO0000O0';
. ]: t/ d0 h& ~% u5 f: a5 N eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));( s& t% W* ~ t E1 e( B
return;?>6 c& y6 J0 E) e% P! u" Y
这是一段php代码,后面跟了一串加密过的字符串。" B; Q8 {3 L, g7 i
很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。
2 l9 ]5 Q( E9 \3 p0 g) a 进行分析:/ r w, Q! x% W4 F2 i# C( V, a/ N
$OOO0O0O00=__FILE__;//本文件路径和文件名
8 t. C, N8 [3 ?" [& F! L //字符串用于下面构造新的字符串
3 W- c4 \2 w1 w $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');0 ~0 A& f) l. B+ c# M
//下面几行构造字符串base64_decode" G! F1 S. q, _) O8 |1 h, }
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};9 n& ^# u V- W# y" w7 O( z* ?
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
+ v: Q3 k$ p' |' P $OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
0 v8 m. h n& i/ C1 n: D L& [7 D //下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法,, }9 P) ?9 z' D" a: i
function crack($src, $dst) {8 Y: m* V: [8 A; @
$content = file_get_contents($src);& U- q% ], g/ |0 q& j
$pos = strpos($content, '?>');% u, {( ~, o4 o5 c
//删除读取文件的代码$ B( s7 n6 c. s! K, |& Q6 J
$code = substr($content, $pos + 3);
8 {6 L6 _) _: Q$ h- W //删除解码代码
! b9 z/ U* t- v$ t- g $code = substr($code, 700);3 X5 k$ D5 g3 c6 M3 {7 ^
//解码目标代码
+ f' _( G7 E4 o% N$ A: q8 } $cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/'));
$ Z% C t+ F8 x# P" C2 I //写入目标文件
2 h. [9 B' r+ F& V file_put_contents($dst, "<?php " . $cracked . " ?>");5 I0 R% s+ V; \6 h' R% h# B. C6 d
log_info("解码文件:$src 至 $dst 完成");; |0 B$ G! I/ T9 `4 d# p
}" Q# C% e- Z2 D: F3 T r& E
使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!8 S% M0 T7 l1 }9 H0 a! N+ ^! y
在线解密工具:http://www.niusoso.net/vidun-decode.php0 t+ j$ t- v' j
7 c0 l7 v- |5 x' B" m# d c4 H( I3 r
|
|