遗憾的是,目前没有免费或开源的工具可以解码受商业编码器保护的 PHP 脚本,就像没有用于反编译 Zend VM 操作码的工具一样。针对此类情形,我们进行以下操作。
1 Zend Engine 101Zend Engine 在实行 PHP 脚本时起着至关主要的浸染,既作为编译器,又作为运行时环境。实行过程从解析源代码开始,将其转换为抽象语法树(AST)。接着,AST 被转化为 Zend 虚拟机的操作码,末了由虚拟机实行这些操作码。
如前所述,商业编码器处理除末了一步之外的每个步骤:操作码的实行。编译后,编码器并不实行操作码,而是将操作码与元数据一起序列化,编码天生的二进制数据(blob),并封装在勾引脚本中。当实行编码脚本时,会发生逆向过程:解码和反序列化 blob,将操作码及其元数据加载到 Zend 虚拟机中,末了实行操作码。
2 解码和反汇编
在本研究中,我对个中一个最广泛利用的 PHP 代码商业编码器的加载器进行了剖析。为此,我创建了一种工具,可以从编码的 PHP 脚本中提取并反汇编 Zend Engine 的操作码。以下是该工具事情事理的简要解释。
源代码:
<?php function get_hello_text($name) { return "Hello, " . $name; } echo get_hello_text("PT SWARM");
编码脚本反汇编结果:
虽然反汇编的结果已经足以进行漏洞剖析和搜索,但为了简化事情并终极得到更靠近于常规 PHP 源代码的内容,我们进行了以下操作。
3 反编译为 Zend 虚拟机开拓反编译器是一项棘手的任务。有超过 200 个操作码,开拓过程非常耗时。虽然我可以利用 Ghidra 灵巧的 SLEIGH 规范措辞,就像我的同事为 V8 所做的那样,但我正在探求一个更大略的办理方案。
4 人工智能干系操作视频,如链接所示:https://youtu.be/-P-ein58laA
我哀求微软的 Copilot 谈天机器人反编译 Zend Engine 操作码,并且它成功了!
要求谈天机器人反编译注释块中的 PHP 操作码
谈天机器人利用反编译代码的回答
然而,这觉得太大略了,以是我决定考试测验反编译一些更繁芜的东西。
我随机选取了一个WordPress 函数,用保护器对其进行编码,然后对其进行解码和反汇编。我将结果发送到谈天室,并哀求将注释块中的 Zend Engine 操作码转换为 PHP 代码。
反汇编程序列表
反编译结果
我还采取了RC4 函数代码,并通过发送以下要求实行了同样的操作:将注释块中的 PHP 操作码转换为 PHP 代码。
反汇编程序列表
反编译结果
接下来我运行了反编译的代码来验证它。
值得把稳的是,利用 AI 谈天机器人进行代码反编译时,结果的质量可能会有显著差异。在某些情形下,AI 可以准确地从操作码中规复源代码,实现 100% 的准确性。然而,在其他情形下,结果可能不足准确,导致诸如嵌套循环被忽略等问题。此外,要求长度的限定也是一个寻衅。当发送非常长的代码进行反编译时,谈天机器人可能由于数据处理能力的限定而无法完成任务。在这种情形下,可能须要将代码分割成较小的部分,或者缩短要求,只保留须要剖析的关键片段。只管如此,AI 天生的结果仍能简化操作码列表的解读,该工具值得投入韶光进行研究。