首页
社区
课程
招聘
[求助]学习rootkit遇到的问题
发表于: 2011-6-4 20:05 4731

[求助]学习rootkit遇到的问题

2011-6-4 20:05
4731
哪位大侠能解释一下
#define GetSystemFunc(FuncName) KeServiceDescriptorTable.ServiceTableBase[*(PULONG)((PUCHAR)FuncName+1)]的深层含义。。意思我懂,但是不懂原理。。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 596
活跃值: (449)
能力值: ( LV12,RANK:320 )
在线值:
发帖
回帖
粉丝
2
原理:B8 3E 00 00 00    mov     eax, 3Eh
2011-6-4 20:22
0
雪    币: 258
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
这个式子是通过ntoskerl.exe导出的Zw*函数的地址来获得相应的在SSDT表中Nt*函数的地址

所有Zw*函数都是以mov EAX,ULONG开始的,ULONG为对应在SSDT表中的索引号
(PUCHAR)FuncName是该Zw*函数在内存中的地址
(PUCHAR)FuncName+1就是那个对应的ULONG索引在内存中的地址
*(PULONG)((PUCHAR)FuncName+1)就是取出这个ULONG索引值,假设等于index

KeServiceDescriptorTable.ServiceTableBase[index]就是对应的SSDT表中对应的Nt*函数的地址
2011-6-4 20:30
0
雪    币: 211
活跃值: (77)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
4
要是这样的话FuncName不就应该是地址了吗,可是rootkit里面传入的好像不是地址啊。。
2011-6-4 21:03
0
雪    币: 242
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
2011-6-4 21:34
0
雪    币: 258
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
传入的是地址,你声明了一个导出函数Zw*,例如是
//导出函数声明
NTSYSAPI
NTSTATUS
NTAPI ZwQuerySystemInformation(
IN ULONG SystemInformationClass,  // 该值为5时代表系统中所有的进程信息
IN PVOID SystemInformation,       // 最终列举的信息
IN ULONG SystemInformationLength, // 大小
OUT PULONG ReturnLength);      
声明之后 你在程序中使用ZwQuerySystemInformation作为变量,他代表的就是系统中该函数的地址
2011-6-5 10:29
0
雪    币: 211
活跃值: (77)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
7
谢谢各位热心的帮助,结贴了。。
2011-6-5 12:08
0
游客
登录 | 注册 方可回帖
返回
//