【发布时间】:2020-03-18 18:22:40
【问题描述】:
我正在按照创建蹦床的过程来挂钩一个 dll 函数(在我的例子中是来自 d3d9.dll 的 Direct3DCreate9),如下所述:https://www.malwaretech.com/2015/01/inline-hooking-for-programmers-part-1.html 和 https://www.malwaretech.com/2015/01/inline-hooking-for-programmers-part-2.html
我的代码略有不同,因为我使用反汇编程序而不是使用 hde32_disasm 函数手动计算偏移字节。
一切似乎都正常,受害者进程调用我注入的 dll 包装函数,新函数做了一些事情,然后调用原始函数(Direct3DCreate9),一旦原始函数返回,包装器应该在返回之前调用一些其他的东西到受害者进程。
不幸的是,当从钩子包装器中调用原始函数时,它会返回给受害者应用程序而不是钩子包装器,这意味着它错过了包装器中的一些代码。
在逐步完成反汇编后,它看起来好像调用堆栈被覆盖了,所以当 Direct3DCreate9 返回时,它会弹回受害者应用程序,而不是我发出调用的钩子函数。
我猜我需要手动将钩子函数推送到调用堆栈上?我该怎么办?
其他可能相关的信息:受害进程和钩子都已在调试模式下构建。 Direct3DCreate9 是一个 __stdcall,我使用 vs2010 作为钩子 dll,但受害进程是用 vs2015 编译的。
【问题讨论】:
标签: visual-studio dll hook inject directx-9