
【续集】IDA Pro+MCP+DeepSeek逆向小实战(文末有AI写的原版解题分析报告)
通过IDA Pro+MCP+DeepSeek+Cline组合自动进行实际例子的逆向分析,AI自动写报告
字数约2500,阅读大约需12分钟
目录
往期回顾:
前(废)言(话)
这次为了试试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. 分布式存储:密码字符分散在三个不同字符串中
-
2. 偏移混淆:使用2*(i//3)计算字符位置
-
3. 简单加密:每个有效字符=存储字符ASCII-1
免责声明:
文章中涉及的内容可能带有攻击性、损害性,请注意识别。文章内容仅能用于安全检测、安全防御、安全研究等合法合规的用途,请勿用作其它方面。若有违反,违反者将自行承担相应法律责任及连带责任,违反者的行为与本文章内容的创作者无关。请遵守相关法律法规,共同维护网络环境的清朗!如有问题可私信联系,望知悉。
参考:
-
https://github.com/mrexodia/ida-pro-mcp
-
https://cline.bot/
往期回顾:

更多推荐
所有评论(0)