如何拦截Windows库中的C库调用?

我有一个devilish-gui.exe ,一个devilish.dlldevilish.h从C代码库中丢失了。
devilish-gui仍然是从客户使用,它使用devilish.dll

devilish.h在一个30页的pdf中没有很好的logging:根据作为参数提供的结构中的值,它暴露了一些C函数,其行为方式非常不同。

现在,我必须使用devilish.dll来编写一个新的恶意web服务。 不,我不能重写它。

这个文档几乎没用,但是因为我有devilish-gui.exe,所以我想写一个不同的devilish.h实现,以便将函数的调用和参数logging在一个文件中,而不是调用原始的dll函数。 类似于linux上的ltrace ,但专门为这个奇怪的库。

我怎样才能在windows上编写这样的“拦截”dll,并在devilish.dll和devilish-gui.exe之间插入?

几种可能性:

  1. 使用Detours 。
  2. 如果您将devilish.dll的实现放在与devilish-gui.exe相同的目录中,并将devilish-gui.exe的实际实现移动到子目录中,则Windows将加载您的实现而不是实际的实现。 然后你的实现可以转发到真正的实现。 我假设devilish-gui没有针对搜索路径攻击的硬化。
  3. 另一种方法是使用IntelliTrace将所有调用的跟踪日志收集到devilish.dll