欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

解密一个PHP自定义加密的文件

程序员文章站 2022-07-03 09:56:32
这种自定义加密方法国外的程序很常见(个人猜测而已,因为类似解密文章都是国外的,从英、俄语、波斯文的文章都有,虽然看不懂,解密后的代码也不一样,但是加密方法大同小异,具体看文章末尾分析) 这个...
这种自定义加密方法国外的程序很常见(个人猜测而已,因为类似解密文章都是国外的,从英、俄语、波斯文的文章都有,虽然看不懂,解密后的代码也不一样,但是加密方法大同小异,具体看文章末尾分析)

这个程序的作者简直可以用疯狂和变态来形容。我先来整理一下代码。

原加密代码为:

<?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的。虽然看不懂,但是却看不到国内解密这样加密手段的例子。写这篇文章算是补充一下国内相关内容的空白,也算是抛砖引玉吧,希望牛人们能多写些这样的文章。​