程序员开发实例大全宝库

网站首页 > 编程文章 正文

从操作码到代码:人工智能聊天机器人如何帮助反编译

zazugpt 2024-08-25 17:18:50 编程文章 16 ℃ 0 评论

在漏洞挖掘过程中,通常会遇到被商业编码器保护的 PHP 代码。这些编码器将原始的 PHP 源代码编译为 Zend 引擎的字节码,然后对这些字节码进行编码和混淆,混淆结果如下所示:

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

1 Zend Engine 101

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

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表