加密PHP脚本的通用解密方法:修改PHP源代码,让eval()函数自己输出解密后的代码
@拒绝柳岩99次,“建立虚拟机,把源代码编译成二进制,再根据虚拟机把二进制转成一条条汇编指令”,嗯,这确实很绝,但其实也有攻击方法。因为如果它不靠扩展运行,那必然要调用php系统函数来实现具体功能(比如输出html、打开文件什么的)。这样我们只要在系统函数中广泛打日志,就能知道它做了什么。然后如果我们修改系统函数的返回值,就能在一定程度上改变代码的行为了。
也就是说,如果你的目的只是改变程序的行为,其实有时候并不需要破解加密。
至于goto加密,今天罐子给我发了几个样本。我发现其实只要劫持call_user_func_array()和eval()函数,就能搞懂它的大部分行为,甚至可以直接用匹配+修改参数来改变程序的行为,不需要真的去分析它的代码解码和goto过程。
call_user_func_array()
eval()
我使用这个扩展来劫持php自带函数: https://www.php.net/manual/zh/book.runkit7.php
@拒绝柳岩99次,改变程序的行为【不需要】对goto进行还原。把程序当成一个本来就是用goto写的程序,然后在恰当的位置插入代码,改变参数的值,就能让程序的执行流程或者输出结果发生改变。
这个打包成 docker 镜像会不会更方便@老虎会游泳,
@NowTime,我不打,原因你猜。我为什么一直拒绝提供二进制呢
自己动手丰衣足食。 一加8Pro
不能说一定是,成品和市面的样本有八成像。配置一下混淆,看起来基本一致。
@拒绝柳岩99次,“建立虚拟机,把源代码编译成二进制,再根据虚拟机把二进制转成一条条汇编指令”,嗯,这确实很绝,但其实也有攻击方法。因为如果它不靠扩展运行,那必然要调用php系统函数来实现具体功能(比如输出html、打开文件什么的)。这样我们只要在系统函数中广泛打日志,就能知道它做了什么。然后如果我们修改系统函数的返回值,就能在一定程度上改变代码的行为了。
也就是说,如果你的目的只是改变程序的行为,其实有时候并不需要破解加密。
至于goto加密,今天罐子给我发了几个样本。我发现其实只要劫持
call_user_func_array()
和eval()
函数,就能搞懂它的大部分行为,甚至可以直接用匹配+修改参数来改变程序的行为,不需要真的去分析它的代码解码和goto过程。我使用这个扩展来劫持php自带函数:
https://www.php.net/manual/zh/book.runkit7.php
@拒绝柳岩99次,改变程序的行为【不需要】对goto进行还原。把程序当成一个本来就是用goto写的程序,然后在恰当的位置插入代码,改变参数的值,就能让程序的执行流程或者输出结果发生改变。
这个打包成 docker 镜像会不会更方便
@老虎会游泳,
@NowTime,我不打,原因你猜。我为什么一直拒绝提供二进制呢
自己动手丰衣足食。
一加8Pro