|
|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式8 |$ @- l4 L& C* a$ z4 _: R
文件加密方式,变量混淆+字符串加密# L# W( [9 u9 l( M8 ^% h# ^1 {
文件原始内容 :% \. U2 v3 a. c9 o5 n) g/ n: H
$OOO0O0O00=__FILE__;* |* `8 z6 n2 P
$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');/ O( K5 ]# W& ~# J( J2 O) |
$OO00O0000=164;
1 @! D$ X+ M& L4 _& l w; B $OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};$ v; H$ W) Q$ K; a
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
( T. C/ f: Y5 R5 e; @6 s, t0 ~ $OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};+ m2 o, o; l& P8 Y/ Z
$O0O0000O0='OOO0000O0';
$ J5 s* s0 T, H3 ~ eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));
7 u: m2 ^4 |* k8 x- W return;?>; S2 Z. E7 m' j' E/ e
这是一段php代码,后面跟了一串加密过的字符串。
, G4 [3 v: N+ m' H' r' l- N; s 很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。
/ c2 M! X$ H1 ?3 @, P 进行分析:
" Y& F8 g, q% p' e% W& C $OOO0O0O00=__FILE__;//本文件路径和文件名
1 a1 k: w6 |5 ^; Y //字符串用于下面构造新的字符串
& g# H4 r8 v4 k$ S% Q# P( ~4 s $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
) Y: e, `; f+ Z q( I, v //下面几行构造字符串base64_decode# M/ r+ {4 l( \- k6 m6 W
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
5 e- l1 B3 F4 j5 F. R $OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};: n$ v* R+ W# L3 {$ u: Q
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};% u1 ^; f$ G7 d6 I3 \+ R* ~
//下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法,
& u0 ?) F) E7 [1 b( y9 b function crack($src, $dst) {6 {" u% t9 F% r( S; q6 p
$content = file_get_contents($src);
" L% M/ w5 T& u: b. p4 G $pos = strpos($content, '?>');& y% g$ w; d8 h& D* u
//删除读取文件的代码
* |6 ]3 U: R% Q3 X, ^) a/ R1 u5 i9 A $code = substr($content, $pos + 3);
/ \' }) ?' o1 Z! e# @; x6 w. F6 v //删除解码代码/ {0 \/ y1 l G2 h) B, W9 n3 \
$code = substr($code, 700);
! n% E* n+ t8 ^, I$ w7 T //解码目标代码
6 g+ R( y2 Y- ]# b e1 @7 f $cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/'));+ ^; l6 Y# h: z& I3 a& F
//写入目标文件
$ |& R! O8 Q6 b file_put_contents($dst, "<?php " . $cracked . " ?>");
1 n9 F! Y6 e4 G U log_info("解码文件:$src 至 $dst 完成");
: W; ]8 K- h3 ^" Y) l* |/ D }) s j' Y* c9 `2 }4 ^
使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!7 n1 `( o/ s; t5 l8 _
在线解密工具:http://www.niusoso.net/vidun-decode.php p) L8 W2 }/ e' }* n0 v, \7 j
* H( O6 f6 Q( h- x L
. N/ L' f- o1 u" f |
|