65.9K
CodeProject 正在变化。 阅读更多。
Home

ProxiFy - 自动代理 DLL 生成

starIconstarIconstarIconstarIconstarIcon

5.00/5 (6投票s)

2017年3月28日

CPOL

4分钟阅读

viewsIcon

37867

downloadIcon

1773

支持 64 位和 32 位 DLL 的自动化代理 DLL 生成

引言

ProxiFy 允许用户快速创建使用 64 位或 32 位 DLL 的代理 DLL。它生成必要的 ASM 代码,使 DLL 在两种架构下都能工作。它也不使用 dumpbin 来生成 DLL 的导出项。因此,除了选择要创建代理的 DLL 之外,没有其他额外的步骤。

我很快完成了这个项目,并发现它对我自己很有用,并且认为其他人可能也会觉得它有帮助。

背景

我过去使用 的 "wrappit" 来创建我的代理 DLL,但发现它不支持 64 位架构 DLL,而且对于我来说,创建 DLL 所需的步骤(有时,我需要创建几个,并且使用 dumpbin 来生成导出项有点烦人)有点慢。

我使用与 wrappit 相同的技术,使用 jmp 跳转到导出的地址,并且深受其启发。

编译 ProxiFy

要编译 ProxiFy,请确保包含以下库

  • Imagehlp.lib
  • dbghelp.lib

并将字符集设置为 "使用多字节字符集"。

使用 ProxiFy

使用 ProxiFy 非常容易,其背后的想法是缩短创建代理 DLL 所需的步骤数量。

您所需要做的就是运行 ProxiFy.exe,您将被提示选择一个 .dll 文件。

步骤 1

选择 DLL 后,您将收到一个 messagebox,显示 "32 位文件" 或 "64 位文件"。此 messagebox 的唯一目的是让用户知道他们刚刚创建了哪个架构的 DLL 的代理。我觉得这有点用,但如果您愿意,可以在源代码中删除它,它没有其他用途。

第二步

结果

如果它是 64 位 DLL,ProxiFy 将创建 3 个文件,如果它是 32 位 DLL,则创建 2 个文件。我将在下面介绍如何创建一个代理 DLL 项目,我将使用 Visual Studio 2015 作为此示例。

步骤 1

首先创建一个 DLL 项目,我不会详细介绍如何执行此操作,因为关于此主题的文章有很多。

第二步

完成之后,将 .cpp 文件和 .def 文件添加到项目中。确保进入链接器设置,并将 .def 文件设置为模块定义文件。您可以在“属性 -> 链接器 -> 输入”下找到此选项。

如果该项目是一个 32 位项目,请确保将项目设置为 Win32(或 x86)。然后您就完成了。

64 位 DLL 的附加步骤

步骤 1

如果您有一个 64 位 DLL,则会与 .cpp.def 文件一起创建一个 .asm 文件。在将其添加到项目之前,您应该右键单击该项目 -> 生成依赖项 -> 生成自定义项... 然后选中 ".masm"。这将允许 .asm 文件正常工作。

第二步

现在也将 .asm 文件添加到项目中。我不确定是否自动设置了正确的设置,所以要再次检查,请右键单击它并转到属性。在 "常规 -> 项目类型" 下,确保将其设置为:Microsoft Macro Assembler。

PS

由于这是一个代理 DLL,它需要在同一文件夹中包含原始 DLL。ProxiFy 假设您将在名称后添加下划线的原始 DLL。因此,steam_api64.dll 将变为 steam_api64_.dll
这可以在 ProxiFy 中更改,或者您也可以更改生成的 CPP 文件中的 LoadLibrary 调用。

关注点

该项目不适用于使用序号作为导出项的 DLL。这可以完成,但到目前为止,我还没有遇到不使用序号作为导出项的问题。总的来说,这不被鼓励,据我所知,所以我没有包含它,因为我还没有需要它。

我仅在 Windows 7 64 位上测试了 ProxiFy。

历史

  • 2017-03-28: 原始帖子
  • 2017-03-29: 更新了 32 位 dll 生成中的错误
© . All rights reserved.