|
|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式
; \# s! o2 h) ]) a: j( y# V& l1 f" [文件加密方式,变量混淆+字符串加密
2 w' [% n% o/ R$ M0 O- M 文件原始内容 :; N( N2 r0 X" Q6 {9 g4 W' w" K
$OOO0O0O00=__FILE__;
0 n9 h! B1 o; o) Z1 u2 R1 g' n $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
, b) }0 A$ h* r. e$ u0 Z $OO00O0000=164;1 O% {! d: z. Y# F) h) \, {
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};: k6 p `& b+ P, k- T' _
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
3 s9 h2 j4 E6 o5 N M' M $OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
( V/ K1 g y! H $O0O0000O0='OOO0000O0';
% {( M1 m5 }0 d, j8 j& j eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));
& b* ?& ]4 K; r) i return;?>$ i- f, Z! Y/ P4 D1 C! z2 U
这是一段php代码,后面跟了一串加密过的字符串。. P+ h, {4 m9 \3 J1 ^3 t
很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。
' R1 H G, @% S7 E$ s" A# c 进行分析:) ?; q9 X+ B6 o- F! F9 G
$OOO0O0O00=__FILE__;//本文件路径和文件名
% f0 V$ c- `+ _. P! B* j- B //字符串用于下面构造新的字符串
* E5 [+ E3 N; V$ m& l( d $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');: A9 y" D% p0 {2 I( Z {" G$ }+ p- e
//下面几行构造字符串base64_decode
, i/ \7 T6 i1 H9 V $OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
( i1 ]% o- B- \( N6 |1 z E $OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
4 |% |* ]) l- E: i- w$ W3 j# g# { $OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};# `2 J/ F/ E) \% s# Y0 u8 j
//下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法,
. h$ A9 y1 I2 U% H function crack($src, $dst) {: J7 _. Y# T6 D b5 L" X8 ]
$content = file_get_contents($src);. |/ n6 v6 p7 V' x) N
$pos = strpos($content, '?>');
8 R% D7 u; o: x! k5 r$ }& {+ k! q0 I //删除读取文件的代码
8 A2 m7 v( T$ I! X( K1 ~, J $code = substr($content, $pos + 3);6 t0 B2 S' T w# Z* L
//删除解码代码
0 l& v9 o% J( R, y' S; g $code = substr($code, 700);5 f# Z; O: c% Y& _6 t2 U! V2 K0 y
//解码目标代码
4 X7 B- L y [: J2 @) M $cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/'));
$ k/ c5 r1 U: ~7 S7 a //写入目标文件
! d5 Z9 l0 |6 m* c file_put_contents($dst, "<?php " . $cracked . " ?>");! k; N/ U/ D+ j
log_info("解码文件:$src 至 $dst 完成");3 \: P; Z- L ~* w( P+ g
}
+ G: B4 Q& X: O: O& _$ [ 使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!
# b4 o- Z3 M: E b2 L4 u在线解密工具:http://www.niusoso.net/vidun-decode.php
5 r4 R- S. W% `6 M! r3 Q' K' z9 Q2 c4 e$ {" W8 _* O
H+ r& f' U% h) ` Z
|
|