MENU

php数种解密方法

• December 2, 2017 • Read: 339 • 瞎折腾,PHP

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 总结

最后想说一句话:不求甚解是阻碍部分人进步的一大阻力。共勉。

Archives QR Code
QR Code for this page
Tipping QR Code
Leave a Comment

已有 5 条评论
  1. huhanshan huhanshan

    好文章。

  2. xy3 xy3

    挺厉害的

  3. 路人乙 路人乙

    试试

  4. helko helko

    牛逼,6666

    1. @helko @(huaji)