首页
论坛
课程
招聘
[原创]分享比较完整的ROOTKIT DEMO! 原来Shadow Hook和SSDT Hook一样容易!
2008-8-5 23:37 104508

[原创]分享比较完整的ROOTKIT DEMO! 原来Shadow Hook和SSDT Hook一样容易!

2008-8-5 23:37
104508
这里写的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:



第五届安全开发者峰会(SDC 2021)10月23日上海召开!限时2.5折门票(含自助午餐1份)

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (116)
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
embedlinux 活跃值 1 2008-8-5 23:46
2
0
自己顶一下!
雪    币: 381
活跃值: 活跃值 (19)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
笨奔 活跃值 1 2008-8-5 23:54
3
0
晕,一上来就碰到如此好贴,赞个先。受教了。
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
embedlinux 活跃值 1 2008-8-6 00:00
4
0
欢迎对程序提出意见, 多多交流!
雪    币: 228
活跃值: 活跃值 (23)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
yjcpu 活跃值 1 2008-8-6 00:22
5
0
[QUOTE=;]...[/QUOTE]
又见RootKit,危险
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
embedlinux 活跃值 1 2008-8-6 00:28
6
0
ROOTKIT主要看是用在哪些地方啊!有时也是很多帮助的!这里只是为了学习WINDOWS底层HOOK编程!
雪    币: 42
活跃值: 活跃值 (17)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
nevergone 活跃值 3 2008-8-6 07:49
7
0
学习
LZ代码写得很好
雪    币: 478
活跃值: 活跃值 (640)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
sudami 活跃值 25 2008-8-6 08:42
8
0
谢谢分享。

学习~
雪    币: 206
活跃值: 活跃值 (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
鸡蛋壳 活跃值 2008-8-6 10:22
9
0
可以做个OD插件。
雪    币: 347
活跃值: 活跃值 (11)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
xPLK 活跃值 3 2008-8-6 10:26
10
0
其实那个宏可以简化一点的。
虽然那样写看着方便但是没必要。

///////
写得不错额~

不过感觉那个HookOfZwOpenProcess这样写不通用。

push   0C4h       //push 0C4h     68c4000000  用WinDbg查看
push   804daa90h  //push 804daa90 6890aa4d80
jmp   [JmpNtOpenProcessAddr]
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
embedlinux 活跃值 1 2008-8-6 13:38
11
0
HookOfZwOpenProcess这样写主要为了对付inline hook!
雪    币: 8670
活跃值: 活跃值 (770)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
cvcvxk 活跃值 10 2008-8-6 13:57
12
0
还算不错,综合里几年来的开源工程,大家应该谢谢楼主的分享。

在pediy混的写木马哥们赶紧膜拜楼主吧~~
雪    币: 727
活跃值: 活跃值 (60)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
Winker 活跃值 8 2008-8-6 15:11
13
0
我第一个膜拜1下
雪    币: 347
活跃值: 活跃值 (11)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
xPLK 活跃值 3 2008-8-6 15:34
14
0


u一下:

lkd> u NtOpenProcess
nt!NtOpenProcess:
80573d06 68c4000000      push    0C4h
80573d0b 6810b44e80      push    offset nt!ObWatchHandles+0x25c (804eb410)
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lOOp 活跃值 2008-8-6 18:16
15
0
学习一下
雪    币: 432
活跃值: 活跃值 (505)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
xss 活跃值 4 2008-8-6 18:48
16
0
谢谢楼主的分享.
雪    币: 7506
活跃值: 活跃值 (298)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 活跃值 15 2008-8-6 20:55
17
0
楼主的代码不错,学习~
雪    币: 727
活跃值: 活跃值 (60)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
Winker 活跃值 8 2008-8-6 22:51
18
0
XP SP3下驱动测试蓝了。
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
embedlinux 活跃值 1 2008-8-7 01:21
19
0
只在XPSP2下测试过,用IDA反汇编一下user32.dll、gdi32.dll, 看看shadow Hook的函数索引号是否和XPSP2下的相同?
雪    币: 206
活跃值: 活跃值 (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
鸡蛋壳 活跃值 2008-8-7 07:33
20
0
XP SP2 干净系统情况下,直接用KmdManager.exe加载蓝屏,LZ源程序改一下才能加载成功,因为系统在D盘。LZ驱动稳定性有待解决。有一个区别是本人的系统是美化版系统。
雪    币: 1034
活跃值: 活跃值 (69)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
boywhp 活跃值 12 2008-8-7 08:10
21
0
呵呵 不错!省得有些小东西还到处找
雪    币: 211
活跃值: 活跃值 (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
dayed 活跃值 1 2008-8-7 09:07
22
0
非常谢LZ,顶
雪    币: 347
活跃值: 活跃值 (11)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
xPLK 活跃值 3 2008-8-7 09:55
23
0
你看那个NtOpenProcess的Hook就可以看出点问题了。
雪    币: 7506
活跃值: 活跃值 (298)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 活跃值 15 2008-8-7 10:44
24
0
楼主说了是Demo啊,又不是成品,学习为主~
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
embedlinux 活跃值 1 2008-8-7 11:44
25
0
热烈欢迎自己修改程序,加强稳定性和增加功能! 修改后也不要忘了分享一下哦!
游客
登录 | 注册 方可回帖
返回