解密一个PHP自定义加密的文件
这个程序的作者简直可以用疯狂和变态来形容。我先来整理一下代码。
原加密代码为:
<?php
$OOO000000=urldecode('%66%67%36%73%62%65%68%70%72%61%34%63%6f%5f%74%6e%64');
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
$OOO000O00=$OOO000000{0}.$OOO000000{12}.$OOO000000{7}.$OOO000000{5}.$OOO000000{15};
$O0O000O00=$OOO000000{0}.$OOO000000{1}.$OOO000000{5}.$OOO000000{14}.$OOO000000{3};
$O0O00OO00=$OOO000000{0}.$OOO000000{8}.$OOO000000{5}.$OOO000000{9}.$OOO000000{16};
$OOO00000O=$OOO000000{3}.$OOO000000{14}.$OOO000000{8}.$OOO000000{14}.$OOO000000{8};
$OOO0O0O00=__FILE__;
$OO00O0000=45296;
eval($OOO0000O0('aWYoITApJE8wMDBPME8wMD0kT09PMDAwTzAwKCRPT08wTzBPMDAsJ3JiJyk7JE8wTzAwME8wMCgkTzAwME8wTzAwLDEwMjQpOyRPME8wMDBPMDAoJE8wMDBPME8wMCw0MDk2KTskT08wME8wME8wPSRPT08wMDAwTzAoJE9PTzAwMDAwTygkTzBPMDBPTzAwKCRPMDAwTzBPMDAsMzgwKSwnVnh6dytBT1BpMUZudXRnQzdIOTY1MkpSakk0LzNaZnF5MGM4TlVlTVlHUXJza2xtU29wQmhiREtYTGR2V0VhVD0nLCdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJykpO2V2YWwoJE9PMDBPMDBPMCk7'));
return;
?>
我看了代码的第一眼,先把倒数第三行的eval改成了echo
作者:YoCo Smart
来自:Silic Group Hacker Army
转载请注明:http://blackbap.org
其次就是line2的urldecode用url解密得到内容为:fg6sbehpra4co_tnd
这个加密最邪恶的地方其实是变量,变量用字母o和数字0来迷惑人,让人分不清什么跟什么(这个一会儿说)
先说第一层解密后得到的内容:
<?php
$OOO000000='fg6sbehpra4co_tnd';//url解密得到的内容
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
$OOO000O00=$OOO000000{0}.$OOO000000{12}.$OOO000000{7}.$OOO000000{5}.$OOO000000{15};
$O0O000O00=$OOO000000{0}.$OOO000000{1}.$OOO000000{5}.$OOO000000{14}.$OOO000000{3};
$O0O00OO00=$OOO000000{0}.$OOO000000{8}.$OOO000000{5}.$OOO000000{9}.$OOO000000{16};
$OOO00000O=$OOO000000{3}.$OOO000000{14}.$OOO000000{8}.$OOO000000{14}.$OOO000000{8};
$OOO0O0O00=__FILE__;
$OO00O0000=45296;
/*echo解密得到的内容*/
if(!0)$O000O0O00=$OOO000O00($OOO0O0O00,'rb');
$O0O000O00($O000O0O00,1024);
$O0O000O00($O000O0O00,4096);
$OO00O00O0=$OOO0000O0($OOO00000O($O0O00OO00($O000O0O00,380),'Vxzw+AOPi1FnutgC7H9652JRjI4/3Zfqy0c8NUeMYGQrsklmSopBhbDKXLdvWEaT=','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'));
eval($OO00O00O0);
return;
?>
其实看清楚变量哪个跟哪个是哪个就很容易解密了,构造一个解密文件运行:
<?php
$OOO000000='fg6sbehpra4co_tnd';
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5}; //base
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
$OOO000O00=$OOO000000{0}.$OOO000000{12}.$OOO000000{7}.$OOO000000{5}.$OOO000000{15};
$O0O000O00=$OOO000000{0}.$OOO000000{1}.$OOO000000{5}.$OOO000000{14}.$OOO000000{3};
$O0O00OO00=$OOO000000{0}.$OOO000000{8}.$OOO000000{5}.$OOO000000{9}.$OOO000000{16};
$OOO00000O=$OOO000000{3}.$OOO000000{14}.$OOO000000{8}.$OOO000000{14}.$OOO000000{8};
print_r($OOO000O00);
print_r('<br>');
print_r($O0O000O00);
print_r('<br>');
print_r($O0O00OO00);
print_r('<br>');
print_r($OOO00000O);
return;
?>
这样我们就可以清楚几个变量对应的值了:
$OOO000000=>fg6sbehpra4co_tnd
$OOO0000O0=>base$OOO000O00=>fopen
$O0O000O00=>fgets
$O0O00OO00=>fread
$OOO00000O=>strtr
$OOO0O0O00=>__FILE__
$OO00O0000=>45296
将原代码中的变量一一替换得到:
<?php
/*定义加密部分*/
$OOO000000='fg6sbehpra4co_tnd';
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};//base
$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};
$OOO000O00=$OOO000000{0}.$OOO000000{12}.$OOO000000{7}.$OOO000000{5}.$OOO000000{15};//fopen
$O0O000O00=$OOO000000{0}.$OOO000000{1}.$OOO000000{5}.$OOO000000{14}.$OOO000000{3};//fgets
$O0O00OO00=$OOO000000{0}.$OOO000000{8}.$OOO000000{5}.$OOO000000{9}.$OOO000000{16};//fread
$OOO00000O=$OOO000000{3}.$OOO000000{14}.$OOO000000{8}.$OOO000000{14}.$OOO000000{8};//strtr
$OOO0O0O00=__FILE__;
$OO00O0000=45296;
/*加密结束*/
/*操作开始,既原代码中二次加密的部分*/
if(!0)$test=fopen(__FILE__,'rb');
fgets($test,1024);
fgets($test,4096);
$data=base(strtr(fread($test,380),'Vxzw+AOPi1FnutgC7H9652JRjI4/3Zfqy0c8NUeMYGQrsklmSopBhbDKXLdvWEaT=','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'));
eval($data);
return;
?>
去掉一下无关代码:
<?php
if(!0)$test=fopen(__FILE__,'rb');
fgets($test,1024);
fgets($test,4096);
$data=base(strtr(fread($test,380),'Vxzw+AOPi1FnutgC7H9652JRjI4/3Zfqy0c8NUeMYGQrsklmSopBhbDKXLdvWEaT=','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'));
eval($data);
return;
?>就这么简单 www.2cto.com
PS:原文件后面还有一堆数据,内容过长我就不贴了。。。
解密手段并不高明、高深,只要弄清变量谁是谁就很简单了。我Google了一下,国外有很多解密这个加密手段的例子,有混淆字母o和数字0的,也有混淆字母l和数字1的。虽然看不懂,但是却看不到国内解密这样加密手段的例子。写这篇文章算是补充一下国内相关内容的空白,也算是抛砖引玉吧,希望牛人们能多写些这样的文章。