您现在的位置是:知识 >>正文
shellcode免杀教程
知识9513人已围观
简介三年前我拿到一个目标服务器的权限,想弹个shell回来。结果杀软直接给我拦了,payload落地瞬间被删,日志里写着“Trojan:Win32/Meterpreter”。那会儿我意识到,光会打点没用, ...
三年前我拿到一个目标服务器的杀教权限,想弹个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本身有正规数字签名,杀软对它的信任度很高,资源节里的内容反而很少深查。
免杀这条路上没有银弹。你只能不断测试、调整、再测试。有时候一个看似完美的方案,换个环境就翻车。但正是这种对抗感让人上瘾——你永远在跟杀软工程师斗智斗勇。工具是死的,思路是活的,把每个环节都当成可以手动调整的积木,比到处找现成免杀工具靠谱得多。
最后提醒一句,别在真实环境里拿免杀技术做非法事。写这篇文章纯粹是为了技术探讨,红队演练和渗透测试请务必拿到授权。
Tags:
上一篇:网络漏洞扫描系统通过远程监测
下一篇:今日头条辅助伪原创
相关文章
超紧身牛仔裤热舞
知识灯光是紫红色的,从天花板上斜斜打下来,把舞池切成几块明暗交错的格子。她站在最亮的那格中央,背对着DJ台,等鼓点沉到最低处。 牛仔裤是超紧身的,弹力布料裹着大腿和胯骨,像第二层皮肤。腰线卡在胯尖上,露出 ...
【知识】
阅读更多爬虫工具库
知识我电脑里躺着47个爬虫脚本,它们不是玩具。去年帮一个做跨境电商的朋友抓竞品价格,他靠这些数据三个月调整了两次定价策略,利润率涨了11%。爬虫工具库不是技术收藏癖的陈列架,它是你从互联网这座矿山上合法 ...
【知识】
阅读更多漏洞修复不需要源码么
知识三年前,我们给一家制造企业做工业软件升级,客户突然甩过来一个老系统的崩溃日志,说必须在下个季度前修好。那套系统是2008年用VB6写的,原开发团队早散了,连编译环境都装在Windows XP的虚拟机里 ...
【知识】
阅读更多