本帖最后由 菜叶片 于 2025-10-21 21:15 编辑
飞星注入器v3.4.1 Release
更新日志 [+] 去特征化脚本 [+] 添加更多傀儡函数 [+] VS2022资源文件中添加二进制版本号等信息 以对抗静态扫描(听从大佬建议) [+] v3.4版本由于调用了GetNumaHighestNodeNumber函数 导致程序在Windows10下假死 具体原因未知
战绩 二进制Hash: 39eadfdc099fe3ab0f8ed6b33f42ee2ba84010d79fae7983831ed112e4a29ea6
额外说明 双击后有弹窗则为注入成功 通过任务管理器或SystemInformer可以确定弹窗来自explorer.exe 有其他大佬建议 将Shellcode替换成Beacon之类真正的威胁 为什么我的Demo用的是 弹窗MessageBoxA的Shellcode 有以下几点原因 - Beacon等Shellcode产生的联网通信等行为 在沙箱中较内存操作更明显 并且我没有能力独立开发Beacon和C2
- MessageBoxA创建了一个新的线程 并且弹窗中有"Shellcode"特征字符串 可以体现出我的方案可以对抗内存扫描和用户态的动态查杀
如果有大佬愿意用自己的Shellcode尝试 有以下建议
- 将InjectorDesignaturing\designaturing.py脚本中的Shellcode数组替换成自己的 要注意格式一致
shellcode = [0x41, 0x56 ....., 0xc3]
- Shellcode建议具有代码自修改功能 将Shellcode第一位机器码替换为ret 以防止Shellcode被多次执行
- Shellcode将被插入Kernel32.dll的入口点位置 该部分初始化用函数已确定不会被再次调用 但是可替换的数据长度未知 因此建议Shellcode尽量简短
免杀原理详解
无线程内存注入器的注入步骤: 写入Shellcode 然后劫持执行流到Shellcode
需要句柄权限为 VM_READ VM_WRITE VM_OPERATE 以读写目标虚拟内存 以及修改目标内存页属性
面临如下问题
期间要调用NtWriteVirtualMemory等敏感函数
句柄创建关闭复制 会触发内核回调函数 从而被检测到
首先 要把敏感函数调用合法化 因此需要栈欺骗 即用虚假调用栈 在ETW(Windows事件追踪)中 看似是无害函数调用了某敏感函数
我的解决方案是 调用无害函数 在其下行Nt*函数的syscall指令处设置硬件断点 拦截执行流 修改Nt*函数的调用参数
由此 保留了天然的调用栈 同时执行流Hook无痕 且按照需要的参数调用了需要的函数
然后 获取explorer.exe的较低权限句柄 使用SysmonEnte项目中提到的内核逻辑漏洞 将句柄权限提升至完全访问
为了对抗内存扫描 将Shellcode存放在独立RX内存页中很明显 因此我选择了Kernel32入口点的BaseInitializeDll函数 好处如下
DLL入口点好定位(基址+RVA) 被Kernel32版本影响小
DLL初始化函数不会被再次调用
让Shellcode和Kernel32的RX区域数据融为一体
当然杀软是可以比对Kernel32映像哈希 然后逮捕的... 暂时没有更好的解决方案
explorer.exe经常更新 在Windows不同小版本的程序结构不同 很难在主映像虚拟内存中找Hook点
函数导出表Hook 和 在常用函数内联Hook都是被用烂了的 很容易被当场逮捕
此时微软的屎山代码发力了 我不知道为什么explorer一直在抛出异常
恰好看到了VEH注入项目 仅通过原始内存操作向其他进程注入VEH
那 执行流就劫持到了 微软棒棒的 :3
360核晶和iDefender过不去 有内核Hook的杀软都过不去
压缩文件StarFly3.4.1.zip是无任何输出的注入器
StarFly3.4.1DBG.zip 添加了调试用输出 火绒等会因为可打印字符串中有Shellcode报毒
上述云沙箱测试中使用的版本是StarFly3.4.1.zip
|