您的位置:程序门 -> vc/mfc -> 进程/线程/dll



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


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


设置api hook 的时候,修改内存会导致崩溃?[已结贴,结贴人:vincentcsdn]
发表于:2007-12-20 15:13:19 楼主
我使用inline   hook做api   hooking,修改api入口前5   个地址跳转到我的函数

其他api都不会有问题,唯独openeventw   和   ntopenevent会有问题

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

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

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

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

请教一下是什么原因?
发表于:2007-12-20 15:17:351楼 得分:11
up
发表于:2007-12-20 16:58:222楼 得分:11
会不会是权限问题?你的进程是什么权限?
帮你顶
发表于:2007-12-20 17:08:093楼 得分:11
你从内核挂,挂之前将irql提至较高级,以防其中有例程打断修改过程,试试看。
发表于:2007-12-20 17:26:404楼 得分:0
权限不是问题,我试过把那个地方内存读出来,再写回去,没问题的。
我不希望进入内核做,希望能在普通用户下搞定。
发表于:2007-12-20 18:18:195楼 得分:11
不知道楼主是什么系统?列一下win2k   sp4的openeventw头部:
assembly code
55 push ebp 8b ec mov ebp, esp 83 ec 24 sub esp, 24h

这里如果你仍然使用5个字节做inline的话,那死掉应该是没错的。
发表于:2007-12-20 19:20:486楼 得分:11
内存访问权限没有设吧,或者是有cpu保护。关掉cpu保护试试看。
发表于:2007-12-20 21:23:127楼 得分:0
不知道楼主是什么系统?列一下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的,应该是没有影响吧?
我确认一下先。


最令我不解的是为什么调试器挂上的进程就没有这个问题,哪位能讲讲调试器究竟做了些什么小动作?
发表于:2007-12-20 23:16:408楼 得分:11
如果修改iat仍然崩溃那只能说明你的hook代码有问题,   有访问异常或者堆栈溢出
发表于:2007-12-21 08:08:409楼 得分:12
如果你在改的时候被打断了,这是肯定会崩溃。而且ntopenevent还是比较常用的native   api,

这个都很难说。
发表于:2007-12-21 09:21:2410楼 得分:11
我hook   msn   send   api   结果也过也挂了。
发表于:2007-12-21 09:24:5411楼 得分:11
好像禁止hook这个函数
发表于:2007-12-28 15:22:5112楼 得分:0
问题解决了。
是debugoutputstring的问题
我在dummy   openevent里输出了调试信息,而debugoutputstring内部也调用了openevent,   形成了无限递归,堆栈溢出。


快速检索

最新资讯
热门点击