阅读:3490回复:14
探讨一下hook的问题ZwCreateProcess
这个函数在ntoskrnl.exe中没有导出(导出表中找不到),看到NTrootkit里面用了这个方法
KeServiceDescriptorTable.ServiceTableBase[_callnumber_NtCreateProcess]; 对比ZwQuerySystemInformation KeServiceDescriptorTable.ServiceTableBase[*(PULONG)((PUCHAR)_function+1)] 其实过程都是依表查号查地址; _callnumber_NtCreateProcess在build 2195是0x29; 各位有什么好办法呀,要是_function是ntdll里的那个NtCreateProcess就搞定了,我google搜了一下没有什么好的例子呀。 我想只要在驱动中搞定ntdll的空间肯定可以依它的导出表找到号的,不知是不是可行的想法 |
|
沙发#
发布于:2004-12-11 17:59
实现你为什么要Hook呢,或许不Hook也能满足你要求
|
|
|
板凳#
发布于:2004-12-12 09:54
也许是,但是我只想知道hook此类函数的解决方法
|
|
地板#
发布于:2004-12-14 08:43
看来好像没有人回复啊,我想。
|
|
地下室#
发布于:2004-12-15 08:13
你自己声明一下,不是就可以了吗?
|
|
5楼#
发布于:2004-12-15 19:46
可以阿
|
|
6楼#
发布于:2004-12-22 08:40
我也一直在思考未被ntoskrnl.exe导出的zw函数是如何进行有效的hook的,不知道是否哪位仁兄已经知道?
|
|
7楼#
发布于:2004-12-22 16:49
自己在驱动中根据OS版本进行判断,29H,2FH等
|
|
|
8楼#
发布于:2004-12-22 17:11
这确实是一个问题,你应该看看驱动开发网络上面的ntroot,受益非潜啊
|
|
|
9楼#
发布于:2004-12-29 09:27
(1)先将原来的入口备份 old_ZwXXX = (KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)ZwXXX+1)]) (2)修改入口为你的函数 (KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)ZwXXX+1)]) = (ULONG)HookZwXXX HookZwXXX是你的hook函数 (3)在HookZwXXX中回调old_ZwXXX (4)在去除hook时 (KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)ZwXXX+1)]) = (ULONG)old_ZwXXX 这样就完成了整个hook和unhook过程 |
|
10楼#
发布于:2004-12-29 15:11
另一种HOOK的思路是修改KiSystemService为自己的例程,在例程里对要HOOK的服务号自己进行派发。
|
|
11楼#
发布于:2004-12-29 20:08
在内核驱动中查找ntdll.dll模块的函数导出表找到要hook的函数地址,字节 1-4 就是系统调用号,利用找到的系统调用号更改系统服务表。
|
|
12楼#
发布于:2004-12-30 10:49
谁知道WinXP和Win2003下的ZwCreateProcessEx的原型声明?
|
|
13楼#
发布于:2004-12-31 09:35
比ZwCreateProcess参数多了一个而已,添在最后
|
|
14楼#
发布于:2005-01-03 23:02
比ZwCreateProcess参数多了一个而已,添在最后 是什么呢? |
|