如何混淆非托管 dll 的函数名称

Posted

技术标签:

【中文标题】如何混淆非托管 dll 的函数名称【英文标题】:How to obfuscate the function names of the unmanaged dll 【发布时间】:2011-09-10 06:13:38 【问题描述】:

我想混淆我的 dll 导出名称。 我在下面的链接中的堆栈溢出中遇到了同样的问题,但是我找不到解决方案的接受度。 Modify dll exports (symbol table). I want to obfuscate the function names

有人可以推荐吗?

【问题讨论】:

使用c++编译器编译? 你可以在编译之前给它们起混淆的名字。 调用你的函数 Function1 到 Function999。在头文件中使用宏为它们提供助记符名称。 @Raymond:+1 用于解决方案和实施(我不会想到)。如果您给出了答案而不是发表评论,我也会给您投票 - 具有更好的影响。 @raymond,一个小例子可以帮助我。 【参考方案1】:

您可以使用 .def 文件,在该文件中您可以为导出的函数指定其他名称,或者仅按序号导出它们。见Exporting from a DLL Using DEF Files 和.def files C/C++ DLLs。

【讨论】:

听起来很简单。在 shell32.dll 中,我在导出中看到过这样的序数。我厌倦了对列表中的 2 或 3 个函数使用序号,但我仍然可以在导出部分找到该名称。 好的,我找到了。我用 NONAME 试过了。我的意思是像这样 EXPORTS fun1 @1 NONAME Fun2 @2 NONAME。这给了我成功。

以上是关于如何混淆非托管 dll 的函数名称的主要内容,如果未能解决你的问题,请参考以下文章

dllimport如何在非托管dll中获取哪个应用程序调用了函数

从 C# 线程内的非托管 dll 运行函数

从非托管 dll 文件(注入到正在运行的进程中)调用托管 dll

从非托管进程中卸载 .NET DLL

C#调用C++编写的DLL(非托管)

从非托管 DLL 导入函数时,0x8007007F 是啥意思?