2014年7月27日 星期日

继续记录Hook遇到的坑:兼容模式

Windows的兼容模式在apphelp.dll、AcLayers.dll、AcGernel.dll Hook了一堆一堆的函数。win7采用的方法是iathook。
冲突点如下:
由于我们的实现机制,兼容模式的iathook优先于我,先将CreateFileA、CreateFileW、GetProcAddress等,覆盖指针为iatCreateFileA、iatCreateFileW、iatGetProcAddress(我忘了实际的符号叫啥了,这些名字是我瞎起的,用于区分hook前后)等。
于是我本来通过GetProcAddress获取CreateFileW的地址然后inlinehook的流程由于iat被修改,变成了通过iatGetProcAddress获取到iatCreateFileW的地址然后inlinehook。
 如此一来CreateFileA的调用路径就变成了这样:
CreateFileA == iatCreateFileA  ->CreateFileA->CreateFileW
走不到我的hook里面去了。
相比浏览器那恐怖的hook环境,这坑真的很好填,我的方法是通过LdrGetProcedureAddress获取到真实的CreateFileW地址然后hook,毕竟不是写攻防代码,兼容性优先了。
说到浏览器了,要不哪天有时间了翻翻某个亏本了的工程代码,总结下浏览器(IE、Chrome、Firefox)hook里遇到的坑,和这几篇博文合并成一篇Hook遇坑大总结?

沒有留言:

張貼留言