|
|
今天碰到一个网站的源码用的是以下的加密方式,看起来很乱但又有一定的规律,找了下破解方式
. h1 R% C6 Y( J8 d* p8 U文件加密方式,变量混淆+字符串加密
, ]. z0 n# m. ]. Z8 \ 文件原始内容 :, z5 m$ U; m4 g$ C) d" q6 _0 Z. o
$OOO0O0O00=__FILE__;9 q/ j$ l" C4 E( ^0 A
$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');8 V$ p: Z) y0 ], m
$OO00O0000=164;
' n4 l1 y$ q- j, i9 }$ c, I $OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
8 x3 {3 h5 m* k1 S2 `' I $OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};- J6 d$ g; M; `! w. b8 c
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
" l3 h& r, Y! L+ C/ P7 R7 u+ ? $O0O0000O0='OOO0000O0';
' o' V6 F3 ~; d5 o* w4 i eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAE3fS4kT09PMDAwAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYxKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDcwMCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));. v; p6 [8 t( w" \! `. k" H
return;?>
( C6 t! e! C- h( H/ X 这是一段php代码,后面跟了一串加密过的字符串。3 O# u2 R) [5 \% b% _
很显然,开头的这几行代码是执行解密的,或者是解密的前秦工作。
; p& |: ?! ^) p# i5 H, m* _ 进行分析:! a, i% }1 G! x! q* Q. f
$OOO0O0O00=__FILE__;//本文件路径和文件名 Q. P& W# N. z l
//字符串用于下面构造新的字符串5 _% }* D( M3 R- F, U& {$ u
$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');7 ?& r$ w4 s1 N( P5 r! a! A' f1 }1 B8 d% S
//下面几行构造字符串base64_decode( n7 k2 ~4 }0 d. e5 F! x+ G
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
) U: u2 \; S. A' |0 C2 t$ Y; H $OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};8 @$ p6 q! z/ L E6 K
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};2 o, ?! h2 B' B4 v' L
//下面通过base64 decode生成一段读取自身文件的代码,先读取了若干字节,丢弃了,分析可能是头部执行初步解密的PHP代码,接着又读取700字节,进行字符串变换 base64_decode之后,得到一段继续读取文件解密的代码,经分析发现,第二次读取的700 字节中包含一版权声明的代码。第三次读取文件后经过解密,得到了原始代码 。解密过程分析完毕,下面开始写破解算法,* Y: b. f S, M
function crack($src, $dst) {7 `4 S$ w2 V; ` u2 A( z% x3 ]
$content = file_get_contents($src);
- ^* c! J0 q* D $pos = strpos($content, '?>');3 h+ A: s! a) \( N) r1 W7 |# r& Z
//删除读取文件的代码
& a% W8 u* @# ] $code = substr($content, $pos + 3);
/ o4 |0 w/ _7 p6 S6 E6 P //删除解码代码
, X K( H7 b) j$ j $code = substr($code, 700);
& T5 B. X) d" ^ L$ Z* y //解码目标代码
* Q3 A& M [- B# ]( S% n $cracked = base64_decode(strtr($code, 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgPpQqSsVvXxZz0123456789+/=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvwxyz0123456789+/'));
0 j1 ]* f5 R) W( Q! a/ { //写入目标文件
; F5 Q) ?) {& ] W6 z4 C file_put_contents($dst, "<?php " . $cracked . " ?>");
! k# `, S* O) O# F' ] log_info("解码文件:$src 至 $dst 完成");
6 |) s' A, p6 W1 p }8 _- {$ u, o4 Q1 O2 V$ T
使用该函数对加密的文件进行解密,打开解密的文件 ,格式化代码,原始代码完善呈现!
; m- S% Q% s( f; b: k% v在线解密工具:http://www.niusoso.net/vidun-decode.php
" j. {9 S# A$ T8 A4 ~/ D3 Y# g* k5 n
9 L$ S$ J- S( y+ F J+ C( K |
|