文章总结: 本文分享了作者使用大模型(特别是MCP)辅助解决CTF逆向题目的实践经验。作者使用ClaudeSonnet3.7+WindSurf+IDAMCPServer成功解决了两个逆向题目,但也遇到了失败案例。文章总结了大模型辅助CTF的高效场景:单个二进制文件分析、有明确目标、文件未经过复杂混淆、出题者没有大开脑洞。作者将MCP辅助CTF的过程类比为CodeAct架构,称之为IdaAct,并提醒读者关注MCP的安全性问题。 综合评分: 87 文章分类: CTF,AI安全,二进制安全
当我们在谈论大模型辅助CTF时,我们在谈论什么
原创
MG
不吃猹的瓜
2025年8月19日 22:07 日本
这篇文章在很早之前就已经写了开头,但迟迟没有往下写,主要有四点原因:
- 欠了太多的
Paper没读,需要沉下心来多读读Paper,世界纷纷扰扰不如多读读书 - 很多东西都浅尝辄止,笔者并不喜欢这种感觉,还是得
dig into - 欠了太多漏洞没有跟,大模型技术使人膨胀,传统安全使人沮丧,但笔者就是比较喜欢找虐
- 动笔的时候,理解过于浅显导致文章内容比较单薄
因此,这篇文章本不会出现在公众号上,但最近两天突然被MCP做defcon题目的消息刷屏,虽然笔者很讨厌蹭热点,但还是觉得需要写一篇文章讲一下笔者的实操经验以及想法,为MCP正名!希望以此抛砖引玉,引发读者们的思考,最重要的是希望吸引更多的朋友和笔者交流啊!!!但还是那句话,本文只是笔者一家之言,仅代表自己,不代表任何组织,有不同看法或发现错误的朋友欢迎留言交流。
提出问题
在笔者开始学习大模型的时候就一直在思考一个问题:大模型的边界到底在哪里?这个问题看起来简单,但其实是一个很难回答的问题。说边界可能有点儿抽象,这里简单举几个例子:
- 比如在数据提取的任务中,为什么有的提取数据没有格式问题,有的却格式问题满天飞?
- 比如在漏洞挖掘的任务中,为什么有的百分之九十是误报,有的却啥也找不到?
- 比如在
CTF任务中,为什么有的能够解出来题,有的却是智障? - ….
还有很多很多,这里就不一一展开了。下面会以CTF任务为例子,浅谈一下笔者的经验。
CTF实战演练
使用环境
在写完MCP后笔者总想在实战中体验一下,于是在某东举办的CTF比赛中浅浅尝试了一下。由于笔者在尝试时,更高级的模型(比如Claude Sonnet 4和gpt5)尚未推出。于是笔者使用了在当时看起来很智能的模型Claude Sonnet 3.7 + WindSurf + IDA MCP Server,以下所有尝试均是基于此配置。现在是否有更好的解决方案笔者并未做更进一步的研究,感兴趣的读者可自行探索。
成功尝试
re1
第一个逆向题是采用了SIMD指令集,身为CTF能力为负的笔者自然不懂是什么,直接启动WindSurf + IDA Pro MCP。使用如下Prompt:
请使用MCP工具分析光标处的函数逻辑,目标是输出Correct! The flag is flag{%s}\n。如果完成该目标需查看额外的函数逻辑,可自行调用MCP工具进行分析。
这个没啥难度,一会儿自动就计算出了flag。
re2
第二个逆向题有点复杂,据人肉答题的朋友说需要动态调试。随便点开看看:
...
do
{
*(__m128i *)&Buffer[v7] = _mm_add_epi8(_mm_shuffle_epi8(_mm_loadu_si128((const __m128i *)&Buffer[v7]), v8), v9);
v7 += 16i64;
}
while ( v7 < 0x20 );
if ( !memcmp(Buffer, "cge87k?9<>?@=pss393=>;8@:Cp@DAuH", 0x20ui64) )
sub_140001010("Correct! The flag is flag{%s}\n");
else
puts("Wrong!");
return 0;
不管逻辑有多复杂,目标都是输出Correct! The flag is flag{%s}\n。继续使用上述prompt,在经过几轮思考后,WindSurf已经陷入了迷茫无法自拔。于是笔者回看思考过程,发现大模型在unk_140021116的数据上来回拉扯,于是笔者使用了如下prompt:
请使用MCP工具分析光标处的函数逻辑,目标是返回unk_140021116内存储相关数据。如果完成该目标需查看额外的函数逻辑,可自行调用MCP工具进行分析。
在经过一些尝试后,大模型给了以下分析:
unk_140021116位于.rdata段,地址为0x140021116,其值以字节0xad开始。数据内容(前32字节):…. 用于Unicode字符的某种分类或验证算法,它与其前后的内存块(unk_1400210C6和unk_140021236)一起构成了一个完整的查找系统。
以上分析没有截全,因为微信公众号真难用不让截全!笔者也不知道以上分析是否正确,本着实验人不要参与进行纠正的原则,继续使用如下prompt让大模型找flag
请根据以上分析继续使用MCP工具分析目标文件,目标是输出Correct! The flag is flag{%s}\n。必须找到}字符才是完整的flag
最终找到flag:
失败尝试
在不怎么痛苦的完成两道CTF题后,笔者觉得自己又行了,就开始搜罗各种CTF题准备来做做。在SAS CTF 2025中找到了一道题叫bug me,但结果却失败了,失败的原因很简单就是笔者自己也不知道这个题目的目标是什么。
总结
根据笔者为数不多的经验,稍微总结了一下哪些场景MCP是高效的(这里高效是指人类无需过度参与):
- 单个二进制文件,完成目标无需分析多个二进制文件。这一点也是笔者遇到的最棘手的问题,至今也不知道该如何解决这个问题,其中原因可仔细阅读MCP。如果有读者知道如何解决这个问题,一定要和笔者交流交流!
- 有明确的目标,比如二进制文件中有标志性的字符串,包括但不限于
flag{} - 需要分析的文件没有经过复杂的混淆,当然这种情况可以通过工程解决,这里就不展开讲了
- 出题者没有随便大开脑洞
另外,写文章时回看大模型解决re2的过程,笔者突然意识到一个很有意思的事情:Claude Sonnet 3.7 + WindSurf + IDA MCP Server这不就是个简单的CodeAct[1]吗!笔者姑且称之为IdaAct,先简单讲一下CodeAct的架构:
逻辑其实很简单,就是生成代码-->执行代码-->根据错误反馈-->修正代码-->得到最终结果。在原始的实现[2]中,CodeAct使用了docker沙箱环境,对大模型生成的每一个Python都会新开一个docker session执行。而在IdaAct中,IDA MCP提供了IDA环境,让IDA脚本得以运行,当然这个里面也有很多安全问题,感兴趣的读者可自行研究。
杂七杂八的题外话
这一章是专为笔者基友写的!熟悉笔者的人都应该知道,笔者很早之前就说过MCP的安全性问题:
最近不少漏洞都是MCP引发的安全问题,对于很多没有接触过大模型应用的读者来说会有点难以理解。这里简单说一下,在理解这一类安全漏洞的时候,最基本的知识是需要先梳理清楚curosr/gemini-cli这类MCP Host的安全机制。例如:
cursor的autorun模式以及在哪些场景下需要approvalgemini-cli的几种模式以及工作区间- …
还有很多细节,这里就不做展开了。感兴趣的读者可以自行研究,另外笔者想说的是,大模型应用本身就是门基于实验的学科,多实验多反思,会有一些很有意思的领悟。
Ref
- https://arxiv.org/abs/2402.01030
- https://github.com/xingyaoww/code-act
查看原文:《当我们在谈论大模型辅助CTF时,我们在谈论什么》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论