|
|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式
' Y5 }$ F# \, W R文件加密方式,变量混淆+字符串加密* n$ |7 R: P2 ]6 ~' N% |8 c
文件原始内容 :
# Z0 @! h2 O3 y/ W% [4 L$ q9 a, |# d) j $OOO0O0O00=__FILE__;
' c5 ~2 [$ d4 k' c. w- e8 m $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');! `* m: l [0 R! b4 H2 n7 Q
$OO00O0000=164;' H+ M2 [: C) a2 y# p$ |. c
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};/ y! l4 I& K* Y+ S# z
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
% x6 G. F7 O5 ~- T s $OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};+ y, H1 J: u6 N1 T
$O0O0000O0='OOO0000O0';, B0 W( O5 u# ?' T# V. ]
eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));
! |* Z% R1 s2 B4 S return;?>
) b+ l* C6 w6 B# [ 这是一段php代码,后面跟了一串加密过的字符串。: m& k% s& T; I, I) i, n% X
很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。* Y& ]4 Y; k" o P# V
进行分析:
/ r- I" \! I( y $OOO0O0O00=__FILE__;//本文件路径和文件名; e: w& z8 z9 ]1 T, O3 o7 A
//字符串用于下面构造新的字符串" H' B% V- E! _/ B
$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');& s& B2 B$ g& K9 n
//下面几行构造字符串base64_decode5 M( p5 ~1 x( A! V- w* L
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
) G' F3 J3 B- R' T/ o $OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
' n! p9 r# u+ Q6 S1 b' H" l" p $OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
' y# ^6 P# {& z% l //下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法,4 h7 B* H. u; l. o7 b% {' E( B
function crack($src, $dst) {
' p7 j V" U, ^7 Q& D $content = file_get_contents($src);
! O( N1 u/ P8 c% M# S, K8 A- j $pos = strpos($content, '?>');) p# u3 G5 U( m' _1 j5 a i: A
//删除读取文件的代码
2 `8 M2 T0 z- Z1 z $code = substr($content, $pos + 3);6 H! }( r: v- W/ j/ ]. H4 Z
//删除解码代码 ^8 @( e9 I$ L- b$ S2 ~
$code = substr($code, 700);
1 h! ?' n9 P1 s0 x* | //解码目标代码7 G8 C0 j' z3 k4 v& g
$cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/'));
# H O) S# _; w //写入目标文件
" F0 t* _: F; o- d file_put_contents($dst, "<?php " . $cracked . " ?>"); d1 U. f/ p- Z2 Y% l9 @
log_info("解码文件:$src 至 $dst 完成");
! F1 _5 [2 Z* U8 F5 J8 n' U }- c! U# [4 O- s
使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!8 N" e- }. |- g5 ~9 H/ }
在线解密工具:http://www.niusoso.net/vidun-decode.php" ]5 Y6 N' p2 o* ?+ T. Z
% B# [$ m( f3 K6 L2 Y" y
6 ^! \" J. R& m, K |
|