什么是直接系统调用
EDR
现在的EDR厂商实现在Ring3层实现了挂钩,通过用户资料替换操作码和操作数导致重新到EDR的hook.dll。EDR检测出本机API执行的代码是否存在恶意内容和行为
常规调用和直接调用的流程图片
这个是未挂钩的执行图片
这个是EDR挂钩之后的执行流程
这个是直接系统调用的流程图
显而易见直接系统调用没走正常路线所有没有被EDR的钩子检测到达到了绕过EDR的目的
需要的文件
https://github.com/jthuraisamy/SysWhispers2
这里使用SysWhisper2当中的syscalls.h
asm文件
需要的函数
MOVE r10,rcx
mov eax,funcation
syscall
ret
代码实现
这里我使用c++来实现这个代码
这里现获取到ntdll.dll的句柄,从ntdll.dll中的NtallocateVirtualMemory函数读取系统调用号,系统调用号为函数的第四个字节,这个就是系统调用的核心部分。
重复这个操作获取到全部要使用的函数然后就可以执行加载shellcode
这里给出MASM汇编代码
EXTERN用于全局访问变量 包含了对应的SSN
展示效果
处理一下