|
|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式8 s7 `9 C' q5 `* I6 [
文件加密方式,变量混淆+字符串加密
2 u7 V9 n) r( C6 j3 f/ F 文件原始内容 :6 z( R7 t8 C; k |( \: `: Q8 L
$OOO0O0O00=__FILE__;3 H. s, d9 {% Z& ^4 t& t- M0 r
$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
6 Q3 T5 u. \0 L- c U $OO00O0000=164;) h3 w9 E" C: s) W8 r" y( @* B8 t4 y
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
7 H7 W8 @) S- F& |% y }& A% W" g $OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
/ @- e" f& k( A9 H $OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
# d5 K# {6 R/ w+ Q8 M $O0O0000O0='OOO0000O0';# T3 ? P2 ?- |8 ]
eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));
* a9 y' P2 ?- l2 ? return;?>$ }2 B. E1 C' {# M) a
这是一段php代码,后面跟了一串加密过的字符串。
9 R1 n+ G, Y5 w3 w% ?; r 很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。* O# ]& u% t5 Y3 A/ T
进行分析:
3 y/ `! c' u- @; t $OOO0O0O00=__FILE__;//本文件路径和文件名. D& O* f7 }* M7 f, b
//字符串用于下面构造新的字符串, j% {, C% c \
$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
5 L+ c9 t% a; j$ Z //下面几行构造字符串base64_decode$ y9 ]) s/ e) K1 q
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
6 y# L( p+ w$ I; f9 G $OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};' r3 e( U- C: P) w0 D7 @9 u! V
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
- f; \$ G; H% e+ @% b0 o0 R7 s) u9 Q //下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法,
8 U" @ J( R m7 W- G' ]- | function crack($src, $dst) {
: t# H! N! f2 l, j$ z) k $content = file_get_contents($src);/ z0 [% @2 a+ @6 ^9 W* Q4 H. D6 n
$pos = strpos($content, '?>');6 Y) z4 Z- J( L; f5 R+ @; R- k
//删除读取文件的代码# H3 ~- G- |4 x# V9 m; D! ?7 V
$code = substr($content, $pos + 3);! @! ~! E' `) F$ l
//删除解码代码9 V- o0 P3 p* H3 l4 R! ~
$code = substr($code, 700);+ `: q0 n& d' |1 C& t- r/ u4 X: ~7 H
//解码目标代码* M5 T# p$ p" S
$cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/'));
& w# f: |9 ^3 e; e/ z6 F //写入目标文件. E8 G: n3 V0 U
file_put_contents($dst, "<?php " . $cracked . " ?>");
5 J0 G+ M/ Q5 V- N log_info("解码文件:$src 至 $dst 完成");9 @' y. t1 B8 z3 m/ ~. W
}) L8 }+ r! N3 r; m
使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!
! \0 \$ K6 O$ N e在线解密工具:http://www.niusoso.net/vidun-decode.php
+ _) }6 U- T8 \8 t4 A9 b" D+ o- I, ~: I: ?/ C. n2 @4 V" D. p. {9 q
4 r% I, m* F# R5 H
|
|