误入了一个外挂驱动交流群,规模挺大;进来就看见难绷的宣传语贴脸


无敌稳定,无特征,无模块,独家核心技术?哈哈
以测试的名义加了驱动作者,SDK眼花缭乱

上手看看是个什么货色
如他所说,确实是无模块,但很显然反作弊干的就是无模块。我之前写过一篇文章从内存的角度扫描无模块驱动。
太长不看,具体步骤:
1.扫一遍内核RWX内存
2.加载驱动
3.再扫一遍内核RWX内存
对比一下,较低地址,突然增大的部分大概率就是这期间被映射上去的无模块驱动(不一定,得手动排查一下,另外也有可能是RX内存),如图:

利用这个原理可以把外挂驱动dump下来分析,先说一下文件结构:
劫持了Null.sys的指针通信
分析x64.dll发现通过通过向Null.sys发送IO control code进行通信,用Ark工具看一下Null.sys的派遣函数

这两个Io地址明显是指向了外挂驱动的地址范围

重定向到了自己的Io分发函数
具体的Hook:

有点混淆,可以给这个dispatch函数打断点追控制流;但混淆不强,直接看ioctl code追对应的swithc-case也行
用MmPfnDataBase拿到CR3后将虚拟地址转物理地址,用MmCopyMemory读
处理了跨页、大页等问题

用MmMapIoSpace把物理内存映射到当前地址空间,然后直接读取
比较搞笑的是他这个memcpy写反了


和Drv_ReadMemory一样,不过把TranslateLinearAddress换成了从Pcb->DiretoryTableBase取CR3

写也是一样的,换下参数位置
有个Drv_AllocMemory就不放了,很简单的附加+ZwAllocateVirtualMemory申请内存
看看这个Drv_AllocHighMemory
这里的思想就是之前流行的高位注入的内存申请部分;附加到用户进程,在内核申请内存然后通过页表的User位暴露给用户态访问;现在有个问题就是机器普遍开启了KVAS,隔离了内核页表


注入均未处理SEH、TLS;而且代码写的很诡异,每一种shellcode执行方式都写了个函数,看的头痛。导入表处理的不好,动态链接的DLL注入进去,在修复导入表的时候会#PF蓝屏



没筛选线程,直接附加+ZwOpenThread拿到任意一个线程的对象然后劫持


还有个remote thread就不看了
这玩意我还在想为什么断不下来,看dll原来是纯3环实现,实现方式还很呆;释放并执行了一个名为inject.exe的程序


提取inject.exe,是一个很纯粹的反射注入,WriteProcessMemory + VirtualAllocEx + CreateRemoteThread。好吧,稳定!

用ObRegisterCallback注册回调保护进程,注意有两个校验点,先patch掉

注册完之后改回来避免pg
回调函数:

不过测试的时候发现它这个特征码有点问题搜不到,进程直接崩了

伪装了下面内容:
[培训]传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2天前
被周旋久编辑
,原因: