[原创思路]“隐藏”内核线程和回调
刚才在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字节的废弃空间即可。 补充一句,其实ARK要检测也不是不可能,就是繁琐一点:
找到了回调或者线程函数的“理论”入口点后,检查有没有JMP,如果有,就跟过去。
如果发现JMP的“落脚点”不在起始地址所属的驱动,就给出适当提示。 顶老大 我也来顶老大 这也算简化版的Inline Hook了吧. Tesla.Angela 发表于 2014-5-28 15:42
补充一句,其实ARK要检测也不是不可能,就是繁琐一点:
找到了回调或者线程函数的“理论”入口点后,检查 ...
老大.为什么用这方法注册回调后.PCHUNTER还是显示是自己驱动注册的呢 这也能隐藏 这也能隐藏
页:
[1]