防止自己的二进制文件被AI一键逆向

· 2026-08-23 19:19 · 3 阅读

原创 为了安全鸭 2026-08-23 19:19 北京

前言

AI年代大家都接MCP或者直接让AI看伪代码逆向,并且无条件相信这些代码.似乎二进制已经 日落西山,什么东西丢给IDA+AI就一定能出货.

那么,有没有可能,我们让这些AI看不出来我们代码,至少不要被”一键”出了,这有点太侮辱人了。

从最简单的开始

我们挑一个最简单的hello world

这个会弹一个计算器

然后丢AI分析

通过ida mcp帮我分析这个恶意软件是什么

很明显 被AI一键了,再小白的人,开AI都能解决他(然后去发AI SLOP的帖子)

AI的缺陷

如果你搞过AI大模型,你会发现其实每个LLM都有两个致命缺陷:

  1. AI总是走局部最优

  2. AI总的注意力会特定token吸走,这叫做attend Sink,中文翻译注意力水坑

这两个的起源很复杂,跟RL有关系,各种什么AI越狱黑了XXX去拿答案,就是陷入了局部最优.业内叫做reward hack。被RL弄出来的AI都有这个底层缺陷。

让我们分析一下问题,分析一下为什么AI会看出来,而实际上,AI也说了,自己是看一大坨.data+API出来的

实际上,他看到这一大坨shellcode+virtualalloc就会认定他是shellcode loader。让我们反过来利用一下这个特性

自回归shellcode生成

我们要做的第一步是隐藏掉data段塞一大坨这种二进制payload的东西,做法非常简单,把这一坨变成一种多项式回归函数,通过梯度下降寻找到能回归计算出这一段shellcode的函数即可,这样AI就不能暴力猜测意图了

让我们继续执行

再让AI分析,你会发现 AI压根不想分析函数是啥东西,而转头注意力全在 那些virtualloc的API上了

而部分高级的模型,比如claude 会使用python去模拟这一段函数,去取出来我们的shellcode,这个时候,我们就需要一点点数学知识了,我们可以利用 运行变量 去做保障,防止我们被模拟。

而这个X可以是多种多样,比如我们拿时间作为我们的X。那么模拟器如果不知道正确的样本的运行时间段,就非常难破解出来这块

结果就是,AI没办法简单破解这块,deepseek疯狂烧token,最后自己烧死了.

更大的模型比如GPT-SOL MAX和FABLE5 max(with fallback)会尝试暴力枚举,确实,当然可以暴力枚举。因为我这是一个简单的算法,如果足够聪明,你会发现暴力枚举都没用的方法。

注意力水坑

虽然我们隐藏了自己的真实代码,但是还有一个问题,是AI依然能通过API去认为你的这个是shellcode loader,有什么办法去让AI不这么认为的呢?
这就是接下来注意力水坑的实现,我们要让模型陷入局部最优。而局部最优的最简单的方法是,给模型一个看起来简单的”题目”,让模型去研究。而模型天然不会研究复杂路径 -毕竟RL是这样教的,解决用户问题而不是实际问题。

让我们设计一个非常精良的水坑,让模型注意力被吸引过去

首先第一个,我们在开头打印,我们是CTF,这是为了结合我们的shellcode回归算法,让模型认为是一个CTF

其次在中间,我们设计了一个简单的XOR url+下载的URL,让模型把注意力拉去破解这个XOR上,而不是关注关键的自回归算法

最后 我们用一个简单的反ida trap让IDA的F5不能顺利F5出来需要的东西(这也是水坑)

不过由于我不是写LLVM pass去搞这个trap,所以还是会暴露真实的执行地址,但是够用了,这个东西IDA F5看起来长这样

而实际qword_1400100F0这个才是我们要执行的目标

结果

让我们看看组合一起,AI们被吸引过去的效果

deepseek

gpt-sol max

我们可以看到,GPT发现一个非常复杂的算法后,直接放弃了:

转而去分析比较”简单”的URL xor

然后被WINHTTP彻底的吸引过去了

实际上他是弹一个计算器的东西

claude opus-5

claude也是,被水坑吸引注意力去了

唯一注意到这个函数不对劲的是claude,但是claude也没办法把函数算出来,也认为是ctf

然而claude看不对劲的原因是没有带virtualalloc就执行了jpg,如果我们带上并且对图片和shellcode之间做一点垃圾运算也废了。

效果:

结论

保持思考的,不要轻易相信任何AI的东西。

另外,冲鸭2026年培训已经开始,只招十个人,后台回复 "报名2026培训" 即可报名()

跳转微信打开