字数约2500,阅读大约需12分钟​​​

目录

前(废)言(话)

环境部署与工具链搭建

Cline的配置

IDA-Pro-MCP的安装和启用

Cline上的实例测试

结语

【附录】AI生成的CTF解题分析报告

完整逆向分析报告 - entry_language.elf

分析环境配置

初始分析步骤

1. 识别主函数

2. 反编译主函数

密码验证函数深度分析

3. 反编译验证函数(sub_4006FD)

4. 汇编层验证索引计算

密码计算过程

5. 密码生成算法

6. 索引验证表

逆向工程改进记录

7. 代码重构建议

8. 变量重命名记录

最终验证结果

分析结论

 往期回顾:

前(废)言(话)

这次为了试试Cline作为智能助手的手感,又用了上次测试的CTF题,于是就有了这个续集(IDA + MCP + DeepSeek + Cline)...这次的AI逆向分析工作流的效果到底如何呢🤪,感兴趣的朋友可以在文章末尾的附录查看AI写的原版解题分析报告!

公众号:猕猴桃实验室

Cline是什么呢?

Cline 是一款集成于 VSCode 的智能编程助手,通过融合大语言模型(如 DeepSeek、Gemini 等)与工具链,为开发者提供代码生成、任务自动化、调试优化等功能。其核心能力包括自然语言驱动的智能编码、跨平台命令执行、多模型灵活切换及基于 MCP 协议 的外部工具扩展,特点在于强调安全可控的人机协作模式(如分步交互、用户授权机制)、实时成本管理(支持低成本模型与预算限制)以及本地化隐私保护,适用于快速原型开发、复杂流程自动化及代码维护优化场景,兼顾效率提升与数据安全。​

上次在CherryStudio使用IDA Pro+MCP+DeepSeek,把CTF题的部分关键代码分析出来了,但是AI在算法上的分析、推理、计算一直出错,花费了大量时间,甚至开始出现AI幻觉,于是就放弃了。这次,决定抱着随便玩玩的心态将CherryStudio换成Cline 再跑一下之前的CTF题,也就是IDA + MCP + DeepSeek + Cline。

环境部署与工具链搭建

Cline的配置

下载Vscode客户端,并安装。安装成功后,打开Vscode的左侧扩展菜单栏,搜索Cline,点击安装Cline

图片

安装成功后,点击左侧的Cline菜单栏配置大模型的API。将API Provider选择为DeepSeek,键入DeepSeek API Key值。(你也可以选择其它的API提供商及其API Key)

图片

IDA-Pro-MCP的安装和启用

安装可见IDA Pro+MCP+DeepSeek逆向小实战:构建AI逆向分析工作流的"IDA-Pro-MCP的安装"章节。或者,参照 https://github.com/mrexodia/ida-pro-mcp 的描述安装IDA-Pro-MCP。

在Cline的界面上下都可以找到服务器图标,点击添加MCP服务器,添加成功后,就可以启用,开关变“绿色”:

图片

Cline上的实例测试

0x1 环境准备

1.1 在Cline中成功启用deepseek-reasoner模型服务
1.2 在IDA中加载待分析ELF文件(示例:DefcampCTF2015 entry_language)

1.3 使用IDA Pro加载ELF文件,然后在IDA Pro 的 Edit中的Plugins中启用MCP插件,测试IDA通过MCP是否和DeepSeek连通成功,提问此时IDA Pro中打开的文件是什么? ,AI助手先调用get_metadata工具后回答:

**Assistant:**

<use_mcp_tool>
<server_name>github.com/mrexodia/ida-pro-mcp</server_name>
<tool_name>get_metadata</tool_name>
<arguments>
{}
</arguments>
</use_mcp_tool>

**Assistant:**
<attempt_completion>
<result>
当前IDA Pro中打开的文件是:C:\Users\test\Desktop\entry_language.elf
文件特征:
- 模块名称:entry_language.elf
- 基地址:0x400000
- 文件大小:0x18b0 (6,288 bytes)
- MD5哈希:7f24336a9475b4a6a79086f29ec0949a
- SHA256哈希:8c481c589e9f95acbfdc20b54f5965017604a4c149dd72ec6bde55a5ea2a11bc
- CRC32校验:0x54f3155e
</result>
</attempt_completion>

图片

0x2 深入提问,继续分析

DeepSeek能成功分析到目标文件后,通过提示词调用MCP工具进行自动化分析、解题,提示词依然和上一次一样:

你需要进一步需要进一步分析或操作该文件,这是一个密码验证题,输入一个字符串,程序验证对错,输入错误的password错误会报错“Incorrect password!”,需要输入正确的password通过验证。你现在需要通过分析得到正确的password,你可以使用MCP工具检索信息,这个分析过程按照以下策略:
- 你的工作路径是C:\Users\test\Desktop\,重点关注的文件是entry_language.elf.id0、entry_language.elf.id1、entry_language.elf.id2、entry_language.elf.nam、entry_language.elf.til
- 检查反编译的情况,并把你的发现添加到反编译的代码注释中
- 将变量重命名为更合理的名称
- 如果有必要,修改变量和参数类型(尤其是指针和数组类型)
- 修改函数名,使其更具描述性
- 如果需要更多的细节,反汇编函数,并把你的发现并添加到代码注释中
- 永远不要自行改变数据类型。 如果需要,使用convert_number MCP工具!
- 不要尝试暴力破解,而是从反汇编和简单的python脚本中获得一切解决方案
- 创建一个report.md文件,在report.md文件中添加你的发现和你解决问题的步骤
- 找到这个密码验证题的解决思路后,提示用户找到了正确的password,并说出password的正确值

调用ida-pro-mcp内置的工具,自动化分析:

图片

最终分析算法后,逆向出Code_eCflag_lsn

图片

由于是在Windows下分析,没有配置WSL,没法直接让AI直接完成flag的校验,就手动运行、输入flag,报错Incorrect password!

图片

继续在Cline中,给AI助手提示词该程序的密码是错误的。此时AI重新推理分析——这表明密码包含特殊字符,可能需要转义或实际应为可见字符。可能反编译有误,需要检查汇编代码确认字符访问方式。,然后开始修正,并将新的反汇编代码的字符串索引重新核对,计算出新的密码Code_Talkers,AI自动将整个分析过程整理到report.md文件:

图片

这次flag验证成功,输入正确的flag返回Nice!

图片

最后让AI整理了一份整体分析的解题报告,在最后的附录中,可以看看效果。

图片

结语

这一次成功用AI分析出CTF题的Flag,确实得重新审视AI在逆向自动化的应用,可以尝试在后续的其它场景用它辅助,提高工作效率。不过还是期待未来有逆向分析的领域专属微调大模型或技术变化,让逆向分析或其它工作的效率、质量有更大的跃迁。

另外,夜间调用deepseek的API确实很实惠😄Cline的体验感也还不错。


【附录】AI生成的CTF解题分析报告


完整逆向分析报告 - entry_language.elf

分析环境配置

  • • IDA Pro 7.7 with MCP 插件

  • • 工作目录:C:\Users\test\Desktop\

初始分析步骤

1. 识别主函数

<use_mcp_tool>
<server_name>github.com/mrexodia/ida-pro-mcp</server_name>
<tool_name>list_functions</tool_name>
<arguments>{"offset":0,"count":20}</arguments>
</use_mcp_tool>

发现main函数地址:0x4007e8

2. 反编译主函数

<use_mcp_tool>
<server_name>github.com/mrexodia/ida-pro-mcp</server_name>
<tool_name>decompile_function</tool_name>
<arguments>{"address":"0x4007e8"}</arguments>
</use_mcp_tool>

关键逻辑:

if ( (unsigned int)sub_4006FD(s) ) {
    puts("Incorrect password!");
} else {
    puts("Nice!"); 
}

密码验证函数深度分析

3. 反编译验证函数(sub_4006FD)

发现三加密字符串:

v3[0] = "Dufhbmf";  // 建议重命名为secret_str1
v3[1] = "pG`imos";  // 建议重命名为secret_str2 
v3[2] = "ewUglpt";  // 建议重命名为secret_str3

4. 汇编层验证索引计算

通过反汇编确认字符选择逻辑:

0x40074d: mov     rsi, [rbp+rax*8+var_20]  ; 加载字符串指针
0x40076b: add     rax, rsi                 ; 计算字符地址
0x40076e: movzx   eax, byte ptr [rax]      ; 获取目标字符

密码计算过程

5. 密码生成算法

secret_strings = ["Dufhbmf", "pG`imos", "ewUglpt"]
password_length = 12

defcalculate_password():
    password = []
    for i inrange(password_length):
        # 选择字符串 (i%3)
        str_index = i % 3
        
        # 计算字符偏移 (2*(i//3))
        char_offset = 2 * (i // 3)
        
        # 获取加密字符并解密
        encrypted_char = secret_strings[str_index][char_offset]
        decrypted_char = chr(ord(encrypted_char) - 1)
        
        password.append(decrypted_char)
    return''.join(password)

# 输出:Code_Talkers

6. 索引验证表

序号

字符串索引

字符偏移

加密字符

解密字符

0

0

0

D

C

1

1

0

p

o

2

2

0

e

d

3

0

2

f

e

4

1

2

`

_

5

2

2

U

T

6

0

4

b

a

7

1

4

m

l

8

2

4

l

k

9

0

6

f

e

10

1

6

s

r

11

2

6

t

s

逆向工程改进记录

7. 代码重构建议

// 原始代码
if ( *(char *)(v3[i % 3] + 2 * (i / 3)) - *(char *)(i + a1) != 1 )

// 建议重构为
#define GET_ENCRYPTED_CHAR(idx) (secret_strings[(idx)%3][2*((idx)/3)])
if (GET_ENCRYPTED_CHAR(i) - input[i] != 1)

8. 变量重命名记录

原始名称

新名称

作用描述

sub_4006FD

check_password

密码验证核心函数

v3

secret_strings

加密字符串数组

a1

user_input

用户输入缓冲区指针

最终验证结果

正确密码:Code_Talkers

分析结论

程序使用三重字符串交替组合的加密方案,通过以下安全措施:

  1. 1. 分布式存储:密码字符分散在三个不同字符串中

  2. 2. 偏移混淆:使用2*(i//3)计算字符位置

  3. 3. 简单加密:每个有效字符=存储字符ASCII-1

免责声明: 

文章中涉及的内容可能带有攻击性、损害性,请注意识别。文章内容仅能用于安全检测、安全防御、安全研究等合法合规的用途,请勿用作其它方面。若有违反,违反者将自行承担相应法律责任及连带责任,违反者的行为与本文章内容的创作者无关。请遵守相关法律法规,共同维护网络环境的清朗!如有问题可私信联系,望知悉。

参考:

  • https://github.com/mrexodia/ida-pro-mcp

  • https://cline.bot/

往期回顾:

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐