原文发表于百度空间,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. MongoDB学习day10--Mongoose的populate实现关联查询

    一.Mongoose populate官方文档 https://mongoosejs.com/docs/populate.html 二.Mongoose populate关联查询 1.定义ref va ...

  2. 移动端日历选择控件(支持Zepto和JQuery)

    移动端日历选择控件(支持Zepto和JQuery) <!DOCTYPE html> <html> <head> <meta charset="utf ...

  3. 静态NAT、动态NAT、PAT(端口多路复用)的配置

    静态NAT.动态NAT.PAT(端口多路复用)的配置   NAT的实现方式有三种,即静态转换Static Nat.动态转换Dynamic Nat 和 端口多路复用OverLoad.    静态转换 ( ...

  4. node 爬虫 --- 将爬取到的数据,保存到 mysql 数据库中

    步骤一:安装必要模块 (1)cheerio模块 ,一个类似jQuery的选择器模块,分析HTML利器. (2)request模块,让http请求变的更加简单 (3)mysql模块,node连接mysq ...

  5. ubuntu 16.04 更新后搜狗输入法无法输入中文的问题

    方法一:重启搜狗输入法 通过下面的两个命令重启搜狗输入法,看重启后是否可以正常使用: ~$ killall fcitx  ~$ killall sogou-qinpanel   方法二:检查修复安装依 ...

  6. SQL数据库 更改数据类型

    向表中添加数据 alter table 表名 add 列名 类型 更改表中列的数据类型 alter table 表名 alter column 列名 类型 删除表中的指定列 alter table 表 ...

  7. ansible 基本命令学习与踩坑

    1. 命令行参数 -v,–verbose 详细模式,如果命令执行成功,输出详细的结果(-vv –vvv -vvvv) -i PATH,–inventory=PATH 指定host文件的路径,默认是在/ ...

  8. hive:Access denied for user &#39;root&#39;@&#39;%&#39;

    配置hive全分布模式时候,在mysql里面创建用户:create user 'hive' identified by 'hive'; 然后给hive帐号分配全部权限: grant all privi ...

  9. scrollTo(String text) and scrollToExact(String text) method of Android Driver not working

    Using the scrollTo(String text) and scrollToExact(String text) method of Android Driver. However the ...

  10. Linux主要命令

    pwd  查看当前路径 cd ..    表示后一级目录级 cd .   表示当前目录 cd ../..   后退两级 cd  表示进入当前家目录 date 返回当前的一个具体时间    -s  修改 ...