|
|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式0 ]$ \/ `7 ~. i- L/ o3 D' _2 P
文件加密方式,变量混淆+字符串加密
7 P. T$ m) u5 k6 I 文件原始内容 :0 J$ J# M" B! ]8 M
$OOO0O0O00=__FILE__;
8 j8 a* A* a1 D) D9 x& c $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');3 }5 C; l, d3 E/ s+ J8 b+ \ `! {/ b
$OO00O0000=164;8 L! ]6 j* j1 J3 o" b
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};1 Y e: Y$ e6 t/ x- V. E0 S: ]
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
% W7 }8 K9 R8 ]9 ?* I' v2 s $OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
+ O5 a8 p* \9 a2 R) p$ m $O0O0000O0='OOO0000O0';7 @8 h; p. e) v' r; k
eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));
( K+ w# h; i9 X- [. t. N. t return;?>
! q! K# T" U9 U- z7 P* c4 {6 n* E 这是一段php代码,后面跟了一串加密过的字符串。
' R8 k1 z4 |' F; I/ J, ]% b- A 很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。
* ]4 c2 p. r: m' u( {, P+ d8 e 进行分析:
( w Z% U0 Q3 F5 G# F* e $OOO0O0O00=__FILE__;//本文件路径和文件名6 ?; }' j$ Y2 i! t) X
//字符串用于下面构造新的字符串+ t( F' y3 \2 F$ c! w0 T, D
$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
3 j) j/ L6 o! L6 P1 K. h5 } //下面几行构造字符串base64_decode
, J! Q% D/ |- w" X* ? $OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
9 h5 O% [: m# y# \! Y $OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};9 B. O, J" U/ j m' R
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};: J5 X G% N3 E; P
//下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法,
# J( K* |5 }7 g function crack($src, $dst) {
6 Z0 P; O& Q8 H* U" @ $content = file_get_contents($src);* F8 Y7 H+ u8 F& \! A( L( j3 k
$pos = strpos($content, '?>');3 y7 L/ y, ]) v; }" f" j: K
//删除读取文件的代码5 v$ {: p/ Z, O) i2 z/ t
$code = substr($content, $pos + 3);
\1 w( z" H$ F0 p: \" y //删除解码代码
3 P3 r- Z8 J, Z8 b/ h) P $code = substr($code, 700);3 ?8 P2 }/ J v5 C) v' n
//解码目标代码. j$ }( m9 W: r
$cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/'));7 F$ P/ @* o+ v5 ~! K3 L; e
//写入目标文件; ]1 B( _( @% H. t; _: n
file_put_contents($dst, "<?php " . $cracked . " ?>");( u' n0 e- j% N) S6 h6 J
log_info("解码文件:$src 至 $dst 完成");5 l' e# Y7 x, i! a k
}
; A/ B$ Z. A3 x5 c 使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!
- U* t1 H0 y$ w' P. b在线解密工具:http://www.niusoso.net/vidun-decode.php
; H1 p: l# a( z, b& R/ t
@3 T" [8 }" a# Y! M9 |" q3 |0 a
|
|