Tesla.Angela 发表于 2014-5-17 20:37:59

[原创思路]“隐藏”内核线程和回调

刚才在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字节的废弃空间即可。

Tesla.Angela 发表于 2014-5-28 15:42:21

补充一句,其实ARK要检测也不是不可能,就是繁琐一点:

找到了回调或者线程函数的“理论”入口点后,检查有没有JMP,如果有,就跟过去。
如果发现JMP的“落脚点”不在起始地址所属的驱动,就给出适当提示。

zfdyq 发表于 2014-5-28 22:45:14

顶老大

gfw 发表于 2014-6-5 15:09:02

我也来顶老大

chaos4 发表于 2017-12-9 00:28:13

这也算简化版的Inline Hook了吧.

chaos4 发表于 2017-12-9 03:52:10

Tesla.Angela 发表于 2014-5-28 15:42
补充一句,其实ARK要检测也不是不可能,就是繁琐一点:

找到了回调或者线程函数的“理论”入口点后,检查 ...

老大.为什么用这方法注册回调后.PCHUNTER还是显示是自己驱动注册的呢

lsj_pro 发表于 2018-1-18 10:25:49

这也能隐藏

mmlai8 发表于 2018-1-25 03:44:31

这也能隐藏
页: [1]
查看完整版本: [原创思路]“隐藏”内核线程和回调