ProxiFy - 自动代理 DLL 生成





5.00/5 (6投票s)
支持 64 位和 32 位 DLL 的自动化代理 DLL 生成
引言
ProxiFy 允许用户快速创建使用 64 位或 32 位 DLL 的代理 DLL。它生成必要的 ASM 代码,使 DLL 在两种架构下都能工作。它也不使用 dumpbin 来生成 DLL 的导出项。因此,除了选择要创建代理的 DLL 之外,没有其他额外的步骤。
我很快完成了这个项目,并发现它对我自己很有用,并且认为其他人可能也会觉得它有帮助。
背景
我过去使用 Michael Chourdakis 的 "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 生成中的错误