【旧文章搬运】对抗RKU的StealthCode检测
原文发表于百度空间,2009-07-02
==========================================================================
快一个月没写东西了,随便写点~~
StealthCode检测似乎是RootkitUnhooker独有的功能,主要是检测那些无主的可执行代码片段。
比如一些放在Pool中的代码,或者驱动中的代码但驱动隐藏了使得RKU无法找到,就认为是StealthCode了。
RKU检测StealthCode的方法似乎是这样的(结合网上一些资料及自己的观察):
InlineHook以下StealthCode中常用的函数
ExAllocPool
ExAllocPoolWithTag
KeDelayExecutionThread
并将调用者的相关信息记录在案
在查找线程时会记录线程(内核线程)的StartAddress,如果StartAddress不在它能找到的模块中,那好,RKU就认为找到了一处StealthCode
对于以上三个函数的Hook,RKU都是5字节的HeadInline,所以可以直接jmp到FunAddr+5跳过它的Hook.比如这样:
//跳过RKU的InlineHook
__declspec( naked ) NTSTATUS
myKeDelayExecutionThread (
KPROCESSOR_MODE WaitMode,
BOOLEAN Alertable,
PLARGE_INTEGER Interval
)
{
_asm
{
push ebp
mov ebp,esp
mov eax,g_AddrKeDelayExecutionThread
add eax,
jmp eax
}
}
然后所有调用KeDelayExecutionThread的地方直接换成myKeDelayExecutionThread就OK了。跳过Hook之后,RKU自然是无法记录到的。
对于StartAddress检测法,也很容易欺骗,只要我们把线程的启动地址给DKOM掉就可以了。
lkd> dt _ETHREAD 821bb5a8
nt!_ETHREAD
....
+0x220 ThreadsProcess : 0x821bb830 _EPROCESS
+0x224 StartAddress : 0x80684528
就是这个东西,改成任意一个已知模块中的有效地址就可以了,比如ntoskrnl中某个函数的地址~~
或者另外一种方法,首先找一个已知模块中的有效地址,更改该处代码,使它跳到我们真正的线程地址处。然后PsCreateSystemThread时把线程的启动地址设为刚才找到的那个有效地址就可以了。启动线程之后,再把刚才改的代码还原回去,了无痕迹.
线程是我们的,但启动地址是别人的,这就叫"嫁祸他人",走自己的路,让别人背黑锅去吧~~(该方法在Ring3也可以用,VirtualAlloc一块内存,写入代码,把启动地址嫁祸到任意一个模块中(比如kernel32.dll中~~),如果有人想检测线程地址的话......)
比如,我改一下KeBugCheckEx(之所以选它,是因为只要系统还正常,就调用不到它)的入口代码,如下:

然后PsCreateSystemThread开启线程,来看一下线程信息:
启动地址是KeBugCheckEx,就是这个效果~~ RKU看到这个地址所在的模块是已知的,就自然不认为是StealthCode了,Over.
【旧文章搬运】对抗RKU的StealthCode检测的更多相关文章
- 【旧文章搬运】再谈隐藏进程中的DLL模块
原文发表于百度空间,2009-09-17========================================================================== 相当老的话 ...
- 【旧文章搬运】Windbg+Vmware驱动调试入门(四)---VirtualKD内核调试加速工具
原文发表于百度空间,2009-01-09========================================================================== 今天又想起 ...
- 【旧文章搬运】遍历EPROCESS中的ActiveProcessLinks枚举进程
原文发表于百度空间,2008-7-25========================================================================== 前面对PEB ...
- 【旧文章搬运】深入分析Win7的对象引用跟踪机制
原文发表于百度空间及看雪论坛,2010-09-12 看雪论坛地址:https://bbs.pediy.com/thread-120296.htm============================ ...
- 【旧文章搬运】分析了一下360安全卫士的HOOK(二)——架构与实现
原文发表于百度空间及看雪论坛,2009-10-14 看雪论坛地址:https://bbs.pediy.com/thread-99460.htm 刚发这篇文章的时候,因为内容涉及360的核心产品,文章被 ...
- 【旧文章搬运】Windows句柄分配算法(一)
原文发表于百度空间,2009-04-04========================================================================== 分析了Wi ...
- 【旧文章搬运】Windows句柄表分配算法分析(一)
原文发表于百度空间,2009-03-30========================================================================== 阅读提示: ...
- 【旧文章搬运】PspCidTable攻与防
原文发表于百度空间,2009-03-29========================================================================== PspCi ...
- 【旧文章搬运】更正一个枚举PspCidTable时的错误
原文发表于百度空间及看雪论坛,2009-02-27 看雪论坛地址:https://bbs.pediy.com/thread-82919.htm============================= ...
随机推荐
- 2716 [Violet 3] 天使玩偶
@(BZOJ)[CDQ分治] Sample Input 100 100 81 23 27 16 52 58 44 24 25 95 34 2 96 25 8 14 97 50 97 18 64 3 4 ...
- ASP.NET Core 如何记录每次响应的Response信息 - sky 胡萝卜星星 - CSDN博客
原文:ASP.NET Core 如何记录每次响应的Response信息 - sky 胡萝卜星星 - CSDN博客 上一篇文章中我们已经成功的记录了Request部分的信息,现在我们来看下如何记录Res ...
- Service具体解释(一):什么是Service
< Service具体解释(一):什么是Service> < Service具体解释(二):Service生命周期> <Service具体解释(三):Service的使用 ...
- 【iOS】KVC 与 KVO
一.KVC与KVO *"KVC":key value Coding(键值编码) *目的:间接的改动或获取对象的属性,减少程序(类与类)之间的耦合度. *"KVO" ...
- PHP生成excel(3)
这一节主要是设置背景颜色.边框.字体大小.表格宽度 效果图 代码如下 <?php header("Content-Type:text/html;charset=utf-8") ...
- Intel Naming Strategy--1
http://en.wikipedia.org/wiki/Mobile_Internet_device Computer sizes Classes of computers Larger S ...
- 【iOS开源码】(1):CCLHTTPServer
我从没有见过比 CCLHTTPServer 更简单的 iOS HTTP server了.你甚至不用创建不论什么子类就可以使用它.对于大部分任务,这个小巧但强悍的server能够满足你的须要. 它简单到 ...
- C++ string 实现大整数相加减
随意两个大整数的加减算法.可自己主动推断正负号.代码例如以下: #include <iostream> #include <vector> #include <cstri ...
- Creo二次开发--内存清理函数
我们在处理模型文件时,总会遇到内存环境的清除问题.一个干净的Creo工作环境.是保证工作能顺利完毕的保障. ProMdlEraseNotDisplayed()函数提供了清除未显示模型的功能. 当须要循 ...
- cocos2d-x(vs2012)环境搭建(第一篇)[版本号:cocos2d-x-3.1.1]
1.下载资源 下载cocos2d-x包V3.1.1,下载戳这里: http://www.cocos2d-x.org/download vs2012下载戳这里: http://www.xiazaiba. ...