遗憾的是,目前没有免费或开源的工具可以解码受商业编码器保护的 PHP 脚本,就像没有用于反编译 Zend VM 操作码的工具一样。
针对此类情形,我们进行以下操作。

1 Zend Engine 101

Zend Engine 在实行 PHP 脚本时起着至关主要的浸染,既作为编译器,又作为运行时环境。
实行过程从解析源代码开始,将其转换为抽象语法树(AST)。
接着,AST 被转化为 Zend 虚拟机的操作码,末了由虚拟机实行这些操作码。

如前所述,商业编码器处理除末了一步之外的每个步骤:操作码的实行。
编译后,编码器并不实行操作码,而是将操作码与元数据一起序列化,编码天生的二进制数据(blob),并封装在勾引脚本中。
当实行编码脚本时,会发生逆向过程:解码和反序列化 blob,将操作码及其元数据加载到 Zend 虚拟机中,末了实行操作码。

php反编译从操作码到代码人工智能聊天机械人若何赞助反编译 RESTful API

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 天生的结果仍能简化操作码列表的解读,该工具值得投入韶光进行研究。