|
|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式
! y# |' F0 m3 O, k文件加密方式,变量混淆+字符串加密; x% e% D3 j; e+ ]
文件原始内容 :- r9 q% q P) r4 d
$OOO0O0O00=__FILE__;
* {$ x% p6 g) j& Q) M $OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');5 q) o4 J8 M* J) |& e& E9 a
$OO00O0000=164;
6 X$ }7 G: w% H0 Z $OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};7 f3 y. X: b& V: }
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
: x* p. p* P9 [( ^& f6 C1 ?2 l $OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5}; r; i( k4 Z4 _
$O0O0000O0='OOO0000O0';
# R& C8 B. p% x( _ eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));
, u9 ?! m* \) U7 B0 _ return;?>
; l, t" r, c: b6 g" e9 N6 m+ i 这是一段php代码,后面跟了一串加密过的字符串。
/ c& ?. i' A3 }* V: d 很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。- h9 Q; M4 j, K& u) C
进行分析:
5 v/ }6 Q! q6 k $OOO0O0O00=__FILE__;//本文件路径和文件名
& L6 V+ v# P; b3 \" T% v7 F u: @ //字符串用于下面构造新的字符串4 T- L# k! B4 M8 l
$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');7 p8 V6 Y! d1 B( \$ o
//下面几行构造字符串base64_decode1 u; d- D# P& }0 {& k
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};6 j K4 \7 y9 X0 \7 J( O+ H
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
8 h; h$ c1 _6 O5 _3 O1 a, `) L0 l $OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
6 p" _: x7 T0 V( B //下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法,
, i( \- k' k% I function crack($src, $dst) {- Y) b7 K5 U4 q1 E) I3 Z# J$ H H
$content = file_get_contents($src);8 F4 M2 C9 s3 G$ @7 F1 C5 g$ A" a2 k6 e! _) O
$pos = strpos($content, '?>');
3 `) }1 G, q }. j' y' {" I+ j, J. y& R //删除读取文件的代码
- ^" v9 y+ G/ `% j $code = substr($content, $pos + 3);: Z) I- P1 S* V* J+ C. {
//删除解码代码
, M( d- G/ h2 b% q* l3 o2 N $code = substr($code, 700);4 K$ @# T- p" i& U; Y
//解码目标代码
5 g9 A5 ^3 Q& v; l* B' c: b. S( d1 I $cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/'));
9 k/ v- i5 G0 x+ R //写入目标文件
0 W j+ |; Q/ e8 c" H! }9 q file_put_contents($dst, "<?php " . $cracked . " ?>");! V2 d6 H; j9 }* U& t
log_info("解码文件:$src 至 $dst 完成");( R; w" V# G! M2 C$ X' M- |
}2 K& C3 h8 y" @" p8 J
使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!
" \0 p- l5 X9 G# a在线解密工具:http://www.niusoso.net/vidun-decode.php
! I7 L) W3 F* c1 }0 p3 \0 ^+ n: S7 @# d; M+ ?3 Z2 [
" |0 z% _; M* ~5 v8 F2 z1 q( _: B |
|