设置api hook 的时候,修改内存会导致崩溃?

vincentcsdn 2007-12-20 03:13:19
我使用inline hook做api hooking,修改api入口前5 个地址跳转到我的函数

其他api都不会有问题,唯独OpenEventW 和 NtOpenEvent会有问题

只要修改这两个api的前5个字节就会崩溃掉,也没有异常抛出。

我也查过进程内应该是没有其他线程正在调用这个api

最奇怪的是,如果用调试器挂上目标进程,就可以通过。

另外,如果使用改iat的方法可以hook OpenEventW, 但是NtOpenEvent同样会崩溃。

请教一下是什么原因?
...全文
242 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
vincentcsdn 2007-12-28
  • 打赏
  • 举报
回复
问题解决了。
是DebugOutputString的问题
我在dummy OpenEvent里输出了调试信息,而DebugOutputString内部也调用了OpenEvent, 形成了无限递归,堆栈溢出。
awperpvip 2007-12-21
  • 打赏
  • 举报
回复
好像禁止hook这个函数
stivenjia 2007-12-21
  • 打赏
  • 举报
回复
我hook MSN send API 结果也过也挂了。
大熊猫侯佩 2007-12-21
  • 打赏
  • 举报
回复
如果你在改的时候被打断了,这是肯定会崩溃。而且NtOpenEvent还是比较常用的native API,

这个都很难说。
阿呆_ 2007-12-20
  • 打赏
  • 举报
回复
如果修改IAT仍然崩溃那只能说明你的hook代码有问题, 有访问异常或者堆栈溢出
vincentcsdn 2007-12-20
  • 打赏
  • 举报
回复
不知道楼主是什么系统?列一下Win2k sp4的OpenEventW头部:

Assembly code55 push ebp
8B EC mov ebp, esp
83 EC 24 sub esp, 24h

这里如果你仍然使用5个字节做inline的话,那死掉应该是没错的。


不是这个问题,我都是计算过每个api入口应该修改的字节数的,并保留一个副本用作重入的。其他api都是正常的。
而且xp下NtOpenEvent第一条指令就刚刚好是5个字节的。

内存访问权限没有设吧,或者是有CPU保护。关掉CPU保护试试看。
内存我是设置为EXECUTE_WRITECOPY 的,我用来测试的cpu是没有硬件dep的,应该是没有影响吧?
我确认一下先。


最令我不解的是为什么调试器挂上的进程就没有这个问题,哪位能讲讲调试器究竟做了些什么小动作?
superarhow 2007-12-20
  • 打赏
  • 举报
回复
内存访问权限没有设吧,或者是有CPU保护。关掉CPU保护试试看。
李马 2007-12-20
  • 打赏
  • 举报
回复
不知道楼主是什么系统?列一下Win2k sp4的OpenEventW头部:
55        push    ebp
8B EC mov ebp, esp
83 EC 24 sub esp, 24h

这里如果你仍然使用5个字节做inline的话,那死掉应该是没错的。
vincentcsdn 2007-12-20
  • 打赏
  • 举报
回复
权限不是问题,我试过把那个地方内存读出来,再写回去,没问题的。
我不希望进入内核做,希望能在普通用户下搞定。
大熊猫侯佩 2007-12-20
  • 打赏
  • 举报
回复
你从内核挂,挂之前将IRQL提至较高级,以防其中有例程打断修改过程,试试看。
debehe 2007-12-20
  • 打赏
  • 举报
回复
会不会是权限问题?你的进程是什么权限?
帮你顶
jameshooo 2007-12-20
  • 打赏
  • 举报
回复
up

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧