|
|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式0 y! W$ v: r) S# X) {2 I# {+ y
文件加密方式,变量混淆+字符串加密
J' s; O7 J- n7 a3 E, H 文件原始内容 :
$ g7 H. z! e \/ x" X" h# x( s $OOO0O0O00=__FILE__;2 q/ ?- v" A8 h7 d
$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
+ x" o$ f P$ }9 `. {# P& D. f) @ $OO00O0000=164;) @1 }2 s8 t7 | D
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};5 b$ o L; D- Z8 |
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};+ W* H" y8 t4 y
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};, l% \$ ~. M h* y4 z0 T+ H
$O0O0000O0='OOO0000O0';
7 s! x% a7 X9 J$ x eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));
0 q i% [. x4 L' I7 L/ p return;?>
* H6 h/ B0 Q5 Z5 M a$ _/ ^$ J 这是一段php代码,后面跟了一串加密过的字符串。
* b2 R5 D( f4 n. W 很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。- i& I- o% _3 W' g
进行分析:
/ q7 b# E% G9 v0 t8 r8 O e' P $OOO0O0O00=__FILE__;//本文件路径和文件名, a- _1 E+ P- `/ x: j. q
//字符串用于下面构造新的字符串! d l- @1 N1 `7 b3 k! u, p
$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');5 X2 i) `+ T- F# T
//下面几行构造字符串base64_decode
1 w6 F+ q: E Q @4 z i2 k% o $OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};9 K4 l$ G, [! B- y5 d5 |7 V- U0 \
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};% V6 q0 T5 u0 x4 k8 @0 }5 T
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
" H8 H: ]& i2 B, m9 i7 Y' {1 P3 o //下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法,! m# p$ u1 _3 e F( A/ q. @( H
function crack($src, $dst) {% I8 J# X$ ], C" L! c! l2 y0 o
$content = file_get_contents($src);; S5 ?: h, F: y1 P0 ^3 J3 R8 c3 L& T
$pos = strpos($content, '?>');6 A2 _3 T; \6 [
//删除读取文件的代码
& b' f+ ?* b. { $code = substr($content, $pos + 3);2 I# v9 H; }$ r
//删除解码代码
4 q) e8 M! z+ Y# i( ?+ ^$ F $code = substr($code, 700);/ |8 u& l; X% T' D
//解码目标代码# A/ p$ i- x5 B- C9 _7 c5 J
$cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/'));
# h# Q. e, f2 U //写入目标文件$ `8 H9 j& {" T2 U- {* q
file_put_contents($dst, "<?php " . $cracked . " ?>");
& Y8 i0 P# ]* O# K0 k log_info("解码文件:$src 至 $dst 完成");
- k. H0 Q; D0 y8 F P1 M }
" f: D6 @4 [9 U& H2 m6 k 使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!
' y; F+ t r/ B/ p8 ?在线解密工具:http://www.niusoso.net/vidun-decode.php; r5 Q; ?% z* ]
: R8 j- @! b+ e& i9 a9 ^1 E3 Q% X1 i* R, `" ~/ n3 S
|
|