我在挂钩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这种的读取操作。 不知道是怎么绕过去的?

解决方案 »

  1.   

    RegQueryValueEx有可能是两个函数RegQueryValueExA,RegQueryValueExW
    这两个都要hook,有的程序用了第一个,有的是第二个。
      

  2.   

    RegQueryValueExA,RegQueryValueExW这两个都试过,还是不行。 事实上,在XP中的IE8中,已经确认是用RegQueryValueExW,不太可能在Win7中再改变。也反汇编过exe,只有调用RegQueryValueExW。win7下能hook到一部分,这是奇怪的地方
      

  3.   

    还有这几个:RegGetValueW、RegGetValueA、RegEnumValueW、RegEnumValueA。
      

  4.   

    好像 Win7下IE8中为了安全,会使钩子失效,我只是听某牛人说过,自己未测试过
      

  5.   

    路过,不知道能不能解决你的问题。请注意,Win7下,IE8默认开启了保护模式(啥时保护模式,自己GOOGLE下吧)实际上IE是一个工作进程,一个UI进程。(注意,是进程)
    工作进程的权限极低,低的连消息都无法发出。。以上因素,你需要考虑一下,别的就不多说了。我也刚解决了类似于IE8下边的问题,呵呵。
      

  6.   

    IE8楼主就不要想了,你是肯定玩不过Microsoft的
      

  7.   

    钩子是你自己写的还是用库帮你完成的?想知道钩子是不是有效,既然你会看exe那你就直接调试一下看看挂钩的地方是是不是挂上了?还是被恢复了
      

  8.   

    RegQueryValueExA,RegQueryValueExW  ???
    这是点常识吧 ?
    UNICODE 内核系统的 *A 系列API 在内部都是把字符串从ASCII转换为UNICODE后直接调用 *W 系列API的(绝大部分, 只有小部分怪胎...)
    所以只用挂接 *W 系列函数就可以了至于 *Ex 函数就不同了, 有的是不带Ex后缀的填充参数后直接调用带Ex后缀的, 有些也不同, 要看具体的函数了
      

  9.   

    使用winDBG断了一下RegQueryValueExW,可以的。估计是楼主的hook办法不对。楼主在win7 32位中,使用detours的注入dll办法hook试试。
      

  10.   

    用XueTr.exe看一下你的钩子是不是成功了,
    这样就可以知道是钩子的问题还是没有调用函数的问题。。
      

  11.   

    感谢大家的回复,通过走底层的函数,成功hook到了。散分
      

  12.   

    我已经解决了。Vista、WIn7和之前的操作系统是不一样的
      

  13.   

    楼主你好,我也碰到了类似问题无法解决,在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中的函数,并且不能提高进程启动权限,希望楼主能够提供一些指导,万分感激!
      

  14.   

    Hook不光Detours所使用的Inline Hook一种~Ring0级下的Hook测试下都~