【返回博客列表 】

[PSRC-B-20150003] Windows 10下注册表隐藏

编号:
PSRC-B-20150003
来源:
银河实验室
作者:
天真无邪
发布日期:
2015-11-30
阅读量:
5171
通过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位也能用此方法。)



欢迎社会各界向我们反馈平安集团所有产品和业务的安全问题,更多信息可见报告漏洞