|
|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式
1 r' g. i! n) @; @1 m+ X7 U- _4 V文件加密方式,变量混淆+字符串加密& J4 U/ Z- a2 [- [" d, |; ^+ w
文件原始内容 :
* K; Q: p* X7 G+ z& z $OOO0O0O00=__FILE__;
* v/ _- k; F8 Z1 ^ $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
5 g# X1 ?9 g- n% r2 R4 o2 x' I $OO00O0000=164;
$ o: [8 `( e0 e. g: `: N $OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};+ C) M9 [7 i' W* T
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};$ b8 i- m" _) ^9 G, R/ _8 @
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
5 K8 L$ {9 M+ Q3 h9 k $O0O0000O0='OOO0000O0';; {3 \% z4 q9 E, R$ |& o' e
eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));8 h- C! k* n- b; M% X; m5 p
return;?>/ q3 j: v+ G5 h
这是一段php代码,后面跟了一串加密过的字符串。
: V) {: G! d5 |: P, s5 | 很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。1 Q5 t& Q4 l6 i& B
进行分析:
0 b3 [3 d( V& Z' G* O+ {" \- u $OOO0O0O00=__FILE__;//本文件路径和文件名
/ K% T1 l9 e- ^7 f, f& r8 u //字符串用于下面构造新的字符串
6 q+ B. [3 M6 O$ f3 I $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
) x/ Q5 N+ U& M" \. B C //下面几行构造字符串base64_decode
/ {+ W1 L4 t# ~ $OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
0 n( @6 S, g; O! C $OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
1 f, U8 ]/ R- n1 [/ K6 o& e! M2 H $OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
; t8 ~! W3 |5 K* g8 U3 r8 Q9 j //下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法,8 [% M3 n9 l) ~4 i4 @
function crack($src, $dst) {
1 e- Q% Q2 c, R. { $content = file_get_contents($src);6 e S+ m# x! k7 X0 ~
$pos = strpos($content, '?>');
! P( I% K ]: ]' N/ Q% d //删除读取文件的代码
% G8 A# ^; f( X8 O $code = substr($content, $pos + 3);
! E2 K L6 R9 ?) w //删除解码代码; u+ y' D' {* z g6 R
$code = substr($code, 700);
* ~" z+ P+ T* m! i //解码目标代码
" ^! v* E5 g* w5 ]: L J& c O $cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/'));4 I/ @' c2 s7 H4 h
//写入目标文件
3 q9 p! Z% _8 G( ^0 }, e% d/ s file_put_contents($dst, "<?php " . $cracked . " ?>");5 Z& g# K# v# r1 a; W" n
log_info("解码文件:$src 至 $dst 完成");
% |, B$ r/ }: k6 V( G% M F }
) t5 ?% [. o- L" `3 W8 P, m 使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!
9 u- O! f' V! H4 y在线解密工具:http://www.niusoso.net/vidun-decode.php
/ K+ r0 q1 u2 {
) ^, r3 f+ q6 y! a
! T8 X4 L) V; g+ R; F |
|