误入了一个外挂驱动交流群,规模挺大;进来就看见难绷的宣传语贴脸
无敌稳定,无特征,无模块,独家核心技术?哈哈
以测试的名义加了驱动作者,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
回调函数:
不过测试的时候发现它这个特征码有点问题搜不到,进程直接崩了
伪装了下面内容:
回复或点赞可查看完整内容
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-289059.htm
[原创]对某市场外挂驱动逆向分析
306 浏览
11 回复
附件IDA version:9.1
周旋久
附件IDA version:9.1
不知道主包会不会switch混淆
附件IDA version:9.1
不知道主包会不会switch混淆
学习一下
学习学习
综合型、擅长掌法、火属性、攻防兼备,类似龙、战神、战意强,全身强调XT。
学习学习
学习下
tql
学习下
注入这块没绷住
看看是什么样子的