|
|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式0 V- e O4 x/ F" O" w& O
文件加密方式,变量混淆+字符串加密$ }6 T6 @$ l% t3 Z) u) Y
文件原始内容 :: i! z$ z V1 `( I( Z( i
$OOO0O0O00=__FILE__;: R$ Z7 B$ K7 O* W
$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');$ ~# I+ t. c2 l. Z+ ^7 p, X9 v
$OO00O0000=164;
, |( S. q2 m9 H H; k2 _2 r) t $OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};" r) G' |6 K1 S( J$ {* T, T' i
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};+ M/ n& p$ n/ d j, R- k; A3 }0 F; C
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};' ~! B$ D3 V3 U: {
$O0O0000O0='OOO0000O0';
5 C7 }" @9 Q& p0 Q eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));
; W( c) a. X* u" @- z8 [- P return;?>: L: m8 S, d* t2 @$ L# [
这是一段php代码,后面跟了一串加密过的字符串。
7 U( g% p% c/ s" c" @' L 很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。7 D/ m0 [7 D8 `
进行分析:: k) u% S% i" Q# k* p) N- H8 W
$OOO0O0O00=__FILE__;//本文件路径和文件名1 @& N6 K0 i( X$ E' E5 c
//字符串用于下面构造新的字符串* m# B0 T9 D' ~1 t
$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
% H5 p5 @, ~/ ?6 W9 T& b3 u% f7 W //下面几行构造字符串base64_decode
- H( f K+ }0 P! \ $OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5}; r4 U% E! B2 x# o4 J5 k3 u
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};' ]1 S4 G9 @% C {, E
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
% L0 _0 y7 _: y% O& [ //下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法,' ~- j' |* `2 T# k1 B
function crack($src, $dst) {
4 I, Z" m) s# s* O8 K$ B- e0 l $content = file_get_contents($src);
1 P2 }+ b4 A, H* X $pos = strpos($content, '?>');
5 I8 W" i! B$ c. n //删除读取文件的代码" k$ a: ^1 `# O# a9 ]% s
$code = substr($content, $pos + 3);9 C0 h, Y& b5 o1 x# E5 h2 s
//删除解码代码
}! Z- o, l8 V3 X* h, h: @) {- H $code = substr($code, 700);
/ P. U, M8 @; a4 F( i //解码目标代码
$ m, y* J: x: P) L1 y $cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/'));
7 j5 a3 Z5 s0 [2 H" Y //写入目标文件- m: j6 ^$ H( F% c3 d+ [: @
file_put_contents($dst, "<?php " . $cracked . " ?>");
* R1 b2 N+ ^+ x# ~# d" |: F$ Q& z log_info("解码文件:$src 至 $dst 完成");
" Q* P6 T6 K0 S3 b( Z+ H1 D# ? }
+ b2 \, t$ A' c1 j0 R 使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!
% r7 C' U1 r& y& i在线解密工具:http://www.niusoso.net/vidun-decode.php- _1 a1 G) A3 K2 l, T5 z) T$ |3 f
& b( u6 C, W; r
' |, F" f [$ I8 j8 G# J" Y |
|