【问题标题】:Secure C++ DLL from reverse engineering [closed]从逆向工程中保护 C++ DLL [关闭]
【发布时间】:2016-03-08 07:16:22
【问题描述】:

我有一个必须保护的 C++ DLL。我的意思是我的问题是,当我使用反编译器时,我可以看到我的函数名称,然后很容易反转。

所以我的问题是:如何保护我的代码以隐藏函数名称、变量等以防止逆向工程? 我一直在寻找混淆,但从未找到本机 C++ 代码(仅托管代码)的解决方案。

谢谢。

【问题讨论】:

  • 你能给我们看看你的代码吗?
  • 您的目标是什么环境,您使用的是什么编译器?您正在使用哪些编译器选项?如果反编译器能够从机器代码(名称和所有)重新构建您的 c++ 函数,则函数名称必须包含在已编译程序集中的某个位置。这让我感到惊讶,因为我想任何相当健壮的优化编译器都会将名称更改得面目全非,以减少编译程序集的大小并缩短程序加载时间。
  • @dogjones 如果函数是从 DLL 加载的,那么编译器通常别无选择,只能将这些名称原样嵌入到可执行文件中。
  • 啊,我明白了。我以为 OP 是在问如何防止人们对他的 DLL 的底层结构进行逆向工程。混淆您打算向库用户公开的函数名称对我来说似乎是浪费时间......

标签: c++ dll reverse-engineering


【解决方案1】:

您可以为此使用预处理器。例如,只需构建一个包含所有函数名称的列表并给它们起无用的名称,如下所示:

#define FunctionFoo  f1
#define FunctionBar  f2
etc

在您的源代码中,您将继续以真实名称(FunctionFoo 等)调用函数,但编译后将只剩下无意义的名称,例如 f1f2 等。

【讨论】:

  • 小程序的好策略,但对于大程序或经常添加功能的程序不实用。
  • @MarkRansom:如果您的所有替代名称都与一个简单的正则表达式匹配,那么您可以添加一个转储导出的构建后步骤并检查任何尚未替代的内容。如果您还把这些放在主文件之外的单独的头文件#included 中,那么自动更新替换列表只是微不足道的额外工作。
【解决方案2】:

您能否编写一个脚本来遍历 .cpp 和 .h 文件并使函数名称变得乱七八糟?

如果函数名是泄露的,编写一个小程序检查文本文件(在编译它们之前)并更改所有函数名。

我不知道这是否有帮助,但它至少会隐藏名字。

【讨论】:

  • "一个脚本,它遍历 .cpp 和 .h 文件,使函数名有些乱码" /"一个检查文本文件(在编译它们之前)并更改所有函数名的小程序"被称为 C++ 预处理器。
  • 啊。问题,原来的函数名不是保存在 .h 文件中吗?
  • (1) 可以保存预处理的结果,但更重要的是 (2) 拥有头文件的人不是您试图隐藏函数名称的人。他们必须知道函数语义才能正确编写调用它们的代码。只有二​​进制文件的人,没有源代码,标题或其他,混淆有助于对抗。只需将混淆规则放入头文件中,然后针对 DLL 进行编程的人可以使用有意义的名称来执行此操作,但他们的二进制文件和 DLL 都将使用替​​代项。
猜你喜欢
  • 2018-05-24
  • 2010-10-12
  • 2013-09-18
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 2020-05-02
  • 2017-05-28
  • 2017-09-21
相关资源
最近更新 更多