Re: 请教下Windows7下的AppInit_DLLs和APIHOOK

Windows内核调试

请教下Windows7下的AppInit_DLLs和APIHOOK


jlflyfox 2012-08-03, 16:31 下午

以前从来没有使用过windows7,现在突然发现和xp差别太大了。

我有个应用,需要拦截指定进程某个api调用

我首先在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT \CurrentVersion\Windows

设置AppInit_DLLs为c:\test\Test.dll,并且设置了LoadAppInit_DLLs为1

然后在Test.dll里面首先本进程名字是不是目标进程,如果不是,就返回,如果是,就LoadLibraryA("ApiHook.dll")

ApiHook.dll进行拦截目标函数。

现在的问题是,我发现在windows7下似乎还是不行。

ApiHook已经被DLL_PROCESS_ATTACH了,而且也替换了api,我直接GetProcAddress后拿过来修改的,没有去修改IATEntry。

但后来进程真正调用这个api的时候,发现并没有被hook到,而且我的Test.dll和ApiHook.dll似乎都被FreeLibrary了,我用vmmap完全看不到了这两个dll了

现在还不想用detours,毕竟可能要用到商业用途,也不想完全把目标PE给暴力修改。

请教下各位,谢谢阿!

Re: 请教下Windows7下的AppInit_DLLs和APIHOOK


格蠹老雷 2012-08-05, 10:17 上午

Win7对系统DLL做了重构,举例来说,kernel32中的大部分代码都转移到了kernelbase中,kernel32中只保留一个长跳转。具体要看你hook的是哪个API了...

Re: 请教下Windows7下的AppInit_DLLs和APIHOOK


jlflyfox 2012-08-08, 11:25 上午

谢谢张老师,虽然我的问题不是这样,不过你的提示,让我bp api的时候少犯错误。

我最初bp CreateFileA,发现始终拦截不到,开始没有注意,后来才发现到是被windbg弄成了kernelbase上去了。

我的问题,也有些眉目了,大致可能与windows7没有关系。

大致如此,不晓得哪个时候开始,微软也弄起了双进程模式,比如ie8,比如mstsc。

我在xp下安装的是老版本的,而windows7下安装的新版本,所以最初以为是windows7的问题。

我这里想拦截的就是mstsc,我的AppInit_DLLs装载第一个dll的时候是看参数有没有rdp文件,如果有才装载我的apihook。

而现在mstsc改成了双进程模式,第一个进程有参数rdp文件,而它发送消息给svchost,后者再启动一个mstsc,没有带参数rdp,所以我就实质上没有拦截到。

不晓得微软这样做,是否为了安全考虑,不过的确不好调试。

我用windbg启动mstsc,但它却不是真正干活的mstsc,而第2个进程windbg去attach的时候却可能已经跑过了我想拦截的函数了。

只有通过AppInit_DLLs,在这个dll里面sleep,或者人为int 3来拦截,这样的确麻烦些。

Re: 请教下Windows7下的AppInit_DLLs和APIHOOK


格蠹老雷 2012-08-08, 11:44 上午

"我用windbg启动mstsc,但它却不是真正干活的mstsc,而第2个进程windbg去attach的时候却可能已经跑过了我想拦截的函数了。"

对于这个问题,可以使用Image File Execute Options “创建进程时自动启动调试器”...

Re: 请教下Windows7下的AppInit_DLLs和APIHOOK


jlflyfox 2012-08-08, 14:05 下午

啊,是的哈,我把这个给忘记了,谢谢哈!

Powered by Community Server Powered by CnForums.Net