保护C++程序免受反编译

Protect C++ program against decompiling

本文关键字:编译 C++ 程序 保护      更新时间:2023-10-16

可能重复:
是否可以反编译C++Builder exe?C++Builder exe安全吗?

我使用Microsoft Visual C++2010学习版编写程序。当我想分发我的程序时,我用"Release"配置编译它,还将链接器设置为不添加调试信息。所以我的问题是,我的可执行文件是安全的,还是任何人都可以反编译并查看源代码?如果它不安全,我如何防止它被反编译?

所有程序都可以进行一定程度的反编译。但是,在编译过程中会删除源代码中的大量有用信息。反编译器生成的源代码是对原始代码的苍白模仿。

反编译后,变量名、函数名、类名等将不可用。因此,反编译器能做的最好的事情就是把你的函数变成这样:

double CalculateWidgetStrength(int WidgetType, int WidgetFrobishness);

转换成这样毫无意义的代码:

double Function85(int p1, int p2);

对于一个反编译器来说,即使成功地做到这一点也非常困难。

有人能反编译它以查看原始源代码吗?不太可能,但原始源代码并没有那么重要。例如:

int x = 1 - 1;

int x = 0;

在二进制文件中是等效的,但这并不重要,是吗?

对于一个足够大的项目来说,反编译并不是一个真正的问题,因为你不能真正利用生成的代码。考虑到你从知识转移、文档和正确命名中受益,即使是大型项目的一小部分也需要数年时间才能了解。我想仅仅使用反编译器是不可能的。

对于特定的功能,是的,我想这是有风险的,但不能完全、100%地消除。

您无法完全保护代码。

IMHO你花在保护代码上的时间最好花在让你的产品功能丰富和无错误上,而不是频繁发布。以这样或那样的方式混淆代码有可能引入难以找到的错误,这些错误变得非常难以修复。

以您所暗示的方式保持其"安全"的唯一方法是不部署它,即您执行web服务或类似的操作。如果不让执行它的人无法执行,你就无法使它免受执行它的人员的伤害。

考虑到你已经完成的反编译需要大量的精力,我的问题是。为什么有人会这么麻烦,因为这可能需要比简单地"滚动自己的"更多的精力