c# - 如何防止我的代码被盗?

标签 c# .net reverse-engineering managed cil

当我启动 .NET exe 时到底发生了什么?我知道 C# 被编译为 IL 代码,我认为生成的 exe 文件只是启动运行时并将 IL 代码传递给它的启动器。但是怎么办?它的过程有多复杂?

IL 代码嵌入在 exe 中。我认为它可以从内存中执行而无需将其写入磁盘,而普通的 exe 则不能(好吧,是的,但它非常复杂)。

我的最终目标是提取 IL 代码并编写我自己的加密启动器,以防止 scriptkiddies 在 Reflector 中打开我的代码并轻松窃取我的所有类。好吧,我不能完全阻止逆向工程。如果他们能够检查内存并捕捉到我将纯 IL 传递给运行时的时刻,那么它是否是 .net exe 并不重要,不是吗?我知道有几种混淆器工具,但我不想弄乱 IL 代码本身。

编辑:所以看起来不值得尝试我想要的东西。他们无论如何都会破解它......所以我会寻找一个混淆工具。是的,我的 friend 们也说过,将所有符号重命名为无意义的名称就足够了。逆向工程毕竟不会那么容易。

最佳答案

如果您绝对坚持对您的程序集进行加密,最好的方法可能是将您的程序代码放入类库程序集中并对其进行加密。然后,您将编写一个小的 stub 可执行文件,它将程序集解密到内存中并执行它们。

这是一个非常糟糕的主意,原因有二:

  1. 您必须在 stub 中包含加密 key 。如果 1337 黑客可以有意义地使用您的反射程序集,他就可以轻松地窃取您的加密 key 并自行解密。 (这基本上是 Analog Hole )
  2. 没有人关心您的 1337 代码。对不起,那是艰难的爱。没有人认为任何人的代码都像作者一样有趣。

关于c# - 如何防止我的代码被盗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2338337/

相关文章:

c# - InvariantCulture 和 Ordinal 字符串比较的区别

c# - 使用 AutoMapper 对集合进行多态映射

c - *(int32_t *)(a + 4) = b 是什么意思?

hibernate - 如何使用 hibernate.reveng.xml 更改自引用多对多集的名称?

c# - <ImportWindowsDesktopTargets> 在 try-convert 生成的 *.csproj 中做什么?

c# - 具有相同名称的非通用类和通用类的不良做法?

c# - Windows 10 通用 XmlNode 不包含 SelectSingleNode 的定义

c# - foreach 的 for/while 等价物是什么?

c# 如果两个 ListView 包含它,则选择 ListView 项

reverse-engineering - 逆向工程 war 故事