|
|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式& R- y; w- M: m+ D1 g5 ^3 O2 ?
文件加密方式,变量混淆+字符串加密, m# z2 c4 }* Q- s% m$ B
文件原始内容 :
2 Z8 K3 l; V- Y $OOO0O0O00=__FILE__;& B" p4 w& I* \/ {# {' Y; ?
$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');$ e1 U7 H! T$ O3 O2 }# T: \
$OO00O0000=164;! b! z8 |2 `5 O- Y
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};" S W7 L, r$ q Q% M# ?+ c: X& t* d
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};# D7 {, |* {- b! D1 `7 v$ l
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};# {$ X6 v, Q! C9 P2 g H9 p# w
$O0O0000O0='OOO0000O0';
- ^8 l5 o+ w; d6 G6 s" `9 r3 G) `% y eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));
* T; J& s( G: j- I- p3 M return;?>
3 ~5 R+ u- Y j: ^7 { 这是一段php代码,后面跟了一串加密过的字符串。5 j/ L* C1 K- _9 W* g' X0 y
很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。
* J ^! B8 D$ |, I5 x 进行分析:( L9 f0 ?) M3 k4 |0 ?6 v
$OOO0O0O00=__FILE__;//本文件路径和文件名7 l6 G4 D: b9 m( C
//字符串用于下面构造新的字符串
0 x8 s ^+ `0 X" W $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');
3 q/ ]2 C- ~ c& Q/ Q6 S //下面几行构造字符串base64_decode: w0 k' E; o A) m- n! u/ h& @
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};& `! N8 q; h8 }" E# _+ {- ]
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};' s# Z" [. i9 N8 G" j, |
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};4 t0 s+ n* {6 S9 \: H
//下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法,
7 f" K2 Z- ?$ V1 U function crack($src, $dst) {
8 Z3 _ ~8 e5 _ $content = file_get_contents($src);
6 C/ t/ J1 Q# {; ~2 E6 N$ c $pos = strpos($content, '?>');/ ]9 k7 F- N4 o) u
//删除读取文件的代码
, L9 W0 G7 }: |( }) A $code = substr($content, $pos + 3);. V/ i, I& B% K* _' `
//删除解码代码
0 S5 Y% w/ W) L5 Q7 Z7 H $code = substr($code, 700);
4 r9 d% Y0 X( I# d# ?' } //解码目标代码0 ? Z1 r% d' }: Q5 W* u2 o) B. x
$cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/')); V% D5 m+ M) U6 {* B
//写入目标文件
3 L* t6 F+ S1 h, p file_put_contents($dst, "<?php " . $cracked . " ?>");
6 i: S {) e$ [. W' o0 N% | log_info("解码文件:$src 至 $dst 完成");- y+ p. L+ D' P9 g. w& ?9 W1 f# R
}: c0 \# U v' j$ ^) `) n4 _
使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!
7 t+ p2 F# x1 s4 C+ n: ]在线解密工具:http://www.niusoso.net/vidun-decode.php
0 q- |8 _* X, ^* Y4 G6 a
. U- ~$ V4 C, ~0 Y" O) F" r$ P. S3 G# o$ P5 l$ Q$ d# T
|
|