我使用 Microsoft Visual C++ 2010 Express 编写程序。当我想分发我的程序时,我使用“发布”配置对其进行编译,并将链接器设置为不添加调试信息。所以我的问题是,我的可执行文件是否安全,或者任何人都可以反编译它并查看源代码?如果它不安全,我该如何防止它被反编译?
4 回答
所有程序都可以在一定程度上进行反编译。但是,源代码中的大量有用信息在编译过程中会被删除。反编译器生成的源代码是对原始代码的苍白模仿。
反编译后变量名、函数名、类名等将不可用。所以反编译器能做的最好的事情就是把你的函数变成这样:
double CalculateWidgetStrength(int WidgetType, int WidgetFrobishness);
变成这样毫无意义的代码:
double Function85(int p1, int p2);
对于反编译器来说,即使成功地做到这一点也非常困难。
任何人都可以反编译它以查看原始源代码吗?不太可能,但原始源代码并不那么重要。例如:
int x = 1 - 1;
和
int x = 0;
在二进制文件中将是等效的,但这并不重要,不是吗?
对于一个足够大的项目,反编译并不是一个真正的问题,因为你不能真正利用生成的代码。考虑到您从知识转移、文档和正确命名中受益,即使是大型项目的一小部分,也需要数年时间才能了解。我想仅使用反编译器是不可能的。
对于特定功能,是的,我想这是有风险的,但不能完全,100% 取出。
您无法完全保护代码。
恕我直言,您花在保护代码上的时间最好花在使您的产品功能丰富且无错误上,然后再频繁发布。以一种或另一种方式对代码进行混淆可能会引入难以发现的错误,这些错误变得非常难以修复。
以你暗示的方式保持它“安全”的唯一方法是不部署它,即你做一个网络服务或类似的东西。如果不让执行它的人无法执行它,你就不能让它免受执行它的人的影响。
鉴于您已经完成的反编译需要付出大量的努力,我的问题是。为什么会有人打扰,因为它可能需要更多的努力而不是简单地“自己动手”