|
|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式
) J$ S& k9 O- P文件加密方式,变量混淆+字符串加密* k, u0 M# X1 a# s; O
文件原始内容 :
' g, }: J) p- l$ P $OOO0O0O00=__FILE__;/ D% M& n. g' J/ M- f/ H7 y
$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');2 a% D- T, d6 J' S" \# a# w/ t
$OO00O0000=164;: ~! x0 G$ p9 w% a& }4 ^
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
$ Y8 c0 L( V0 U; _9 g: W+ i $OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};% D* k( I; s5 @8 @
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5}; p" [$ @" |$ O7 M0 N: H) @$ q* r
$O0O0000O0='OOO0000O0';. S& F5 `$ J4 s k m' d. u
eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));" O2 ^! G2 l; r& k' i4 J
return;?>
8 y4 ^2 m7 @' F% x; {. Z 这是一段php代码,后面跟了一串加密过的字符串。
8 S( F: H1 n+ b4 z+ E0 e; O8 M$ W( X5 Y8 R 很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。8 ` D. ^; q% m' d0 o
进行分析:
3 t- J+ {: L8 S: ?% a8 y } $OOO0O0O00=__FILE__;//本文件路径和文件名
/ L( y% K' J3 [+ T% y% _8 \& X //字符串用于下面构造新的字符串
' J. |) r% V3 C u2 p/ P" @! I $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
& Z& q* K# n& O6 h9 { //下面几行构造字符串base64_decode# L& F2 e- o/ l4 W$ W3 q5 C
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};$ c" I" g6 t' h
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
/ \( i& ~) w3 j* o% [4 j; Z $OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};: s/ m( U* o6 m3 c- C6 j
//下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法,# r( |1 p5 O" T/ W. |
function crack($src, $dst) {
: W1 O4 l& J# {# ]; J$ e5 u; ? $content = file_get_contents($src);8 p5 j; `+ S0 W$ D* K" `/ Q/ N
$pos = strpos($content, '?>');8 W/ |: R" y- }" b& K# b9 h
//删除读取文件的代码
4 `7 D. G! |- v% \) g0 L6 ? $code = substr($content, $pos + 3);
+ r8 @1 w2 d* U9 k0 V //删除解码代码$ g" s0 ]# ^+ A/ m
$code = substr($code, 700);& j7 k1 s, m5 F- [" e' g
//解码目标代码& G# ^( Q: g4 w/ ^2 ]! m
$cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/'));
# Q3 B, U/ c! f+ U: g2 s. G //写入目标文件6 K, k' r, l% M S
file_put_contents($dst, "<?php " . $cracked . " ?>"); X3 K2 Q1 D: T8 o7 f9 F+ y
log_info("解码文件:$src 至 $dst 完成");
% k1 v, z0 ~% F* n! H& x }4 L6 Y4 W. J2 z9 ^& y& B
使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!
. I- `: @1 }0 n" G" s+ Q在线解密工具:http://www.niusoso.net/vidun-decode.php% ~- _ y/ X* Z& S# d
( @- a& \# C6 @8 Z) |! ^& z$ w# A) c/ z
4 `* g, i* n0 h: t+ q' t6 R |
|