志志志志志志 发表于 2014-5-28 10:33:58

【讨论】关于R3下的api hook的【求助】

要求是这样的:编写一个loader加载器,加载各种程序安装包的时候(PC机 XP 无保护),把系统默认的安装路径变为D:\MyloaderInstall。不用loader的时候就不作任何改动。

我是打算这样设计的:
OPENFILENAME结构体 打开指定安装包A.exe 获取到A.exe绝对路径 和 文件名 等 相关信息
CreateProcess以挂起方式(CREATE_SUSPENDED)打开A.exe

因为安装包默认路径是读取注册表HKLM\Sofeware\Microsoft\Window\CurrentVersion下的ProgramFilesDir项的值。所以要hook RegQueryValueExW这个api

然后我把hook RegQueryValueExW的代码写在一个dll 然后loadInject()以远线程方式注入A.exe

最后ResumeThread恢复挂起的进程A.exe。

到这里有前辈指点错误吗?
=========================================
首先我是选择inline hook 这种方式处理RegQueryValueExW,但处理失败,用XueTr观察发现CreateProcess以挂起方式(CREATE_SUSPENDED)打开A.exe只有ntdll.dll。

问题1:是因为只有ntdll.dll 没有kernel32.dll 和 advapi32.dll 所以我找不到RegQueryValueExW?

问题2:再之前没用XueTr发现只加载了ntdll.dll的时候,我处理RegQueryValueExW发现时能跳转进入MyRegQueryValueExW的,但参数各种混乱~

问题3:以题目要求,还适不适合用inline hook 处理RegQueryValueExW?IAT hook?SSDT hook?

以上,真心跪求指点!

向往青莲 发表于 2014-5-28 19:04:27

直接打开运行A.EXE。。。然后运行。。注意。。不挂起。。
然后直接HOOK GetSystemDirectory或者你说的的那个API(我没弄过)。。。。很简单啊。。。。
不需要你弄得那么复杂。。
ReadPeocessMemory
WriteProcessMemory
这两个API就解决。。。

志志志志志志 发表于 2014-5-29 11:22:55

向往青莲 发表于 2014-5-28 19:04 static/image/common/back.gif
直接打开运行A.EXE。。。然后运行。。注意。。不挂起。。
然后直接HOOK GetSystemDirectory或者你说的的那 ...

GetSystemDirectory这个是系统文件路径,hook这个逮不到安装包的默认路径

还有,
我的loader是指定某   “程序安装包”   就是说你用QQ也得下个QQInstall下来吧?
然后安装的时候,默认路径是C:\Program Files ,这个是QQIstall.exe进程初始化的是要读注册表获取的,
你直接打开,还怎么修改?

向往青莲 发表于 2014-5-29 12:15:33

志志志志志志 发表于 2014-5-29 11:22 static/image/common/back.gif
GetSystemDirectory这个是系统文件路径,hook这个逮不到安装包的默认路径

还有,


我说的是原理。。。不是叫你用GetSystemDirectory这个。。。
hook。。。内存。。。
修改。。
懂?。。。内存hook。。。。
她要读取注册表。。那你就再他读取之前修改。。
就这样。。你慢慢研究嘛。。。。

志志志志志志 发表于 2014-5-31 17:23:00

向往青莲 发表于 2014-5-29 12:15 static/image/common/back.gif
我说的是原理。。。不是叫你用GetSystemDirectory这个。。。
hook。。。内存。。。
修改。。


原理. . . 呵呵~
你先按你的想法试试吧。
我只能说 不挂起 再hook没效果。
我只能挂起后等待目标函数的dll加载完才能进行内存hook
方法已经找到了,谢谢你的原理。
页: [1]
查看完整版本: 【讨论】关于R3下的api hook的【求助】