PHP解密:phpjm混淆加密
本帖最后由 willydong 于 2018-9-9 19:36 编辑此文受下文启发,所以连标题都模仿一下
PHP解密:zym加密 带乱码调试过程 - 『软件调试区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cnhttps://www.52pojie.cn/thread-693641-1-1.html
此文针对php加密实验样本来自如下网站:
PHP文件加密 - PHP在线加密平台http://www.phpjm.net/encode.html
分析了一下此加密的思路
1、将原始文件gzcompress、base64_encode处理得到长度为X的加密串
2、将加密串按照M+4+1+N的长度进行分割,X=M+4+1+N,M和N有随机性,每次加密出来结果不一样
3、将长度为4的串加密处理,按照gzcompress、base64_encode、base64_encode、strtr(包含一个替换字典rpd)的步骤,得到加密后的串str4和替换字典rpd
4、将str4、rpd、strM、str1、strN明文显示在加密后的文件中,但自解析方法通过层层混淆加密隐藏起来。
完毕。
这么说来,思路就很清晰了。但是,获取上面的思路,需要我们先从一堆混沌中找到蛛丝马迹。
解密方法:
1、获取str4、rpd、strM、str1、strN
2、用第3步加密的逆向方法获取真正的str4
$str4 = gzuncompress(base64_decode(base64_decode(strtr($str4, $rpd, strrev($rpd)))));
3、拼接加密串
$str = $strM.$str4.$str1.$strN;
4、解密得到原始文件
$output = gzuncompress(base64_decode($str));
5、格式化并输出文件
初步的代码如下,可保存为utf8格式的de.php文件执行,欢迎将结果回帖告诉大家
<?php
//origenal data
//全文件倒数第5个字符串,函数的第1个参数
$str4 = "BU5vTOFFDU1ZjGdZ�bqtRRkWM�";
//全文件倒数第4个字符串,函数的第2个参数
$rpd = "ZOyQUbqDB";
//在return "J";}}else{global包含之内,J会变化
$str1 = "J";
//全文件倒数第3个字符串,'和"之内(这是eval中嵌套的代码,只留有用部分)
$strM = "eNo1jkFqwzA�URK/iwoek8G�+Qkqx7hK6LI�YtQB5J0q3xLxrYcWbasWHF�kOVetNt3NMI�/HbHbbj91xf�0zS732WrD6T�";
//全文件倒数第2个字符串,"和'之内(这是eval中嵌套的代码,只留有用部分)
$strN = "l/Z5W2�1+Z8uP6f0vI�YKwc4IN9Uj3�LvKIBR8EhzB�L/WgPELDWMe�qMQah7k9JJc�LsHkIuNc8RF�KPHoAemLULf�hSrQaOZrLHx�pAnde+dccJV�er+1JTIPOUOgoon7gLxH3h�xwi7sTNOUK1�MI+0iEF4tkf�FFPZWtbWWTv�8fbf284XrQ=�";
//serial data
$str4 = gzuncompress(base64_decode(base64_decode(strtr($str4, $rpd, strrev($rpd)))));
//decode data
echo "phpjm has encoded .php file as strM.str4.str1.strN<br>";
echo "the length is:strM+str4+str1+strN=".strlen($strM)."+".strlen($str4)."+".strlen($str1)."+".strlen($strN)."<br><br>";
$str = $strM.$str4.$str1.$strN;
$output = gzuncompress(base64_decode($str));
//output data
echo "decoded:<br>";
highlight_string($output);
echo "<br>eval:<br>";
eval($output);
?>
土豪接口
加密文件样本,结合起来看更利于学习:
在基础功能上增加了正则自动匹配,用法 php de.php xx.php
xx.php为需要解密的文件,将生成一个de_xx.php文件
如果不输入参数直接用php de.php或者用网页访问,与基础版一模一样。
<?php
$in_file = $argv;
if ($in_file) {
$out_file = 'de_'.$argv;
$code = file_get_contents($in_file);
$code = explode('return ',$code);
$code = $code;
preg_match_all('/\"(.*?)\"/', $code, $result);
$result=$result;
$str4 = str_replace('"','',$result);
$rpd = str_replace('"','',$result);
$str1 = str_replace('"','',$result);
$strM = substr($result,strpos($result,'\''));
$strN = substr($result,0,strpos($result,'\''));
/*preg_match_all('/\".*?\'/', $code, $result);
$strN = str_replace('."','',str_replace("'","",$result));*/
}
else{
//origenal data
//全文件倒数第5个字符串,函数的第1个参数
$str4 = "BU5vTOFFDU1ZjGdZ�bqtRRkWM�";
//全文件倒数第4个字符串,函数的第2个参数
$rpd = "ZOyQUbqDB";
//在return "J";}}else{global包含之内,J会变化
$str1 = "J";
//全文件倒数第3个字符串,'和"之内(这是eval中嵌套的代码,只留有用部分)
$strM = "eNo1jkFqwzA�URK/iwoek8G�+Qkqx7hK6LI�YtQB5J0q3xLxrYcWbasWHF�kOVetNt3NMI�/HbHbbj91xf�0zS732WrD6T�";
//全文件倒数第2个字符串,"和'之内(这是eval中嵌套的代码,只留有用部分)
$strN = "l/Z5W2�1+Z8uP6f0vI�YKwc4IN9Uj3�LvKIBR8EhzB�L/WgPELDWMe�qMQah7k9JJc�LsHkIuNc8RF�KPHoAemLULf�hSrQaOZrLHx�pAnde+dccJV�er+1JTIPOUOgoon7gLxH3h�xwi7sTNOUK1�MI+0iEF4tkf�FFPZWtbWWTv�8fbf284XrQ=�";
}
//serial data
$str4 = gzuncompress(base64_decode(base64_decode(strtr($str4, $rpd, strrev($rpd)))));
//decode data
$str = $strM.$str4.$str1.$strN;
$output = gzuncompress(base64_decode($str));
//output data
if($in_file){
file_put_contents($out_file,$output);
echo '解密后文件已写入到 '.$out_file;
}else{
echo "phpjm has encoded .php file as strM.str4.str1.strN<br>";
echo "the length is:strM+str4+str1+strN=".strlen($strM)."+".strlen($str4)."+".strlen($str1)."+".strlen($strN)."<br><br>";
echo "decoded:<br>";
highlight_string($output);
echo "<br>eval:<br>";
eval($output);
}
?>
未完待续
下一步将补充3个方面的内容:
1、vscode+xdebug+php的调试环境安装和配置,网上的资料都不够完整,对于第一次接触的人来说不够友好和傻瓜,我来补上。(已经写好word了,完善一下格式再考虑以什么方式发上来(开贴或者发附件))
2、从零开始一步步搞定phpjm混淆加密的解密
3、破解文件de.php写好了,但自认为不够完善,后续得考虑自动格式化文件。
时间关系先写心得,截图等工作待完成。此版块不知道需不需要截图啊,看了版规貌似不明确,如果有问题请提醒我修正,谢谢。 willydong 发表于 2019-2-21 21:48
你先看看解密样本文件是否成功,如果不成功,说明你用法不对。
是完全解密了,我自己写了一个代码上传加密后用您的解密程序解密了,但是解密后的源码后面还是有一堆乱码。
未加密文件`jm.php`
内容:
```
<?php
function phpjm($src){
return $src;
}
```
加密后文件`jm_.php`
内容:
```
<?php
/*
éùÃ÷£oòÔÏÂDÅÏ¢2¢2»êDZ¾phpÎļtμÄ×÷Õߣ¬2»¶Ô±¾Îļt¸oÔe£»òÔÏÂDÅÏ¢Ö»êÇìá1©á˶Ա¾phpÎļt¼óÃü¡£èç1ûDèòa¶ÔPHPÎļt½øDD¼óÃü£¬Çë°′òÔÏÂDÅÏ¢áaÏμ¡£
Warning: do not modify this file, otherwise may cause the program to run.
QQ: 1833596
Website: http://www.phpjm.net/
Copyright (c) 2012-2019 phpjm.net All Rights Reserved.
*/
if (!defined("CCEFCEABABCCA")){define("CCEFCEABABCCA", __FILE__);global $ž,$,$‰„,$‘Ÿƒ,$‘Šƒ’†,$•ŒŽ–,$Š?ŒŒ”Ž,$†„‹„Ž’,$“’ƒ“—–ž›ˆ,$…‘—”ž…Š‰‡˜,$Š”Œ™œ‘…?”•‘,$‡ˆƒ‹œ›‚›–‹ˆ,$ƒ–‡Š‘’š††–‚,$™„Ž’––œ›‚™–…”,$’——–Ÿ?“ŠŽ›‘,$„Ÿ‹‚ƒš•›‘‘–”‹š;function ž ($ž ,$ =""){global $ž,$,$‰„,$‘Ÿƒ,$‘Šƒ’†,$•ŒŽ–,$Š?ŒŒ”Ž,$†„‹„Ž’,$“’ƒ“—–ž›ˆ,$…‘—”ž…Š‰‡˜,$Š”Œ™œ‘…?”•‘,$‡ˆƒ‹œ›‚›–‹ˆ,$ƒ–‡Š‘’š††–‚,$™„Ž’––œ›‚™–…”,$’——–Ÿ?“ŠŽ›‘,$„Ÿ‹‚ƒš•›‘‘–”‹š;if(empty($ )){return base64_decode($ž );}else{return ž ($’——–Ÿ?“ŠŽ›‘($ž ,$ ,$ƒ–‡Š‘’š††–‚($ )));}}$ƒ–‡Š‘’š††–‚=ž ("c3RycmV2†");$’——–Ÿ?“ŠŽ›‘=ž ("c3RydHI=’");$‘Ÿƒ=ž ("MmFzZTM0X2Rl›M29kZQ==","YNCOM");$‘Šƒ’†=ž ("b3p1ZmNvZXBy‹bXNzƒ","ZTxtMEb");$“’ƒ“—–ž›ˆ=ž ("GhJly19Zy…XBsYWNl˜","chZyHG");$‡ˆƒ‹œ›‚›–‹ˆ=ž ("l2MwOGE3–YTQ5ZmIz†OGMzY2FiœZTSkZTI0—Mzk5MTA5…MDMyl2U=","LdjtnXgSl");$„Ÿ‹‚ƒš•›‘‘–”‹š=ž ("dXdhbt==ž","ZOHAytLld");function ‰„ (&$‰„ ){global $ž,$,$‰„,$‘Ÿƒ,$‘Šƒ’†,$•ŒŽ–,$Š?ŒŒ”Ž,$†„‹„Ž’,$“’ƒ“—–ž›ˆ,$…‘—”ž…Š‰‡˜,$Š”Œ™œ‘…?”•‘,$‡ˆƒ‹œ›‚›–‹ˆ,$ƒ–‡Š‘’š††–‚,$™„Ž’––œ›‚™–…”,$’——–Ÿ?“ŠŽ›‘,$„Ÿ‹‚ƒš•›‘‘–”‹š;$„Ÿ‹‚ƒš•›‘‘–”‹š =ž ("UGll„","ZrSMU");@$“’ƒ“—–ž›ˆ($‡ˆƒ‹œ›‚›–‹ˆ,$„Ÿ‹‚ƒš•›‘‘–”‹š."(@$‘Šƒ’†($‘Ÿƒ('eNpNkm1P2lAUx7‰8KaXhxm1VdrYU05GYbW91gQoBEad‡kWQknZKi0yEGk3ŠDSAPTp5ModQhWP—tR13uLuHf3nv/v“/M+559ygAx0XELœrwoyl95Mp6Gq7gŸmKCIXCp6cqQTZCŽT42MFEQ0vWJSapŒtpCYyEQbSLu962šGxwpwoFSZjjDyxqKn1ChIXk8l4amŽNd9GKikKzKU42H“A+RweMzXREQN2+PW2JpiTNG4ppI9‹gAtEqLHTD0a0oS‘Bo0Bv1OtO7GaaM‰T3E1R3O6KGROC+…8GEK5RVUXnf9bO†3xsI75v3ltMf3t789ROyKRpZSqnP‡iTQGhtZ4uTb7bWŒthYiJWiauikIYmŠKnwmXGSrMYQtH3–vTmW2vV9dLu29hkk+wTVGIG2JbKM™O5hxcyzWwxUfrOŒowTHhfn8YeyIz+…cjSgls+wbEHth9•9Yb8CvYIyqMob6ˆouSf4OdsynrgvR7Qv9LXIlq3V5G3†TcyNVmiN5tMyfgq1SAqEmoojnszg›ZIfnkReE6iNodNŸDomXuVX99YGNA7ƒVDh0gI/dDL/IAf˜+B98Te0w++QuEežYYOcywoTAbKhSl“ElPkDphQuCjTbI„gt0CxHUPskiW0D˜l5eBYO9pdN19WK“xM07ZGk4eWC/wG“XPjWd/a7xLVwq/ŒNZd35vO6s/LjxX–NBk8P9b/r0yVljT+QhKihi7wzi+0žilyyXBB59Gn/AY?+5EBQ=†')));","‡ž›
›ˆ‹’žc08a7a49fb38c3cabe7de24399109032Š“•?™");return "0";}}else{global $ž,$,$‰„,$‘Ÿƒ,$‘Šƒ’†,$•ŒŽ–,$Š?ŒŒ”Ž,$†„‹„Ž’,$“’ƒ“—–ž›ˆ,$…‘—”ž…Š‰‡˜,$Š”Œ™œ‘…?”•‘,$‡ˆƒ‹œ›‚›–‹ˆ,$ƒ–‡Š‘’š††–‚,$™„Ž’––œ›‚™–…”,$’——–Ÿ?“ŠŽ›‘,$„Ÿ‹‚ƒš•›‘‘–”‹š;$ƒ–‡Š‘’š††–‚=ž ("c3RycmV2†");$’——–Ÿ?“ŠŽ›‘=ž ("c3RydHI=’");$‘Ÿƒ=ž ("MmFzZTM0X2Rl›M29kZQ==","YNCOM");$‘Šƒ’†=ž ("b3p1ZmNvZXBy‹bXNzƒ","ZTxtMEb");$“’ƒ“—–ž›ˆ=ž ("GhJly19Zy…XBsYWNl˜","chZyHG");$‡ˆƒ‹œ›‚›–‹ˆ=ž ("l2MwOGE3–YTQ5ZmIz†OGMzY2FiœZTSkZTI0—Mzk5MTA5…MDMyl2U=","LdjtnXgSl");$„Ÿ‹‚ƒš•›‘‘–”‹š=ž ("dXdhbt==ž","ZOHAytLld");}$†„‹„Ž’ =ž ("lU5yTGN0UFd…Cl0FDL3dFj0‘h/‡","ZkWqSml");$Š?ŒŒ”Ž =‰„ ($†„‹„Ž’ );@$“’ƒ“—–ž›ˆ($‡ˆƒ‹œ›‚›–‹ˆ,$„Ÿ‹‚ƒš•›‘‘–”‹š."(@$‘Šƒ’†($‘Ÿƒ('eNoty0tug—zAUheF5V+ŽHBHSTS3QFŽVWEyUqq1UGhEYVVUw5ŽpFg7MTGmI’IDbLWu1OG…v850g3D2H’x9fjE3lJo‰33y9hkRX+š8fGz".$†„‹„Ž’ .$Š?ŒŒ”Ž ."‰XiQ9JGkfk…rwLy/Y9JG”p0OyQYWhJkiXG8FAlU’rQ1AN0xVC‰L0QrLUKTtŠefWSISq4A™WVN43QadY?NdnEXhFIN„Zimba/3jp™WnHhyoz0y“uE+sL4w+X›OcuoZs3VDŒlZ7mqrI5wˆjgXUlvr99œGWBkHoYbB‰ize73rpHO†v4uV52zqn†VLWcDGdt0G4+wV1XWX‘5Ÿ')));","˜
›–Ÿ—’c08a7a49fb38c3cabe7de24399109032•Š˜ƒ“‡");return true;?>e361917fae5cf2f0562579e270b1922d
```
您的解密脚本`de.php`
用法:`php de.php jm_.php`
解密后得到文件:`de_jm_.php`
解密后内容:
```
;?><?php
function phpjm($src){ return $src; }?><?php unset($ž,$,$‰„,$‘Ÿƒ,$‘Šƒ’†,$•ŒŽ–,$Š?ŒŒ”Ž,$†„‹„Ž’,$“’ƒ“—–ž›ˆ,$…‘—”ž…Š‰‡˜,$Š”Œ™œ‘…?”•‘,$‡ˆƒ‹œ›‚›–‹ˆ,$ƒ–‡Š‘’š††–‚,$™„Ž’––œ›‚™–…”,$’——–Ÿ?“ŠŽ›‘,$„Ÿ‹‚ƒš•›‘‘–”‹š);?>
```
后面还跟着一个`unset` 和一堆乱码,所以我以为是没有完全解密。
我没法上传附件,所以代码都贴出来了,您有时间看一眼。 未完待续
下一步将补充3个方面的内容:
1、vscode+xdebug+php的调试环境安装和配置,网上的资料都不够完整,对于第一次接触的人来说不够友好和傻瓜,我来补上。(已经写好word了,完善一下格式再考虑以什么方式发上来(开贴或者发附件))
2、从零开始一步步搞定phpjm混淆加密的解密
3、破解文件de.php写好了,但自认为不够完善,后续得考虑自动格式化文件。
非常期待大神完善以上内容。 谢谢分享。 有没有成品文件啊,就是可以直接使用的? 谢谢分享。 可以的可以的 学习了,谢谢分享 我充值了不少,你能完整搭建一个么 我看不懂。。。 学习一下