0x01 phpjiami 代码分析破解法
这个详细的教程已经在另一篇文章发过了
https://www.myitmx.com/139.html
0x02 HOOK EVAL 法
0x01中说到的方法固然是很美好的,但是假如加密者随意改动一点加密的逻辑,可能导致我们需要重新分析加密方法,写解密脚本。我们有没有更通用的方法?
HOOK EVAL应该是被提到过最多的方法,phpjiami 其实是只是混淆了壳,这个壳的作用是执行真正的源码。那么,执行源码必然是会经过 eval 之类的“函数”(当然也不尽然),那么,如果我们能够有办法将 eval 给替换掉,不就可以获得源码了么?
遗憾的是,如果我们仅仅简单地将 eval 替换成 echo,将导致整个脚本不能运行——因为 phpjiami 检测了文件是否被修改。
那么,我们可以寻求更底层的方法。就是很多人以前提到过的,将 PHP 底层的函数 zend_compile_string
给拦截下来,并输出值
这里有一个扩展,并用 php5.6 编译:
下载,在 php.ini 中添加 extension=hookeval.so
,然后直接访问加密过的 php 代码即可(当时参考 tool.lu 的站长 xiaozi 的代码 ,所以分隔符里有关键字):
phpjiami 在解密的时候会进行验证:
php_sapi_name() == 'cli' ? die():'';
所以如果这个源码是在命令行下运行,在执行这条语句的时候就 die 了。所以,即使你编译好了 hookeval.so 并开启了这个扩展,也需要在 Web 环境下运行
0x03 手工 dump 法
php 扩展太难了,我不会写C语言,怎么办?
不会写C语言也没关系,你只需要会写 PHP 即可。这是我凤凰师傅提到的一个方法,也是我理想中的一个解,非常简单,两行代码搞定,解密用时比你去网上花钱解密还短:
<?php
include "index.php";
var_dump(get_defined_vars());
原理其实也很简单。phpjiami 的壳在解密源码并执行后,遗留下来一些变量,这些变量里就包含了解密后的源码。
虽然我们不能直接修改 index.php,将这些变量打印出来,但是我们可以动态包含之,并打印下所有变量,其中必定有我们需要的源码(var_dump
输出的不完整,只是用它举个例子)
0x04 总结
最后想说一句话:不求甚解是阻碍部分人进步的一大阻力。共勉。
厉害
好像不错的样子,
I like to have a look php 扩展太难了,我不会写 C 语言
看一看
厉害
好文章。
挺厉害的
试试
牛逼,6666
@(huaji)