请教关于API HOOK的问题

mel 2010-06-09 11:44:04
我在挂钩IE的RegQueryValueEx,截获其读取注册表的数据。发现在Win7中很多读取的操作都截获不了,搞不清楚在Win7下是怎么读取注册表的。

比如截获IE对AppData的读取,在XP中挂上RegQueryValueEx,就能拿到。 可是在Win7中就不行,同样是IE8。用ProcessMonitor监控下来,IE有对AppData注册表项的读取,但是只是笼统的说操作是RegQueryValue,没有指明是哪个API。试过RegQueryValueExW,RegQueryValueExA,RegQueryValueW,RegQueryValueA,SHRegGetValueW和A,RegQueryMultiValueW和A等,能想到的几个都试过。 用反汇编看,只用到RegQueryValueExW这个API。用API Monitor监控,确实没有用RegQueryValueExW读取AppData,可是事实上IE有用到了这个AppData注册表项的内容,手工改注册表有反应。

非常奇怪,Win7下跟XP有什么区别?应该可以排除权限的问题,去掉了UAC,而且也确实hook到一部分注册表的读取操作了,就是少了一些比如AppData这种的读取操作。 不知道是怎么绕过去的?
...全文
423 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
hackfreer 2012-04-10
  • 打赏
  • 举报
回复
Hook不光Detours所使用的Inline Hook一种~Ring0级下的Hook测试下都~
zhourui1229 2011-09-27
  • 打赏
  • 举报
回复
楼主你好,我也碰到了类似问题无法解决,在win7下挂钩IE的RegQueryValueEx(Advapi32.dll中)失败,发现是win7下IE保护模式的影响,导致无法修改Advapi32.dll中的函数跳转地址(采用detours拦截api);可是查了一些资料,还是无法找到解决办法,故麻烦你能够提供一些指导,万分感激!

PS:
1. 采用消息钩子注入模块,用微软提供的detours去改写函数跳转地址;
2. 钩子模块可以注入到所有的IE进程,但是只有IE主进程中的函数地址被替换掉,后面生成的子进程中却无法替换,怀疑是权限原因,因为将IE安全设置里的保护模式勾选取消,即可成功替换所有IE进程中的advapi32.dll里的RegQueryValueEx函数地址;
3. 另外还有一个疑问,可以hook住其他模块(dll),包括knernel32.dll,但是就是无法hook住advapi32.dll,这一点暂时没有头绪;需求必须是替换advapi32.dll中的函数,并且不能提高进程启动权限,希望楼主能够提供一些指导,万分感激!
zhourui1229 2011-09-26
  • 打赏
  • 举报
回复
我也碰到了类似问题,请问楼主如何解决的啊?
trobust 2010-08-07
  • 打赏
  • 举报
回复
我已经解决了。Vista、WIn7和之前的操作系统是不一样的
mel 2010-08-06
  • 打赏
  • 举报
回复
感谢大家的回复,通过走底层的函数,成功hook到了。散分
cclk-1024 2010-06-26
  • 打赏
  • 举报
回复
用XueTr.exe看一下你的钩子是不是成功了,
这样就可以知道是钩子的问题还是没有调用函数的问题。。
sunlin7 2010-06-11
  • 打赏
  • 举报
回复
使用winDBG断了一下RegQueryValueExW,可以的。

估计是楼主的hook办法不对。

楼主在win7 32位中,使用detours的注入dll办法hook试试。
mr_moran 2010-06-10
  • 打赏
  • 举报
回复
路过,不知道能不能解决你的问题。

请注意,Win7下,IE8默认开启了保护模式(啥时保护模式,自己GOOGLE下吧)

实际上IE是一个工作进程,一个UI进程。(注意,是进程)
工作进程的权限极低,低的连消息都无法发出。。

以上因素,你需要考虑一下,别的就不多说了。

我也刚解决了类似于IE8下边的问题,呵呵。
yong_f 2010-06-10
  • 打赏
  • 举报
回复
没用过
yxwsbobo 2010-06-10
  • 打赏
  • 举报
回复
好像 Win7下IE8中为了安全,会使钩子失效,我只是听某牛人说过,自己未测试过
zyq1600356618 2010-06-10
  • 打赏
  • 举报
回复
RegQueryValueExA,RegQueryValueExW ???
这是点常识吧 ?
UNICODE 内核系统的 *A 系列API 在内部都是把字符串从ASCII转换为UNICODE后直接调用 *W 系列API的(绝大部分, 只有小部分怪胎...)
所以只用挂接 *W 系列函数就可以了

至于 *Ex 函数就不同了, 有的是不带Ex后缀的填充参数后直接调用带Ex后缀的, 有些也不同, 要看具体的函数了
cnzdgs 2010-06-10
  • 打赏
  • 举报
回复
还有这几个:RegGetValueW、RegGetValueA、RegEnumValueW、RegEnumValueA。
zhanshen2891 2010-06-10
  • 打赏
  • 举报
回复
钩子是你自己写的还是用库帮你完成的?

想知道钩子是不是有效,既然你会看exe那你就直接调试一下看看挂钩的地方是是不是挂上了?还是被恢复了
magic7004 2010-06-10
  • 打赏
  • 举报
回复
IE8楼主就不要想了,你是肯定玩不过Microsoft的
tufaqing 2010-06-09
  • 打赏
  • 举报
回复
RegQueryValueEx有可能是两个函数RegQueryValueExA,RegQueryValueExW
这两个都要hook,有的程序用了第一个,有的是第二个。
mel 2010-06-09
  • 打赏
  • 举报
回复
RegQueryValueExA,RegQueryValueExW这两个都试过,还是不行。 事实上,在XP中的IE8中,已经确认是用RegQueryValueExW,不太可能在Win7中再改变。也反汇编过exe,只有调用RegQueryValueExW。

win7下能hook到一部分,这是奇怪的地方
King030609 2010-06-09
  • 打赏
  • 举报
回复
帮顶下吧

15,471

社区成员

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

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