如何用hanzoInjection内存注入执行payload
Cobalt Strike--使用hanzolnjection的免杀
绕过终端检测,让恶意代码在内存中悄然运行,这听起来像是高级攻击者的独门秘籍。其实,借助hanzoInjection这样的工具,实现内存注入执行Payload的过程,其技术逻辑远比想象中更清晰、更结构化。它本质上是一个精巧的加载器,核心任务是将静态的二进制Payload转化为内存中的动态指令流。
内存注入的“投递”与“激活”
整个过程可以拆解为两个关键阶段:投递与激活。投递,指的是将Payload从磁盘文件安全地搬运到目标进程的私有内存空间。hanzoInjection通常会采用经典的Windows API调用链来完成这一步,比如通过VirtualAllocEx在远程进程内申请一块具有执行权限的内存,再用WriteProcessMemory像抄写员一样,逐字节将Payload.bin文件的内容“誊写”进去。
这还没完,Payload躺在内存里只是一串死数据。激活阶段,才是让它“活”过来的关键。工具需要创建一个远程线程,其入口点就指向刚刚写入的那块内存地址。当CreateRemoteThread被调用,系统调度器便会跳转到那块内存开始执行指令,Payload这才真正开始运作。这里有个细节,Payload本身必须是位置无关的Shellcode,因为它被加载的地址是不确定的。
从命令行到内存执行的实战推演
假设我们手头有一个由Cobalt Strike生成的raw格式Payload,文件名为beacon.bin。在命令行中,执行hanzoInjection.exe -e beacon.bin,背后发生了什么呢?
- 工具首先会读取
beacon.bin,将其全部内容加载到自身进程的缓冲区。 - 随后,它需要选择一个“宿主”进程。可能是通过枚举进程列表寻找一个合适的、看似无害的进程(如
explorer.exe或svchost.exe),也可能直接注入到自身进程。这取决于工具的预设逻辑和规避策略。 - 接下来便是前述的“投递”流程:打开目标进程句柄、分配内存、写入数据。
- 最后,创建远程线程,触发执行。一旦线程启动,Beacon的反射式加载器就开始工作,在内存中重建整个C2通信模块,磁盘上却找不到任何对应的恶意文件。
为什么这种方法能绕过检测?
传统的杀毒软件严重依赖文件静态扫描和行为特征库。内存注入直接绕过了文件落地这个环节,Payload在磁盘上只是一个无关紧要的二进制数据包(甚至可能被加密或混淆),不具备可执行文件头,扫描引擎很可能将其忽略。而在内存中执行时,恶意行为被“嫁接”到一个合法进程的上下文中,增加了行为检测的难度。不过,这并非银弹。高级EDR(终端检测与响应)系统可以通过监控进程内存的异常属性(如私有内存区域突然出现可执行页面)、检测远程线程创建等API调用的序列,来发现这类注入的蛛丝马迹。
理解hanzoInjection这类工具的工作原理,与其说是学习攻击,不如说是看清防御的盲区。安全工程师们正致力于通过内存签名扫描、运行时行为分析和硬件虚拟化安全等技术,来压缩这片灰色地带。攻击与防御的博弈,就在这内存的方寸之间无声地升级。

参与讨论
这工具真能绕过EDR?我上次试了个类似的好像秒被拦了🤔
hanzoInjection注入到explorer.exe确实隐蔽,但内存扫描现在也挺狠的
求问beacon.bin需要自己加解密壳吗?还是直接扔进去就行?
前几天刚用类似方法搞内网穿透,结果被CrowdStrike抓了,唉
感觉还行,至少比直接落盘强点
又是标题党?说“悄然运行”,实际CreateRemoteThread早被监控烂了
可以试试改成APC注入,远程线程太显眼了
我之前也踩过这坑,没处理好内存权限直接崩了目标进程
666,不过现在主流EDR都能Hook VirtualAllocEx了吧?
蛮好的思路,但Payload要是带IAT重定位就废了