|
|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式) z p; T* ]/ t7 {/ t
文件加密方式,变量混淆+字符串加密
2 d6 P4 U8 T) \. i" x8 ^% j 文件原始内容 :
k% D! ~5 h* b $OOO0O0O00=__FILE__;
& v4 K- m) Z6 Q5 N& W2 H $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');( {! y, n0 R( u2 h
$OO00O0000=164;
0 V/ X% ^/ i; g0 U; ~$ [4 u* A $OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
, I* P( u6 U: c' t: r9 ^6 \ $OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};+ l( u- w* {7 o
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
3 o+ u6 B9 x4 _8 S# Z e $O0O0000O0='OOO0000O0';/ W1 V9 ]: q' [3 u6 M1 W% B
eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));
8 S8 ^% m( J0 | return;?>
" X) j1 p7 w' O4 w6 V: e) u1 S8 I 这是一段php代码,后面跟了一串加密过的字符串。. D' b* s/ H% D# ~6 q; x1 e7 i
很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。0 w+ m- t/ _% e9 }, t
进行分析:
7 `6 ?9 K, `' z3 k9 n7 U) k& p $OOO0O0O00=__FILE__;//本文件路径和文件名
0 }, m; A1 Q* f) E% u7 B$ B4 v //字符串用于下面构造新的字符串# E) B# M& }, k& V+ B9 Q8 O* S& @
$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');0 F- A" L6 p7 J) F
//下面几行构造字符串base64_decode; a- X$ G: ], E0 R, n+ B( [
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};& W! q' s* d- P
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};; n0 D/ F3 q2 }/ |
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};$ M% H6 ^4 ?1 {! K$ U! S3 F
//下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法,: O F0 x" P' V& }4 t/ f
function crack($src, $dst) {) P9 S2 ~# ~. I
$content = file_get_contents($src);
1 e6 E+ P" ?" O* V $pos = strpos($content, '?>');
+ `- j7 y' ~/ b+ L& C" @ //删除读取文件的代码8 \+ s- l* g4 c# h, P4 P
$code = substr($content, $pos + 3);
8 I1 w1 w/ M: n) N: l //删除解码代码" A& P! h4 x6 Y' `
$code = substr($code, 700);6 O' b( o- f+ V, B, T8 Q
//解码目标代码
- P9 U, Z7 b% w @ $cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/'));
8 C w4 A2 n/ D: Y2 d3 u! B3 z //写入目标文件
8 C4 s7 W: w3 U* T file_put_contents($dst, "<?php " . $cracked . " ?>");
" ?6 K% b4 O/ ^& F/ e5 E6 f log_info("解码文件:$src 至 $dst 完成");
8 s' _4 P. K' ^8 `8 g4 I }
% @% h2 y- P: s C" [; E! J- w 使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!
# @3 z! c- M2 y5 r [在线解密工具:http://www.niusoso.net/vidun-decode.php
7 ^% J3 L' H# \+ G* f" e+ m7 L5 Q3 q5 y
6 d0 s( y3 h! H4 C% A |
|