原文发表于百度空间,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检测的更多相关文章

  1. 【旧文章搬运】再谈隐藏进程中的DLL模块

    原文发表于百度空间,2009-09-17========================================================================== 相当老的话 ...

  2. 【旧文章搬运】Windbg+Vmware驱动调试入门(四)---VirtualKD内核调试加速工具

    原文发表于百度空间,2009-01-09========================================================================== 今天又想起 ...

  3. 【旧文章搬运】遍历EPROCESS中的ActiveProcessLinks枚举进程

    原文发表于百度空间,2008-7-25========================================================================== 前面对PEB ...

  4. 【旧文章搬运】深入分析Win7的对象引用跟踪机制

    原文发表于百度空间及看雪论坛,2010-09-12 看雪论坛地址:https://bbs.pediy.com/thread-120296.htm============================ ...

  5. 【旧文章搬运】分析了一下360安全卫士的HOOK(二)——架构与实现

    原文发表于百度空间及看雪论坛,2009-10-14 看雪论坛地址:https://bbs.pediy.com/thread-99460.htm 刚发这篇文章的时候,因为内容涉及360的核心产品,文章被 ...

  6. 【旧文章搬运】Windows句柄分配算法(一)

    原文发表于百度空间,2009-04-04========================================================================== 分析了Wi ...

  7. 【旧文章搬运】Windows句柄表分配算法分析(一)

    原文发表于百度空间,2009-03-30========================================================================== 阅读提示: ...

  8. 【旧文章搬运】PspCidTable攻与防

    原文发表于百度空间,2009-03-29========================================================================== PspCi ...

  9. 【旧文章搬运】更正一个枚举PspCidTable时的错误

    原文发表于百度空间及看雪论坛,2009-02-27 看雪论坛地址:https://bbs.pediy.com/thread-82919.htm============================= ...

随机推荐

  1. springboot主要注解及其作用

    1.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Configuration和@EnableAutoConfiguration ...

  2. Word文档转Markdown插件(Windows)

    在线的转换,Shell脚本的转换都试过了,都没有原生Word文档集成的插件转换这么好用,并且没有Bug. 下载:http://www.writage.com/

  3. SpringMVC拦截器详解[附带源码分析](转)

    本文转自http://www.cnblogs.com/fangjian0423/p/springMVC-interceptor.html 感谢作者 目录 前言 重要接口及类介绍 源码分析 拦截器的配置 ...

  4. Go -- NSQ topic和channel的区别

    topic:一个可供订阅的话题.channel:属于topic的下一级,一个topic可以有多个channel. 举个例子:topic:比做一个广播,如交通广播.打开收音机,你可以换很多频率,如果换到 ...

  5. Material Theme

    Material Theme提供了一下功能: 1.系统widgets可以设置调色板 2.系统widgets的触摸反馈 3.Activity过渡动画 你可以根据你品牌的色彩来定义Material The ...

  6. Codeforces 424 C. Magic Formulas

    xor是满足交换律的,展开后发现仅仅要能高速求出 [1mod1....1modn],....,[nmod1...nmodn]的矩阵的xor即可了....然后找个规律 C. Magic Formulas ...

  7. 小程序 - Template

    关于模板,参见:https://mp.weixin.qq.com/debug/wxadoc/dev/framework/view/wxml/template.html 引入模块 <import ...

  8. unknownhostexception错误解决方案

    关于java.net.UnknownHostException大家也许都比较熟悉,今天我来整理一下关于java.net.UnknownHostException的各种处理办法: 1.在Android项 ...

  9. Intel Chipsets

    http://en.wikipedia.org/wiki/Chipset Chipset From Wikipedia, the free encyclopedia     A chipset is ...

  10. HDU 1423 Greatest Common Increasing Subsequence(LICS入门,只要求出最长数)

    Greatest Common Increasing Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536 ...