我们正在使用C#开发桌面应用程序(Windows服务)。我们正在努力保护我们的知识产权,这就是为什么我们决定使用.Net Reactor
最初,它看起来像一个强大的工具。混淆时,我选择了除“本地exe文件”之外的所有可用选项。 (Necrobit,Anti ILDASM,Anti Tampering,控制流混淆,混淆,字符串加密,压缩和加密资源)
我尝试使用DotPeek来检查结果,并对结果感到满意
但是事实证明,那里有一个可以轻松对所有程序集进行模糊处理的工具(出于明显的原因,我将不提及该工具是什么)。但我很好奇是否有人遇到过类似类型的问题。有谁知道一种可靠的方法来保护将在客户端台式机/服务器上运行的C#代码
**请不要建议使用C ++重写应用
答案 0 :(得分:2)
通常,编写软件的成本要比购买使用许可的成本高出多个数量级。同样,维护成本很高。因此,在大多数情况下,与运营成本相比,知识产权的价值较低。因此,很少有用户能够精通他们的软件,并在经济上具有足够的优势,可以针对他们可能具有的任何目的对软件进行反向工程。
通常,如果您对某些东西(无论是电话,计算机还是已编译的软件)进行物理访问,您将不再对任何东西的安全性有任何期望。
因此,我认为您的努力被误导了。如果有一种特别有价值的算法或方法,请考虑以API的形式托管在服务器上或申请专利。如果您必须分发此特殊作品,请与您的客户签订强有力的保密协议。使他们从逆向工程中受益会给他们带来经济上的风险。
答案 1 :(得分:0)
提取出程序的重要部分(或几个-越多越好),以便在您的服务器上远程运行-这意味着用户需要连接到Internet才能运行您的程序。不要仅仅添加远程密钥检查,因为破解者只会将其删除。相反,请在此处运行非平凡的算法。
构建硬件加密狗并随您的软件一起分发。同样,在加密狗上实施一个或多个密钥算法,而不仅仅是密钥检查。
编译后,将生成的DLL压缩为存档文件,然后对其进行加密。然后,您将使用汇编器编写一个手工编码的“加载程序”(试图隐藏其工作内容)。请注意,加载程序将需要在某个位置包含解密密钥,但是您可以做一些事情来更好地隐藏它。这个想法是隐藏它在.NET框架上运行的事实(肯定会击败所有现成的解密工具)。但是,它不会阻止破解者(谁会看到内存中的进程是.NET并转储该进程)。
HTH