C#-防止重新编译

C#-防止重新编译,c#,security,decompiling,C#,Security,Decompiling,我目前正在开发一个用C#开发的应用程序。 我们正在寻找保护我们的应用程序的方法。我知道防止反编译几乎是不可能的,但我想知道是否有办法防止重新编译 我的意思是,如果有人反编译我的应用程序,更改源代码(例如跳过检查许可证的if语句),然后重新编译,他就赢了。 有没有办法避免重新编译?你不能真正阻止重新编译,因为最终它都是IL,而且可以很容易地进行反向工程 但是,一些模糊处理工具使用的属性和字段名在C#中无效,这意味着重新编译代码是一个地狱。首先,所有这些问题都必须解决,我已经尝试对我们自己的一个模糊

我目前正在开发一个用C#开发的应用程序。 我们正在寻找保护我们的应用程序的方法。我知道防止反编译几乎是不可能的,但我想知道是否有办法防止重新编译

我的意思是,如果有人反编译我的应用程序,更改源代码(例如跳过检查许可证的if语句),然后重新编译,他就赢了。
有没有办法避免重新编译?

你不能真正阻止重新编译,因为最终它都是IL,而且可以很容易地进行反向工程

但是,一些模糊处理工具使用的属性和字段名在C#中无效,这意味着重新编译代码是一个地狱。首先,所有这些问题都必须解决,我已经尝试对我们自己的一个模糊程序集进行测试:几个小时后我停止了尝试,这表明它非常有效


此外,模糊处理工具将以难以理解实际发生的情况的方式扰乱代码,从而使查找和理解许可证系统变得非常困难。

实际上,如果要分发(编译的)代码,则无法对反编译/重新编译做任何(有用的)工作。你最终会花很多时间/金钱去“阻止”它,只是为了发现它无论如何都做不到

大公司花了大量的钱来防止这种情况(例如Adobe),他们的产品仍然会被破解


您可以尝试像Patrick建议的那样进行模糊处理,但这只会给破解程序增加一点障碍,但实际上会弄乱堆栈跟踪。您将被迫存储和管理映射文件以解码(发布版本)堆栈跟踪。

您可以对程序集进行签名!不要将编译后的代码提供给攻击者(例如,仅在您控制的计算机上运行代码。如有必要,通过适当的远程访问技术(HTTP、RPC等)公开功能)@Callumlington-签名在这里没有任何用处。攻击者可以简单地选择重新编译代码,而不进行任何签名。我所说的应用程序是我们销售的软件,因此攻击者可以获得@Damien_软件。逆向工程是不可能防止的,使用OnFusion、数字签名、,以及提前编译。它们中的每一个都可以在某些方面有所帮助。这是一个好的/更好的模糊处理策略吗?是的,这是一个选项,但在开发时也有一些缺点。