目前在用detours做hook,遇到两个问题请教。
环境如下:
我自己开发的主程序:A,我自己开发的用来注入hook的dll:B,被hook的程序:C问题1:
B里hook的api很多,我自己写的函数也很多,所以会遇到我自己写的函数里会调用那些已经被hook的api。假设我hook了CreateFile,我自己有个函数叫做WriteLog,那么在WriteLog里就会调用CreateFile,但是我并不希望在WriteLog里调用被Hook的CreateFile,我希望调用hook前的CreateFile;换个说法就是,在这个dll里的自定义函数调用的API都不是hook后的,这该怎么实现?我知道可以声明hook前函数的指针,然后调用那个指针就行。但是这有个问题:假如有两个API m和n,在m里会调用n,在B里我都对m和n都做了hook,那么如果我在writelog里调用m,我call被hook前的m,但是因为m会调用n,由于我没法让m强制调用hook前的n,所以最后还是会调用到hook后的n,但是我想调用的是hook前的n,这又该怎么解决?
问题2:
回调问题。A把B注入到C里进行hook,B在C的进程空间里。B对C的hook函数,会有一些信息记录一下,比如简单地记录调用参数等等,然后我希望把这些信息传给A,让A打印出来。这该怎么实现?我知道有个笨一点的方法是查找窗口,但是A最小化之后这个方法就失效了。所以,只能out以上两个,请帮忙。顺祝国庆假期快乐~