Artifact集成Syscall与Detours
Artifact是CS用来做免杀的Kit,可以让生成的PE文件自带免杀特效,相比生成shellcode由外部loader加载更方便。本质上可以理解为将自定义的外部loader集成进CS的接口。
- ArtifactKit并未开源,而且博客之前就被盯上封掉过。。。仅仅记录一下大致流程,具体实现可见参考链接,按照思路自行组装
修改模板
以dist-template
为例,将patch.c
中用于填充定位的1024个A替换为其它字符串,同时替换artifact.cna
中indexOf
的相应字符串。
ArtifactKit原本采用4个随机数充当异或密钥,可以考虑实现高级加密算法,也可以只是方便的扩充$key
数组的位数。相应地修改artifact.cna
中writeb
函数,以及patch.c
中的异或取余位数、patch.h
中结构体的key数组下标。
如果用mingw交叉编译,只需要去build.sh
文件底部加上相应路径(注释掉官方本身自带的几个加快编译速度)。如果用VS编译,stage要在patch.h
中加上#define DATA_SIZE 1024
或#define DATA_SIZE 271360
(big),patch.c
中set_key_pointers
函数的形式参数改为char * buffer
。
集成Syscall
在定义功能函数的patch.c
中引入SysWhispers2与SysWhispers2_x86作为64位与32位Syscall函数实现,并将VirtualAlloc
、VirtualProtect
、CreateThread
分别改写为NtAllocateVirtualMemory
、NtProtectVirtualMemory
、NtCreateThreadEx
。
- VS编译时,64位项目
patch.c
中spawn
函数的形式参数改为__int64 length
这样就已经可以过掉不少常见杀软了:
集成Detours
与WBG大佬介绍的思路一样,hook相关系统函数,去除sleep期间beacon内存的EXECUTE权限,利用VEH处理sleep后执行时的Access Violation
错误,只在执行期间短暂恢复权限。
可以进一步完善profile支持的HeapAlloc
与MapViewOfFile
内存申请方式、将被hook函数改为Syscall、适配stage类型调用。这个过程坑相当多,等有生之年完全吃透了再详细记录。(感谢NoOne大哥的全程指导)
最终绕过卡巴斯基终端安全: