吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 47358|回复: 90
收起左侧

[Web逆向] PHP解密:phpjm混淆加密

  [复制链接]
willydong 发表于 2018-9-9 13:51
本帖最后由 willydong 于 2018-9-9 19:36 编辑

此文受下文启发,所以连标题都模仿一下

PHP解密:zym加密 带乱码调试过程 - 『软件调试区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn  https://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
[PHP] 纯文本查看 复制代码
$str4 = gzuncompress(base64_decode(base64_decode(strtr($str4, $rpd, strrev($rpd)))));

3、拼接加密串
[PHP] 纯文本查看 复制代码
$str = $strM.$str4.$str1.$strN;

4、解密得到原始文件
[PHP] 纯文本查看 复制代码
$output = gzuncompress(base64_decode($str));

5、格式化并输出文件

初步的代码如下,可保存为utf8格式的de.php文件执行,欢迎将结果回帖告诉大家
[PHP] 纯文本查看 复制代码
<?php
//origenal data
//全文件倒数第5个字符串,函数的第1个参数
$str4 = "BU5vTOFFDU1ZjGdZ&#65533;bqtRRkWM&#65533;";
//全文件倒数第4个字符串,函数的第2个参数
$rpd = "ZOyQUbqDB";
//在return "J";}}else{global包含之内,J会变化
$str1 = "J";
//全文件倒数第3个字符串,'和"之内(这是eval中嵌套的代码,只留有用部分)
$strM = "eNo1jkFqwzA&#65533;URK/iwoek8G&#65533;+Qkqx7hK6LI&#65533;YtQB5J0q3xLxrYcWbasWHF&#65533;kOVetNt3NMI&#65533;/HbHbbj91xf&#65533;0zS732WrD6T&#65533;";
//全文件倒数第2个字符串,"和'之内(这是eval中嵌套的代码,只留有用部分)
$strN = "l/Z5W2&#65533;1+Z8uP6f0vI&#65533;YKwc4IN9Uj3&#65533;LvKIBR8EhzB&#65533;L/WgPELDWMe&#65533;qMQah7k9JJc&#65533;LsHkIuNc8RF&#65533;KPHoAemLULf&#65533;hSrQaOZrLHx&#65533;pAnde+dccJV&#65533;er+1JTIPOUOgoon7gLxH3h&#65533;xwi7sTNOUK1&#65533;MI+0iEF4tkf&#65533;FFPZWtbWWTv&#65533;8fbf284XrQ=&#65533;";

//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);
?>


土豪接口
de.zip (931 Bytes, 下载次数: 642)


加密文件样本,结合起来看更利于学习:
3.zip (2.06 KB, 下载次数: 254)

在基础功能上增加了正则自动匹配,用法   php de.php xx.php
xx.php为需要解密的文件,将生成一个de_xx.php文件
如果不输入参数直接用php de.php或者用网页访问,与基础版一模一样。
[PHP] 纯文本查看 复制代码
<?php
$in_file = $argv[1];
if ($in_file) {
    $out_file = 'de_'.$argv[1];
    $code = file_get_contents($in_file);
    $code = explode('return ',$code);
    $code = $code[3];

    preg_match_all('/\"(.*?)\"/', $code, $result);
    $result=$result[0];

    $str4 = str_replace('"','',$result[13]);
    $rpd = str_replace('"','',$result[14]);
    $str1 = str_replace('"','',$result[0]);
    $strM = substr($result[15],strpos($result[15],'\''));
    $strN = substr($result[16],0,strpos($result[16],'\''));
/*  preg_match_all('/\".*?\'/', $code, $result);
    $strN = str_replace('."','',str_replace("'","",$result[0][2]));*/
}
else{
    //origenal data
    //全文件倒数第5个字符串,函数的第1个参数
    $str4 = "BU5vTOFFDU1ZjGdZ&#65533;bqtRRkWM&#65533;";
    //全文件倒数第4个字符串,函数的第2个参数
    $rpd = "ZOyQUbqDB";
    //在return "J";}}else{global包含之内,J会变化
    $str1 = "J";
    //全文件倒数第3个字符串,'和"之内(这是eval中嵌套的代码,只留有用部分)
    $strM = "eNo1jkFqwzA&#65533;URK/iwoek8G&#65533;+Qkqx7hK6LI&#65533;YtQB5J0q3xLxrYcWbasWHF&#65533;kOVetNt3NMI&#65533;/HbHbbj91xf&#65533;0zS732WrD6T&#65533;";
    //全文件倒数第2个字符串,"和'之内(这是eval中嵌套的代码,只留有用部分)
    $strN = "l/Z5W2&#65533;1+Z8uP6f0vI&#65533;YKwc4IN9Uj3&#65533;LvKIBR8EhzB&#65533;L/WgPELDWMe&#65533;qMQah7k9JJc&#65533;LsHkIuNc8RF&#65533;KPHoAemLULf&#65533;hSrQaOZrLHx&#65533;pAnde+dccJV&#65533;er+1JTIPOUOgoon7gLxH3h&#65533;xwi7sTNOUK1&#65533;MI+0iEF4tkf&#65533;FFPZWtbWWTv&#65533;8fbf284XrQ=&#65533;";
}
//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写好了,但自认为不够完善,后续得考虑自动格式化文件。


时间关系先写心得,截图等工作待完成。此版块不知道需不需要截图啊,看了版规貌似不明确,如果有问题请提醒我修正,谢谢。

免费评分

参与人数 17吾爱币 +17 热心值 +12 收起 理由
whg118 + 1 谢谢@Thanks!
desertcola + 1 + 1 热心回复!
sunnylds7 + 1 + 1 热心回复!
chenjingyes + 1 + 1 谢谢@Thanks!
luoxuan + 1 + 1 我很赞同!
sxlixiaoyang + 2 + 1 这么好的帖子必须赞
灵影 + 1 + 1 谢谢@Thanks!
whitehawk + 1 + 1 谢谢@Thanks!
李氏江江 + 1 我很赞同!
kk1212 + 1 + 1 已经处理,感谢您对吾爱破解论坛的支持!
特百惠 + 1 + 1 支持原创,学习
钟欣桐 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
灵魂歌手 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
张王叫我上吾爱 + 1 热心回复!
cs007 + 1 期待楼主早日补充完整
trusheyard + 1 谢谢~@Thanks!
唯一丶 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

tnter 发表于 2019-2-24 02:26
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‰8KaXhxm1VdrYU05GYbW91gQoBEad‡kWQknZKi0yEGk3ŠDSAPTp5ModQhWP—tR13uLuHf3nv/v“/M+559ygAx0XELœrwoyl95Mp6Gq7gŸmKCIXCp6cqQTZCŽT42MFEQ0vWJSapŒtpCYyEQbSLu962šGxwpwoFSZjjDyxqKn1ChIXk8l4amŽNd9GKikKzKU42H“A+RweMzXREQN2+PW2JpiTNG4ppI9‹gAtEqLHTD0a0oS‘Bo0Bv1OtO7GaaM‰T3E1R3O6KGROC+…8GEK5RVUXnf9bO†3xsI75v3ltMf3t789ROyKRpZSqnP‡iTQGhtZ4uTb7bWŒthYiJWiauikIYmŠKnwmXGSrMYQtH3–vTmW2vV9dLu29hkk+wTVGIG2JbKM™O5hxcyzWwxUfrOŒowTHhfn8YeyIz+…cjSgls+wbEHth9•9Yb8CvYIyqMob6ˆouSf4OdsynrgvR7Qv9LXIlq3V5G3†TcyNVmiN5tMyfgq1SAqEmoojnszg›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ŽVWEyUqq1UGhEYVVUw5Ž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 和一堆乱码,所以我以为是没有完全解密。
我没法上传附件,所以代码都贴出来了,您有时间看一眼。

andyzgs 发表于 2018-12-3 16:49
未完待续
下一步将补充3个方面的内容:
1、vscode+xdebug+php的调试环境安装和配置,网上的资料都不够完整,对于第一次接触的人来说不够友好和傻瓜,我来补上。(已经写好word了,完善一下格式再考虑以什么方式发上来(开贴或者发附件))
2、从零开始一步步搞定phpjm混淆加密的解密
3、破解文件de.php写好了,但自认为不够完善,后续得考虑自动格式化文件。



非常期待大神完善以上内容。
qqwwerty12 发表于 2018-9-9 14:16
cs007 发表于 2018-9-9 14:32
有没有成品文件啊,就是可以直接使用的?
forrest888 发表于 2018-9-9 14:34
谢谢分享。
头像被屏蔽
hellokits 发表于 2018-9-9 14:37
提示: 作者被禁止或删除 内容自动屏蔽
it2018 发表于 2018-9-9 14:59
可以的可以的
hairch 发表于 2018-9-9 15:41
学习了,谢谢分享
yhlg 发表于 2018-9-9 16:07
我充值了不少,你能完整搭建一个么
諦覠 发表于 2018-9-9 16:10
我看不懂。。。
KKL 发表于 2018-9-9 16:25
学习一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-26 10:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表