pwpwpw123
驱动牛犊
驱动牛犊
  • 注册日期2004-01-26
  • 最后登录2007-08-20
  • 粉丝0
  • 关注0
  • 积分27分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:3490回复:14

探讨一下hook的问题ZwCreateProcess

楼主#
更多 发布于:2004-12-10 22:41
这个函数在ntoskrnl.exe中没有导出(导出表中找不到),看到NTrootkit里面用了这个方法
KeServiceDescriptorTable.ServiceTableBase[_callnumber_NtCreateProcess];
对比ZwQuerySystemInformation
KeServiceDescriptorTable.ServiceTableBase[*(PULONG)((PUCHAR)_function+1)]
其实过程都是依表查号查地址;
_callnumber_NtCreateProcess在build 2195是0x29;
各位有什么好办法呀,要是_function是ntdll里的那个NtCreateProcess就搞定了,我google搜了一下没有什么好的例子呀。
我想只要在驱动中搞定ntdll的空间肯定可以依它的导出表找到号的,不知是不是可行的想法
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-12-11 17:59
实现你为什么要Hook呢,或许不Hook也能满足你要求
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
pwpwpw123
驱动牛犊
驱动牛犊
  • 注册日期2004-01-26
  • 最后登录2007-08-20
  • 粉丝0
  • 关注0
  • 积分27分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-12-12 09:54
也许是,但是我只想知道hook此类函数的解决方法
pwpwpw123
驱动牛犊
驱动牛犊
  • 注册日期2004-01-26
  • 最后登录2007-08-20
  • 粉丝0
  • 关注0
  • 积分27分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-12-14 08:43
看来好像没有人回复啊,我想。
coffee_qiqi
驱动牛犊
驱动牛犊
  • 注册日期2003-08-23
  • 最后登录2007-01-06
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-12-15 08:13
你自己声明一下,不是就可以了吗?
linhf
驱动牛犊
驱动牛犊
  • 注册日期2003-03-25
  • 最后登录2006-06-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-12-15 19:46
可以阿
zxwqd
驱动牛犊
驱动牛犊
  • 注册日期2004-09-20
  • 最后登录2005-06-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-12-22 08:40
我也一直在思考未被ntoskrnl.exe导出的zw函数是如何进行有效的hook的,不知道是否哪位仁兄已经知道?
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
7楼#
发布于:2004-12-22 16:49
自己在驱动中根据OS版本进行判断,29H,2FH等
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
wywwwl
驱动大牛
驱动大牛
  • 注册日期2002-08-16
  • 最后登录2018-04-07
  • 粉丝1
  • 关注0
  • 积分-10分
  • 威望135点
  • 贡献值6点
  • 好评度76点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2004-12-22 17:11
这确实是一个问题,你应该看看驱动开发网络上面的ntroot,受益非潜啊
琢磨悟真知
yyy_qazwsxedc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-29
  • 最后登录2004-12-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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过程
Sephiroth
驱动牛犊
驱动牛犊
  • 注册日期2003-05-03
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-12-29 15:11
另一种HOOK的思路是修改KiSystemService为自己的例程,在例程里对要HOOK的服务号自己进行派发。
ysr
ysr
驱动牛犊
驱动牛犊
  • 注册日期2001-05-11
  • 最后登录2015-01-29
  • 粉丝0
  • 关注0
  • 积分79分
  • 威望48点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-12-29 20:08
在内核驱动中查找ntdll.dll模块的函数导出表找到要hook的函数地址,字节 1-4 就是系统调用号,利用找到的系统调用号更改系统服务表。
cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-12-30 10:49
谁知道WinXP和Win2003下的ZwCreateProcessEx的原型声明?
reayi
驱动牛犊
驱动牛犊
  • 注册日期2002-11-06
  • 最后登录2010-03-30
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-12-31 09:35
比ZwCreateProcess参数多了一个而已,添在最后
cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-01-03 23:02
比ZwCreateProcess参数多了一个而已,添在最后

是什么呢?
游客

返回顶部