如何防止对 C# .NET 程序进行逆向工程

如何防止对 C# .NET 程序进行逆向工程

我有一个 C# .NET 程序,我认为它已被破解(逆向工程)。有什么方法可以防止这种情况发生吗?

答案1

您需要一个 C# 代码混淆器,请检查以下问题:

问题 1

问题2

答案2

从技术上讲,没有办法阻止已经发生的事情,除非你有时间机器。你的问题表明你相信你的程序已被破解(过去完成时)——这是已经发生的动作。预防已经发生的动作将涉及时间旅行,因为我们想不出其他方法可以做到这一点。

这个看似愚蠢的论点之所以有意义,是因为即使你今天在代码中实现了一种混淆技术,让任何人都不可能再对你的代码进行逆向工程,但至少有一份代码没有混淆已经以某种方式发布,并且已经返回到可用的源格式(或者您相信)。

由于我不知道地球上有谁曾经制造过可以工作的时光机,所以我怀疑你是否有办法通过技术手段妥善处理这种情况。如果你的软件可以免费下载,那么很可能有成千上万的人拥有未混淆的二进制文件的副本,并且可以随时在彼此之间共享这些二进制文件并随意对其进行逆向工程。即使你以有偿方式出售你的软件,如果费用不是很高,那么它可能已经被不止一个人逆向工程过,无论是付费客户还是盗版者。

你可能不得不求助于地球上唯一一个可以(以极其不完善的方式)尝试调解过去发生的错误或不道德行为的机构:法律系统。你看,即使有人做了一些非常恶劣的事情,比如使用你的代码作为基础发布竞争产品,你也不会严格需要时间机器来阻止他们这样做:你可以简单地针对最严重的违法者提起诉讼,让司法系统自行发挥作用。你不一定能得到理想的结果,您可能无法获得应得的全部金钱(法律费用和所有费用);但这比坐在这里希望拥有一台时光机要好。

当然,向前走, 任何新的如果您的目标是防止其他人能够方便地对 .NET 程序集进行逆向工程,那么您发布的代码开发应该被混淆。但我将把这个话题留给其他回答者;我只是想成为一个学究。

答案3

您无法完全避免这种情况,但您可以采取一些措施使攻击者更难以做到这一点,如以下文章所述:

反逆向工程指南

基本上,您需要应用一些混淆技术来减慢该过程。有几种工具可以帮助您做到这一点,具体取决于您使用的编程语言。如果您搜索 Stackoverflow,您会找到很多答案,例如,快速搜索返回了以下有关 Javascript 的链接:

如何混淆 JavaScript?

相关内容