|
|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式: s( Z- Z$ \6 E4 Z
文件加密方式,变量混淆+字符串加密# T8 ?* O1 g3 w e( q, l: F. f
文件原始内容 :0 t" X2 s3 g D# O+ U* d5 ~# ?7 v+ @
$OOO0O0O00=__FILE__;
7 G6 x- b, r% i: A $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
0 g* B" [- y) P& A/ R0 Q $OO00O0000=164;$ u+ h! U) o9 e4 I
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};, R( }; y* V! D/ ?4 i
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};' m( Y* y! V+ s
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
% }' ?$ U+ U( F( Y/ Y $O0O0000O0='OOO0000O0';* b1 F! W3 ?0 P
eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));2 c1 v2 |7 x8 {1 t' k! w$ ~
return;?># y* k. o9 I" ~% B: ^" ^
这是一段php代码,后面跟了一串加密过的字符串。
* k% f2 H+ z, ]7 S7 b) j8 T/ L# ^ 很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。
- k' O* T1 c( z* y 进行分析:
) H6 u9 ?, {1 @3 }8 [/ }- `$ w8 M. J $OOO0O0O00=__FILE__;//本文件路径和文件名1 C9 g1 o/ J& }% h) q" E: A( e
//字符串用于下面构造新的字符串
# |) R) n7 A# r% x $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
" H9 p$ }, V$ |( q/ g* S8 S- Z //下面几行构造字符串base64_decode$ N! C9 O; c- ~3 P/ ]5 r0 l
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};5 B1 ~- e( c6 f* k
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};: S8 F2 D3 r* s7 b+ U' n
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
# H' E3 z6 w0 c& {% N2 |. V //下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法,2 h7 b' r! {3 I$ Z% b
function crack($src, $dst) {
8 W6 n; w H% |' b $content = file_get_contents($src);* ?+ ]/ T- h, a0 M6 J# I
$pos = strpos($content, '?>');$ Q6 g& R$ F. R8 ]
//删除读取文件的代码; p5 X9 q& m) M! M
$code = substr($content, $pos + 3);9 {3 w- q. q7 H8 {
//删除解码代码 K1 h# Z' R' }0 V
$code = substr($code, 700);1 K/ r$ t& y+ |: C! [
//解码目标代码: F- |" M/ f: v: q' s
$cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/'));
8 v9 ?/ F1 b# S/ Y //写入目标文件: S8 t0 s* s* H' J- |5 J
file_put_contents($dst, "<?php " . $cracked . " ?>");: T" ^$ [, u: X, t( U5 U- {
log_info("解码文件:$src 至 $dst 完成");. r9 g0 `- V6 X0 `
}7 ^! H @* M4 l+ g; u7 D
使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!
. A( B7 D, M# M D F$ X在线解密工具:http://www.niusoso.net/vidun-decode.php
' e+ u" Z0 g# A+ J5 T! R7 D6 @. b, J5 \
- y; V6 A1 P4 w! d W. J& q
|
|