|
刚才在VIP讨论群里,有朋友问到怎么枚举回调所属的驱动,于是我灵机一动,想到了如何对抗这种枚举。
WIN64AST、PCHUNTER等软件枚举回调所属驱动或者枚举内核线程所属模块,无非就是对比回调入口点或内核线程起始地址“落在”哪一个驱动里(base<EntryPoint<base+size)。
于是有了以下对抗思路:
1.找一个其他驱动的可写可执行的内存空间(假设地址为FakeAddr)
2.写入JMP指令,跳转到真正的线程函数或回调函数
3.在调用PsCreateSystemThread等函数时,把地址填写为FakeAddr
在去年公审薄某人那天,我就按照这个思路弄了一个POC:http://www.m5home.com/bbs/forum.php?mod=viewthread&tid=7799
不过在64位系统需要注意的是,不能直接修改NTOSKNRL.EXE的内存空间。解决方法很简单,在一个PatchGuard不保护的驱动(比如NTFS.SYS)里找一片长度大约20字节的废弃空间即可。 |
|