神兵谱·贰 —— 莫邪
我已经好几年没碰过 WebShell 免杀了。上次研究这玩意儿,还是刚入行那会儿,会的也就是关键字双写、大小写、Base64 编码这些老掉牙的手法,放现在早就不管用了。后来打渗透、攻防,团队里有专门搞免杀的兄弟,我就再没管过这块。
但这次阿里云伏魔挑战赛,我 PHP 赛道拿了第 30 名。
官方比赛地址:https://yundun.console.aliyun.com/?p=xznew#/taskmanagement/tasks/detail/302
靠什么?写了个 Agent,让 AI 自己去试。

黑客松结束后,我知道了 Claude Code agent 有一个 SDK,可以直接基于它来实现 Agent。之前的 ChYing-Agent 是用 LangChain 从头搭的,这次想试试用 Claude 的 SDK 会不会更省事。
正好伏魔比赛开始了,就拿它练手。顺便验证一个事:我对 WebShell 免杀基本是小白水平,但如果让 AI 不停地试,能不能试出点东西来?
没错,从开始写到出货,大概就几个小时。中间我去吃了个饭,回来一看,成功了。


说实话,代码不是我写的,是 Claude Code 写的。我就干了一件事:喂资料。
我把这些东西整理好丢给它:
然后让 Claude Code 实现一个循环:
选策略 → 生成代码 → 本地 Docker 跑一下看能不能执行 → 提交到靶场 → 没过就分析原因换个思路就这么简单。Agent 自己跑,我不用管。
按官方要求,样本源码现在还不能公开,这里就先不贴了。
但说实话,第一眼看到那个样本的时候我是有点懵的——我对 PHP 真的不熟,为什么能绕过?然后看了 Agent 自动生成的分析报告,才明白绕过原理。
这个思路不是我想的,是 AI 根据我喂的资料自己组合出来的。
第一版成功之后,我想着能不能找到更多绕过方式。
问了 Claude Code 怎么扩展策略空间,它给我整了个笛卡尔积方案:
参数传入方式(8种) × 字符串生成(6种) × 编码(5种) × 执行函数(10种) × 调用链(5种) × 代码结构(6种)算下来 160 多万种组合。上次 62 次就成功了,我对它有点过度信任,觉得这方案应该靠谱,就让它搞了。
结果呢?跑了 100 多次,一个都没成功。
下午发现不对劲——很多组合根本就是语法不通的,或者组合出来的模式反而更容易被检测。暴力穷举这条路走不通。
当晚就开始重构第三版。
吸取教训,第三版不搞穷举了,回到"有理论支撑"的思路。
这版确实又跑出来不少 php 的绕过样本。但按官方的判重标准,核心原理和第一版一样,都算重复,不计分,也就没有提交。
以及硬编码返回,告诉我可以成功执行命令的大聪明做法
还有个尴尬的事:有几个样本 Agent 跑的时候显示 white,等我看到想去提交报告的时候,已经变 black 了。伏魔引擎好像一直在更新规则,速度挺快的。
后来工作忙,也就没再管这个比赛了。最后就提交了第一版那一个样本,拿了第 30 名。
这是我第二次用 Agent 打比赛了:
两次比赛,两个我不熟的领域,都拿到了还行的名次。
AI 确实厉害,但光有工具不行,有想法就去做才是关键。
以前从想法到实现,中间要学一堆东西,可能几周几个月才能搞定。现在有 AI,这个过程能压缩到几个小时。
1 月 5 日有想法,1 月 6 日 Agent 就在跑了,第 62 次就出货了。
虽然后面跑了 1000 多次也就出了这一个真正绕过的样本,但这个思路我觉得是对的:让大模型 7×24 小时不停地试,自动生成、自动测试、自动分析失败原因、自动调整策略。人睡觉的时候它还在跑,人上班的时候它还在跑。
传统的免杀研究需要研究员一个个手工尝试,现在可以让 AI 去做这些重复性的试错工作。成功率低没关系,架不住它能不停地试。
当然,AI 不是万能的。它需要你告诉它方向,需要你喂资料,需要你判断结果对不对。但它能帮你快速试错,这个价值很大。
为什么叫莫邪?
三年前我想写一个 WebShell 管理工具,取名 GM(干将莫邪)。使用 wails 实现了一部分功能,后来因为各种原因没做完,但这个名字一直留着。

这次比赛,终于有机会把这个名字用上了。
时维乙巳,序属季冬,十二日记