|
|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式3 A% F1 l* w% S6 a8 d3 n
文件加密方式,变量混淆+字符串加密1 n! i, t4 s) f+ n1 p: V0 O' Y
文件原始内容 :/ X# b% w! n1 j7 }8 d* V
$OOO0O0O00=__FILE__;& f" A3 h0 |0 S ]7 R
$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');. I4 w. y. j& E
$OO00O0000=164;6 _/ p' `. X% X8 ]; k
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};* O. e- U' |( \4 J: P( p
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};! a4 F$ T) j" k/ \0 q9 @
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};4 }( l6 i3 e# {2 {# v
$O0O0000O0='OOO0000O0';/ }* c% a' X0 o; X: E
eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));
* | F, \' v: {. b! I6 a return;?>
! }6 S" `: B) P4 J2 u 这是一段php代码,后面跟了一串加密过的字符串。, j! h9 ]5 o! {, y
很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。9 C1 {' z5 d( G, U! i6 h g$ P
进行分析:
+ X$ {' i6 R/ Q+ r2 z, Q $OOO0O0O00=__FILE__;//本文件路径和文件名
# X5 P+ A7 r% n- ]% W; E& @ //字符串用于下面构造新的字符串" p" [* T: q% c: t$ |' y& v; @, _
$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
3 z+ S# z m* [( T R* ?& c //下面几行构造字符串base64_decode6 c/ w+ p# I+ [& G6 E( E" L' h
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
: v9 |& O1 m! ^" m3 _ $OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};! t' H1 G* a- _
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
( w5 ?; b/ ^; J! k9 P* c, _4 ? //下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法,* I0 _% l: y) l; O5 w/ Q! X
function crack($src, $dst) {3 y* |& K; H5 |( B
$content = file_get_contents($src);1 p3 w: C3 A$ ^
$pos = strpos($content, '?>');# y/ x: g2 H5 l( i0 P
//删除读取文件的代码$ k* F9 I, D, H: }5 [9 U
$code = substr($content, $pos + 3);! O$ L% M8 Q$ w% |! g/ R9 U' v, f
//删除解码代码; H( ]0 R% f7 A% S1 V& J. h2 M9 s
$code = substr($code, 700);/ n+ d: j/ d5 j! D1 b
//解码目标代码' A. t3 [9 W; B1 T: y7 L* r" k
$cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/'));
( v2 d% j) ^$ @ ?+ U //写入目标文件
- l* H" C- V! d# g, u/ H file_put_contents($dst, "<?php " . $cracked . " ?>");% ^. m- G' P+ y
log_info("解码文件:$src 至 $dst 完成");
! H, E3 l8 c3 N3 H9 C0 ` }- e8 t) e& g2 ^9 X
使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!
& h0 I5 [, A2 e% E+ i& s/ R在线解密工具:http://www.niusoso.net/vidun-decode.php
/ {' Z. y1 E- ~+ W! G8 r- Y5 s7 {( u
0 w6 I. n7 K# I% r- x4 L Z% l$ Q) S* O( v* P' b; f: L m
|
|