slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
阅读:1977回复:15

高手请留步,Hook系统服务出现怪事!

楼主#
更多 发布于:2002-12-08 12:10
我发现只要Hook的是NTDDK.H里边公开的函数,比如ZwCreateFile,则一切正常。但是如果Hook的是未公开的函数,比如ZwQuerySystemInformation、ZwDeleteValueKey(我只测试这两个函数),则在Exe中调用StartService()启动服务时,这个函数自己弹出一个对话框,提示“指出在 DLL 中找不到指定的过程地址。”,在sys中检查了一下原程序,发现是下面这行语句出问题:

RealZwDeleteValueKey = (ZWDELETEVALUEKEY)(SYSCALL(ZwDeleteValueKey));

注释掉这行语句,就正常了(当然也不能Hook了:()。真搞不懂!!!

我在sys中这样声明:

extern \"C\"
NTSYSAPI
NTSTATUS
NTAPI
ZwDeleteValueKey(
  IN HANDLE,
  IN PUNICODE_STRING
  );

typedef NTSTATUS (*ZWDELETEVALUEKEY)( IN HANDLE, IN PUNICODE_STRING );

ZWDELETEVALUEKEY RealZwDeleteValueKey;

NTSTATUS
HookZwDeleteValueKey(
  IN HANDLE,
  IN PUNICODE_STRING
  );

奇怪地是,我看别的程序也是这样做,就没有问题,怎么我的程序就有问题???请高手赐教!!!

注明:我的驱动程序文件采用CPP形式,直接使用VC生成SYS文件(没有makefile和source文件)。

最新喜欢:

threebagsthreeb...
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-08 18:02
自己解决了 :D :D :D

我使用Depends.exe查看了我的SYS文件和别的可以正常运行的SYS的差别,发现在我的SYS文件中,ZwDeleteValueKey这些函数是从NTDLL.DLL里边引入的,而在那些正常工作的SYS里边,则是从NIOSKRNL.EXE里边引入的。更改项目设置Object/library modules,把NTDLL.LIB删掉,重新编译,成功了 :D :D :D

低级错误啊,白白浪费了一个早上的时间 :mad: :mad: :mad:
danielxu22
驱动中牛
驱动中牛
  • 注册日期2002-11-22
  • 最后登录2014-03-24
  • 粉丝0
  • 关注1
  • 积分2分
  • 威望18点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-10 11:41
为你鼓掌!
今天我发现我家的金鱼淹死了,:(
favorit
驱动牛犊
驱动牛犊
  • 注册日期2002-01-21
  • 最后登录2002-12-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-10 22:22
哈哈,FANS的问题总是自己解决! :D
我一睁开眼,世界就变了样
favorit
驱动牛犊
驱动牛犊
  • 注册日期2002-01-21
  • 最后登录2002-12-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-10 22:23
问一下FANS,怎么换那个头像?偶那个太傻了:(
我一睁开眼,世界就变了样
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-12-11 00:23
单击最上面的“修改资料”,更改那个头像地址为你的磁盘上的一幅G图像文件就OK了。 :D
favorit
驱动牛犊
驱动牛犊
  • 注册日期2002-01-21
  • 最后登录2002-12-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-12-12 16:27
嘻嘻,看看头像改了没 :D
我一睁开眼,世界就变了样
favorit
驱动牛犊
驱动牛犊
  • 注册日期2002-01-21
  • 最后登录2002-12-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-12-12 16:28
我倒,头像怎么没有了??? :( :( :(
我一睁开眼,世界就变了样
favorit
驱动牛犊
驱动牛犊
  • 注册日期2002-01-21
  • 最后登录2002-12-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-12-12 16:38
不好意思,再借你的帖子试一把
我一睁开眼,世界就变了样
favorit
驱动牛犊
驱动牛犊
  • 注册日期2002-01-21
  • 最后登录2002-12-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-12-12 16:57
试了X次,失败 :mad:  :mad: :(
我一睁开眼,世界就变了样
hnsyz
驱动牛犊
驱动牛犊
  • 注册日期2001-12-31
  • 最后登录2010-04-20
  • 粉丝1
  • 关注0
  • 积分108分
  • 威望259点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-12-12 20:02
你不会真的把你自己硬盘上的图片连接上的?!!?
你的地址是固定的?
学习,交流
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-12-12 20:48
奇怪,我原来的确是使用我硬盘上的文件,就是下面这个文件。

F:\\Inprise\\CBuilder5\\Multimedia\\Bitmap\\sun.gif

不过我刚才看了一下个人资料,那幅图像地址变成了

./avatar/BCB_FANS_SUN.GIF

估计是那幅图像被拷贝到服务器上了。

=============

试了X次,失败  

更改了图像地址之后,有没有“编辑资料”?
danielxu22
驱动中牛
驱动中牛
  • 注册日期2002-11-22
  • 最后登录2014-03-24
  • 粉丝0
  • 关注1
  • 积分2分
  • 威望18点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-12-13 09:14
好象我的也不可以,也是n次
今天我发现我家的金鱼淹死了,:(
xzjfile
禁止发言
禁止发言
  • 注册日期2001-12-14
  • 最后登录2018-07-12
  • 粉丝0
  • 关注0
  • 积分6970分
  • 威望50721点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
  • 社区居民
13楼#
发布于:2003-07-14 23:52
用户被禁言,该主题自动屏蔽!
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
14楼#
发布于:2003-07-15 12:59
都是编译器不好,我用自己汇编写的GETPROCADDRESS,可以获得所有的未公开的函数地址,然后直接调用即可.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
15楼#
发布于:2003-07-15 13:02
.386
.model flat, stdcall
option casemap:none
include \\masm32\\include\\windows.inc
include \\masm32\\include\\kernel32.inc
include \\masm32\\include\\user32.inc
includelib \\masm32\\lib\\user32.lib
includelib \\masm32\\lib\\kernel32.lib

public _MyGetProcAddress
_MyGetProcAddress proto :dword,:dword



HMODULE typedef dword
LPCSTR typedef dword



BUFFERSIZE=256
.data
knl32 dd 0


.code

_MyGetProcAddress proc hModule:HMODULE,lpProcName:LPCSTR
 local ProcNameLen:dword
  push ebx
  push esi
  push edi
  mov esi,lpProcName
  cmp esi,10000h
  ja  @f
  mov ecx,lpProcName   ;lpProcName为函数序号
  mov esi,hModule  
  mov edi,dword ptr[esi+3ch]
  add edi,esi
  mov edi,[edi+78h]
  add edi,esi
  
  jmp Ordinals
@@:  
  xor ecx,ecx        ;lpProcName为函数指针
GetlpProcNameLength:  
  cmp byte ptr[esi],0
  jz @f
  inc cl
  inc esi
  jmp GetlpProcNameLength
  @@:              ;cl=ProcName Length
  mov ProcNameLen,ecx
  mov edi,hModule  
  mov esi,dword ptr[edi+3ch]
  add esi,edi ;esi->PE HEADER
  mov edi,[esi+78h]
  add edi,hModule
assume edi:ptr IMAGE_EXPORT_DIRECTORY
GetExportNameList:  
  mov   ebx,[edi].AddressOfNames ;//得到输出函数名表
  add   ebx,hModule     ;ebx->AddressOfNames(函数名字的指针地址).
  xor   eax,eax      ;//函数序号计数
  mov   edx,hModule     ;//暂存模块句柄;edx->ntoskrnl
  push edi   ;保存EDI

LoopFindApiStr:
  mov ecx,ProcNameLen
  add   ebx,04      
  inc   eax          ;//增加函数计数
  mov   edi,dword ptr[ebx]
  add   edi,edx      ;//得到一个Api函数名字符串.edi->函数名
  StrGetProcAddress:  
  mov esi,lpProcName      ;//得到Api名字字符串
  cmpsd;比较前4个字符是否相等  
  jnz   short LoopFindApiStr  ;eax=函数名的INDEX  
  
  sub   cl,4        ;//比较剩余的GetProcAddress串
  cld
 Goon:
  cmpsb
  jnz   short LoopFindApiStr  ;eax=函数名的INDEX
  loop Goon
 
  pop edi ;恢复EDI
  
  mov   esi,edx
  mov ebx,[edi].AddressOfNameOrdinals
  add ebx,esi     ;//取函数序号地址列表,ebx->AddresssOfNameOrdinals
  movzx ecx,word ptr [ebx+eax*2]
 Ordinals:
  mov   ebx,[edi].AddressOfFunctions
  add   ebx,esi      ;//得到ntoskrnl函数地址列表
  mov   ebx,dword ptr[ebx+ecx*4]
  add   ebx,esi      ;//计算函数地址
  mov   eax,ebx      ;eax=API函数地址,esi=Kernel32.dll hModule
  pop edi
  pop esi
  pop ebx
  ret
_MyGetProcAddress endp

end
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
游客

返回顶部