|
|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式$ e8 p5 h# K5 _" A
文件加密方式,变量混淆+字符串加密
& T& W6 N j4 X! _% V4 l* k9 X. K0 j; {+ h 文件原始内容 :, }- s% {4 q6 U1 U, ]! w/ o
$OOO0O0O00=__FILE__;
" D" a; f- F* H5 B d $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');, \: b* r& p; l% B3 I; ^$ W0 C+ G
$OO00O0000=164;
) ` w1 a @: y8 @6 P1 y $OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};, m, V5 ^; A9 j0 Z7 I
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};. d; a A/ {- R" B
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
7 S. O5 e2 v8 |# w3 e& n. K: Z $O0O0000O0='OOO0000O0';
( _) Y" f, ~% J5 l' `3 \! F eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));. [6 K! ?: U) Z1 q! D
return;?>
0 u0 y+ o+ b* K 这是一段php代码,后面跟了一串加密过的字符串。
4 w; }( F ]) |, p$ W- p$ o: N 很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。
# d& L6 C$ v& k4 ^ 进行分析:
. \4 d/ c" V9 `5 a! D7 l( D $OOO0O0O00=__FILE__;//本文件路径和文件名. |. G0 _% N' P3 o8 p; ]& K5 g3 \
//字符串用于下面构造新的字符串
# B" F7 \3 _$ D5 ^- r $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');) m2 T* j# P& Q+ K1 Y
//下面几行构造字符串base64_decode
" `3 Y) ^ m9 g% k# v3 \ S $OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};5 N- K* ]' L: z/ h" [7 ~- y" M* X
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16}; E5 ^! w0 T- @2 V
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
% i5 I, P% U, B# | //下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法,
: n. y: g3 ~% D8 u( P5 W+ } function crack($src, $dst) {
% y4 f. L g0 m $content = file_get_contents($src);5 m& p- o A# X7 l5 ~- z: o5 {$ v
$pos = strpos($content, '?>');8 a$ H2 r! @% m" X! i& M
//删除读取文件的代码5 x) y% s/ I# n$ [# A, z! j
$code = substr($content, $pos + 3);
" K6 E/ J i8 _* D8 B //删除解码代码5 z. I; b* J9 y1 @- c
$code = substr($code, 700);- N8 ^) P1 u. ~/ O1 B6 \+ T
//解码目标代码
& U* m: \/ k8 I $cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/'));
. ~, `$ R: {1 }1 Y( D //写入目标文件5 ]$ n& X$ L3 a2 ^8 G4 E
file_put_contents($dst, "<?php " . $cracked . " ?>");
# K, f- B/ I* K9 G( _1 `) K' W% ?, J log_info("解码文件:$src 至 $dst 完成");
1 T5 F5 W! p. O9 E( ` }
# S' k( R! \0 g1 T" D- |# `) k 使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!
. B; f" x* G' y7 e+ [) ^0 H. T6 S" M在线解密工具:http://www.niusoso.net/vidun-decode.php9 p* a' B: Z( ~8 A2 c( l
a5 d1 B0 m$ ^: L3 R! ^$ W" S
% u) G6 A, f' r
|
|