所以目前的情况是这样的:
.exe与dll1的直接依赖关系(在IAT中)
dll1执行LoadLibrary dll2
我想从dll2挂钩(并覆盖)exe的winapi。
我尝试连接IAT并使用minhook。但问题是,我实际上都挂了dll1的api,而不是exe
如果我挂钩像MessageBox这样的东西,如果我从dll1调用它就可以了,如果我从exe中调用它它不会(它调用原始的MessageBox而不是我的钩子)。
答案 0 :(得分:1)
你有没有试过微软的弯路或轻松勾手?我试过了两个,他们运作良好。 Easyhook:https://easyhook.github.io/
答案 1 :(得分:0)
我猜你的DLL的编译器正在创建存根函数(转发到实际函数),挂钩工具挂钩存根而不是真正的函数。
因此,当EXE调用该函数时,它显然不会使用您的存根,并调用真正的,未挂钩的函数。
简单的解决方案:使用GetProcAddress获取指向实际函数的指针,并将其挂钩。