通过Hook HHIVE::GetCellRoutine()来隐藏注册表是一个公开了很久的方法,虽然无法绕过一些Anti Rootkit工具,但此方法使用起来非常稳定,从Windows XP — Windows 8.1都能很好的支持,在一些环境下,个人还是喜欢用此方法做注册表隐藏。

Windows 10正式版已经出了几个月了,最近有点时间,就拿出以前写过的一些驱动,来看看Windows 10相对Windows 8.1的内核变化。

今天是第一篇:移植Hook GetCellRoutine()到Windows 10。以后会陆续分享其他Windows 10内核方面的文章。

原始出处已经找不到了,这是此方法最早的一份代码:

http://news.newhua.com/news/2011/0620/125208.shtml

(相关基础性、原理性的东西请自行百度。我这里直接切入正题。)

KeyHive && KeyCell

CM_KEY_CONTROL_BLOCK::KeyHive和CM_KEY_CONTROL_BLOCK::KeyCell的偏移量,在Windows 10下并没有变化,与Windows 7/8相同。64位系统也相同。

下图是一个从Windows XP — Windows 10的偏移量表。

其他用到的结构体CM_KEY_BODY、CM_KEY_NODE、CM_KEY_INDEX都没有变化,可以直接使用。

GetCellRoutine()的变化

偏移量、结构体都没变化,就直接编译运行了。结果自然是蓝屏了,否则也不会有这篇文章了。通过分析memory dump,发现Hook是成功的,但执行到自定义GetCellRoutine()函数时,因为栈不平衡导致了蓝屏。

既然Hook没有问题,就证明是GetCellRoutine()本身有了变化,重启虚拟机,看看原始的GetCellRoutine()指向哪个处理函数。

处理函数是HvpGetCellPaged(),请出IDA看看代码。

IDA识别出3个参数,蓝屏的问题原来在这里,Windows 10比Windows 7/8多了1个参数。F5看看这个参数是干什么用的。

第3个参数是一个OUT DWROD *,只用来返回,不需要输入,这样就方便多了。把这里兼容掉,应该就不会蓝屏了。

修复蓝屏

编译运行后,就可以隐藏了。(64位也能用此方法。)

* 作者:银河实验室(企业账号),转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

源链接

Hacking more

...