cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:2014回复:14

ZwCreateProcess的问题

楼主#
更多 发布于:2004-08-31 23:06
在UndocumentNT一书中讲到API hook,我测试书中所给出的ZwCreateFile hook成功了。而后我测试ZwCreateProcess hook时编译总是报该函数未定义。这是为何?如何解决呢?
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-09-02 12:00
自己声明一下就OK了
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-09-02 16:17
声明没有用啊。报:error LNK2001: unresolved external symbol

我是试验UndocumentNT一书中hook API的例子。Hook ZwCreateFile编译通过,执行正常,将下面代码中ZwCreateFile该成ZwCreateProcess编译报“未定义的函数”,增加声明后就报上面类似的错误。为何会这样呢?
NTSTATUS HookServices()
{
OldNtCreateProcess=(NTCREATEPROCESS)(SYSTEMSERVICE(ZwCreateProcess));
_asm cli
(NTCREATEPROCESS)(SYSTEMSERVICE(ZwCreateProcess))=NewNtCreateProcess;
_asm sti
return STATUS_SUCCESS;
}

void UnHookServices()
{
_asm cli
(NTCREATEPROCESS)(SYSTEMSERVICE(ZwCreateProcess))=OldNtCreateProcess;
_asm sti
return;
}
cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-09-03 19:27
做过hook ZwCreateProcess的朋友帮帮我吧。
linwn
驱动牛犊
驱动牛犊
  • 注册日期2002-11-10
  • 最后登录2015-01-27
  • 粉丝0
  • 关注0
  • 积分97分
  • 威望30点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-09-10 14:47
Parsing the NTDLLdll, you will get the function's address

calculate the RVA then just hook . by this way , you can

ignore others boring problem like function define.


linwn
驱动牛犊
驱动牛犊
  • 注册日期2002-11-10
  • 最后登录2015-01-27
  • 粉丝0
  • 关注0
  • 积分97分
  • 威望30点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-09-10 14:56
Parsing the NTDLLdll, you will get the function's address

calculate the RVA then just hook . by this way , you can

ignore others boring problem like function define.


 



sorry , it's from user mode hook ,

in the kernel mode , the function's address in

the system service dispatch table, to find it then hook.

good luck.




wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
6楼#
发布于:2004-09-10 16:15
可能需要应用程序的配合,在RING3中获得NTDLL中该服务的ID,传到RING0 hook
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
walkonthesky
驱动中牛
驱动中牛
  • 注册日期2003-11-26
  • 最后登录2012-11-06
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-10-11 09:33
一代新人换旧人,WOWOCOCK还在
应该可以算驱网常青树啊
[img]http://www.driverdevelop.com/forum/upload/walkonthesky/2004-07-08_2004-07-07_b847.gif[/img]
punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-10-11 13:13
可能需要应用程序的配合,在RING3中获得NTDLL中该服务的ID,传到RING0 hook

怎么得到该服务的ID呢?
不停学习
cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-10-12 08:35
在RING3中获得NTDLL中该服务的ID,对ntdll.dll文件进行分析来得到相应服务的ID。
punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-10-12 09:34
在RING3中获得NTDLL中该服务的ID,对ntdll.dll文件进行分析来得到相应服务的ID。

很多文章都提到内核用下面这种方式得到,但是不知道是怎么回事,
哪位能指点点么?
(KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)ZwXXX+1)]);
不停学习
cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-10-12 19:12
这是内核中定义好了的数据结构,直接用就可以了。没有原因啊!
punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-10-13 09:17
这是内核中定义好了的数据结构,直接用就可以了。没有原因啊!

那么这个 “ *(PULONG)((PUCHAR)ZwXXX+1)”是为什么啊? :)
不停学习
cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-10-13 16:47
KeServiceDescriptorTable.ServiceTableBase[]);需要的是一个ID号。*(PULONG)((PUCHAR)ZwXXX+1)中的ZwXXX是作为地址参数传入,(PUCHAR)ZwXXX+1指的是地址加1。反汇编ntdll.dll文件后你可以看到函数的调用基本上都是mov eax, 000000XX这种形式,(PUCHAR)ZwXXX+1就是000000XX的地址,那么*(PULONG)((PUCHAR)ZwXXX+1)就得出了ID号。
punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-10-14 10:30
KeServiceDescriptorTable.ServiceTableBase[]);需要的是一个ID号。*(PULONG)((PUCHAR)ZwXXX+1)中的ZwXXX是作为地址参数传入,(PUCHAR)ZwXXX+1指的是地址加1。反汇编ntdll.dll文件后你可以看到函数的调用基本上都是mov eax, 000000XX这种形式,(PUCHAR)ZwXXX+1就是000000XX的地址,那么*(PULONG)((PUCHAR)ZwXXX+1)就得出了ID号。


3x
不停学习
游客

返回顶部