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

C# 如何防止我的代码被盗?,c#,.net,reverse-engineering,managed,cil,C#,.net,Reverse Engineering,Managed,Cil,当我启动.NET exe时会发生什么?我知道C#被编译成IL代码,我认为生成的exe文件只是启动运行时并将IL代码传递给它的启动器。但是怎么做呢?这个过程有多复杂 IL代码嵌入在exe中。我认为它可以从内存执行,而无需将其写入磁盘,而普通的exe则不能(好的,是的,但它非常复杂) 我的最终目标是提取IL代码并编写我自己的加密启动器,以防止ScriptKiddy在Reflector中打开我的代码并轻松窃取我的所有类。我不能完全阻止逆向工程。如果他们能够检查内存并捕捉到我将纯IL传递给运行时的时刻,

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

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

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


编辑:看来不值得尝试我想要的东西。他们无论如何都会把它破解。。。因此,我将寻找一个模糊处理工具。是的,我的朋友们也说,把所有的符号重新命名为一个没有意义的名字就足够了。而逆向工程毕竟不会那么容易。

我个人认为,模糊处理是一种可行的方法。它很简单,也很有效,尤其是当你的所有代码都在一个exe中时(我不确定“搞乱IL”的问题是什么)

然而,如果您觉得这对您不起作用,也许您可以加密您的exe并将其作为一个资源嵌入到您的启动器中。处理它的最简单方法是解密exe资源并将其写入文件并执行。exe完成执行后,删除该文件。您还可以通过Emit函数运行它。我不知道这将如何工作,但这里有一篇文章让你开始-

当然,您的解密密钥可能也必须嵌入到exe中,这样真正确定的人无论如何都能够解密您的程序集。这就是为什么模糊处理可能是最好的方法

“…防止孩子们打开我的 在Reflector中输入代码,然后偷走所有 我的课很轻松。”

不幸的是,不管您如何模糊启动,只需调试器中的六个命令即可将当前运行的程序集转储到用户选择的文件中。因此,即使您可以按照Brian的建议启动应用程序,在Reflector运行后也不难将应用程序的组件放入Reflector中(如果有人觉得有趣,我可以发布WinDbg的示例)

模糊处理工具是从大量的技术经验中创建的,其设计常常使调试器难以可靠地附加到某个进程,或从中提取信息。正如Brian所说:我不知道你为什么决定保留IL,如果你想从脚本小子那里得到任何有意义的保护,你可能必须改变主意

生成的exe文件只是启动运行时并将IL代码传递给它的启动器

不完全是。有不同的方法可以设置您的程序,但通常情况下,IL代码被编译为在运行时的进程中运行的本机代码

至于孩子们——如果你认为你可以卖给他们或任何使用他们重新分发的东西的人,那你就是在欺骗自己。如果他们无法解锁你的应用程序,他们将继续前进,并找到一个他们可以或不可以的应用程序。它们的潜在销售额正好为0美元;花太多的精力试图阻止他们是没有意义的,因为你的投资没有回报。一个基本的混淆器可能是好的,但不要超出这个范围

事实上,大多数开发人员面临的来自默默无闻的挑战要比来自盗版的挑战大得多。你所做的任何阻止你发布产品信息的事情都比盗版对你的伤害更大。这包括让人们付钱来获得它。大多数时候,一个更好的方法是让你的应用程序有一个免费版本,孩子们甚至不需要解锁;对他们来说已经足够好的东西,破解你的应用程序只是浪费他们的时间,而不仅仅是时间或功能有限的试用。让他们和尽可能多的其他人把它传播得更广更广

现在我知道你最终需要一些付费客户。现在的关键是利用你从免费产品中获得的所有注意力来增加销售或推广其他更有利可图的产品。这里的一个选择是,也有一个高级版本,带有主要针对商业受众的附加功能;例如,使其易于部署到整个网络并以这种方式进行管理。企业拥有更雄厚的财力,更有可能支付您的许可证费用。然后,您的免费版本将用于推广您的产品,并为您的商业客户提供合法性


当然,也有其他的型号,但无论你做什么,都值得记住,晦涩是更大的挑战,盗版软件永远不会转化为销售。最终(当然,这取决于您的执行情况),您将能够通过利用这些优势的商业模式获得比您试图与之抗争更多的利润。

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

这是一个非常糟糕的想法,原因有二:

  • 您必须在存根中包含加密密钥。如果1337黑客可以有意义地使用您的反射程序集,那么他也可以轻松地窃取您的加密密钥并自行解密。(这基本上是
  • 没有人关心你的1337代码。我很抱歉,但那是很难的爱。没有人会认为任何人的代码都像inter一样