游客发表

shellcode免杀教程

发帖时间:2026-10-17 04:43:02

三年前我拿到一个目标服务器的杀教权限,想弹个shell回来。杀教结果杀软直接给我拦了,杀教payload落地瞬间被删,杀教日志里写着“Trojan:Win32/Meterpreter”。杀教那会儿我意识到,杀教光会打点没用,杀教免杀才是杀教真正的技术分水岭。

shellcode免杀的杀教核心就一句话:让特征码失效。杀软查你靠的杀教是静态特征和动态行为,静态特征就是杀教文件里的字节序列,动态行为就是杀教shellcode跑起来时的API调用套路。所以思路也简单——要么改字节,杀教要么藏行为。杀教

先说静态免杀。杀教最笨也最有效的方法是编码+解码器。你把shellcode用XOR或者AES加密,前面放一段解码器代码,运行时先解码再执行。但别用网上现成的模板,那些解码器本身早就被杀软标记了。我习惯自己写个随机生成解码器的脚本,每次生成不同的加密算法和密钥,甚至故意插入一些垃圾指令来混淆反汇编引擎。

有个细节容易被忽略:shellcode的入口点。杀软会扫描PE文件的入口点附近有没有可疑的跳转指令。你可以在入口点先放一段无意义的代码,比如计算斐波那契数列,跑完再跳转到真正的payload。这叫“入口点模糊”,对付静态扫描很管用。

动态免杀更麻烦。现在主流杀软都有沙箱和内存扫描,你的shellcode一旦在内存中被识别为恶意模式,照样被干掉。我常用的招是“分阶段加载”——把shellcode切成几段,分别用不同线程在随机时间点加载到内存,最后用信号量拼接执行。这样沙箱里的时间监控会失效,因为单看任何一个时间点,内存里都没有完整的恶意代码。

另一个技巧是API调用混淆。杀软会监控VirtualAlloc、WriteProcessMemory这类敏感API。别直接调,用间接系统调用,或者通过syscall指令自己构造调用链。我写过一个小工具,能从ntdll.dll里动态提取系统调用号,绕过用户态hook。这招对很多企业级EDR都有效,因为它们的hook主要挂在用户态。

但你别指望一套免杀吃一辈子。杀软更新极快,上周还免杀的样本这周就可能被查。我的习惯是每次渗透前,先花30分钟用目标常用的杀软引擎做本地扫描测试,比如卡巴、火绒、Defender,跑一遍再上线。真到实战里,宁可多花时间做免杀,也别抱着侥幸心理直接扔原payload。

说个真实案例。去年有个红队项目,目标装了某国产终端安全管理软件,带行为沙箱。我试了三种常规免杀都被查,最后用了“白文件侧载”的思路——找一个目标系统上本来就有的合法exe,把shellcode藏进它的资源节里,运行时通过加载资源的方式提取并执行。因为exe本身有正规数字签名,杀软对它的信任度很高,资源节里的内容反而很少深查。

免杀这条路上没有银弹。你只能不断测试、调整、再测试。有时候一个看似完美的方案,换个环境就翻车。但正是这种对抗感让人上瘾——你永远在跟杀软工程师斗智斗勇。工具是死的,思路是活的,把每个环节都当成可以手动调整的积木,比到处找现成免杀工具靠谱得多。

最后提醒一句,别在真实环境里拿免杀技术做非法事。写这篇文章纯粹是为了技术探讨,红队演练和渗透测试请务必拿到授权。

    热门排行

    友情链接