「开发」phpjm解密方法
分析了一下此加密的思路
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);
?>
本文系作者 @河马 原创发布在河马博客站点。未经许可,禁止转载。
暂无评论数据