我在挂钩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这种的读取操作。 不知道是怎么绕过去的?
这两个都要hook,有的程序用了第一个,有的是第二个。
工作进程的权限极低,低的连消息都无法发出。。以上因素,你需要考虑一下,别的就不多说了。我也刚解决了类似于IE8下边的问题,呵呵。
这是点常识吧 ?
UNICODE 内核系统的 *A 系列API 在内部都是把字符串从ASCII转换为UNICODE后直接调用 *W 系列API的(绝大部分, 只有小部分怪胎...)
所以只用挂接 *W 系列函数就可以了至于 *Ex 函数就不同了, 有的是不带Ex后缀的填充参数后直接调用带Ex后缀的, 有些也不同, 要看具体的函数了
这样就可以知道是钩子的问题还是没有调用函数的问题。。
1. 采用消息钩子注入模块,用微软提供的detours去改写函数跳转地址;
2. 钩子模块可以注入到所有的IE进程,但是只有IE主进程中的函数地址被替换掉,后面生成的子进程中却无法替换,怀疑是权限原因,因为将IE安全设置里的保护模式勾选取消,即可成功替换所有IE进程中的advapi32.dll里的RegQueryValueEx函数地址;
3. 另外还有一个疑问,可以hook住其他模块(dll),包括knernel32.dll,但是就是无法hook住advapi32.dll,这一点暂时没有头绪;需求必须是替换advapi32.dll中的函数,并且不能提高进程启动权限,希望楼主能够提供一些指导,万分感激!