|
|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式
/ P3 M: g$ y/ u6 Y! ^6 G% a文件加密方式,变量混淆+字符串加密/ a& m% ~/ S" H2 i8 z9 e
文件原始内容 :
( A1 D& g7 b$ I3 `( L; c $OOO0O0O00=__FILE__;
+ b: ~" @. l2 U6 } $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
. L" X- Z0 u$ r- h! G8 [& \. I1 `" ~ $OO00O0000=164;
% u; L2 D0 z1 G& { $OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
0 B) e% ^1 _: L2 y6 C7 {6 R $OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
d* }# w2 }; \5 d0 N# W $OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
8 T3 Y: V$ ~+ j J" k! c $O0O0000O0='OOO0000O0';+ g0 n) m* M7 ?+ ?' Q( V
eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));8 M" z* U# Q! V- }! t
return;?>4 a/ p6 {+ t, |' R
这是一段php代码,后面跟了一串加密过的字符串。; f$ ?1 r4 {' j4 [: p
很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。/ q( e V2 t S
进行分析:
v- g7 w: x }. i9 Z8 b& K $OOO0O0O00=__FILE__;//本文件路径和文件名
$ w& Z# f6 |3 g6 L" v //字符串用于下面构造新的字符串
0 j0 f0 Q ]* a4 p- z* Y6 `0 X4 E $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');( F( \$ w- _! g7 X3 |( o
//下面几行构造字符串base64_decode
9 n' Q. y W% ]+ g/ X $OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};1 K7 w6 y- z; n' |
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
7 r/ h x" R$ \3 {/ [* \/ h $OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};* Y, B$ W1 J$ T9 K. G# w
//下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法, p; ^# E: g4 |6 O* A1 U0 I$ U
function crack($src, $dst) {
# w H0 V* G. U8 g: n $content = file_get_contents($src); H$ a# [; [; V2 L7 H m( l( h* I
$pos = strpos($content, '?>');- V: I' L' R; d& }. u* l
//删除读取文件的代码
/ S& u# _1 N' a# b# h $code = substr($content, $pos + 3);
- Q. w6 d! t2 A //删除解码代码8 w H- L- c0 w( K7 e
$code = substr($code, 700);- [+ S- N- n) @+ z6 I. g4 |
//解码目标代码
! o0 z2 u5 f& Q. M9 B }5 ^ $cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/'));
' e- S& _* {. ]3 S4 P8 Y3 n& O //写入目标文件$ X8 x7 V+ E* ^/ k8 j! p
file_put_contents($dst, "<?php " . $cracked . " ?>");4 v O/ d* y- L4 E& |
log_info("解码文件:$src 至 $dst 完成");4 V ~& |" ~$ G1 Y0 { Q
}
6 D# V- S- ]) a/ ?: p 使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!
9 W9 W. d6 y! E& \8 f/ ^' q3 j在线解密工具:http://www.niusoso.net/vidun-decode.php
. O/ `% ]# `# l
5 N5 `$ A9 h3 n2 d( P( [
$ n9 B2 ?- K( C9 p2 N: Z+ M% ]) [ |
|