【旧文章搬运】对抗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============================= ...
随机推荐
- K8S label 操作
在部署完成 node 节点集群之后,为了更灵活的操控 node 节点,有时候需要对 node 节点进行对各个 node 节点进行 lable 标签标记. 查看各个节点的信息 [root@porxy02 ...
- ubuntu harddisk uuid already exists
就是virtualbox下先用u盘启动的虚拟机,把U盘的vhdk文件拷贝到本机,然后再启动,就有问题,提示什么uuid already exist 找了半天,网上基本都是说windows下如何用的.. ...
- C#语法复习1
一.C#与.net框架 .net是语言无关的. 程序的执行流程: .net兼容语言的源代码文件 .net兼容编译器 程序集(公共中间语言(CIL)common intermediate languag ...
- Json——使用Json jar包实现Json字符串与Java对象或集合之间的互相转换
总结一下利用Json相关jar包实现Java对象和集合与Json字符串之间的互相转换: 1.创建的User类: package com.ghj.packageofdomain; public clas ...
- MongoDB与MySQL的插入性能测试【转】
1.1 MongoDB的简单介绍 在当今的数据库市场上,MySQL无疑是占有一席之地的.作为一个开源的关系型数据库,MySQL被大量应用在各大网站后台中,承担着信息存储的重要作用.2009年,甲骨文 ...
- poj2595(凸包)
Min-Max Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2192 Accepted: 502 Descriptio ...
- 标准C头文件
ISO C标准定义的头文件: POSIX标准定义的必须的头文件: POSIX标准定义的XSI可选头文件: POSIX标准定义的可选头文件:
- centos下部署项目问题
最近写了商品管理的后台完成了一部分,用node+koa+mongodb搭建,现在想部署到自己的服务器上,部署的过程中遇到了一些坑.首先就是各种环境的搭建,搭建好了之后要把后台的代码传到服务器上运行,运 ...
- mysql order by的一些技巧
1. 只按日期排序,忽略年份> select date, description from table_name order by month(date),dayofmonth(date);注意 ...
- 项目问题总结2:GUID区分大写和小写吗?
问题描写叙述: 近期在做项目的过程中,遇到一个问题,将从基础系统查询出来的课程ID作为參数去考评系统里查询考试信息,却什么也查不出来,调试了半天不知道什么原因. 问题分析: 静下心来思考一下,能够肯定 ...