3

我们正在使用 C# 开发桌面应用程序(Windows 服务)。我们正在努力保护我们的知识产权,这就是我们决定使用 .Net Reactor 的原因

最初,它看起来像是一个强大的工具。混淆时,我选择了除“本机 exe 文件”之外的所有可用选项。(Necrobit, Anti ILDASM, Anti Tampering, Control Flow obfuscation, Obfuscation, String Encryption, Compress & Encrypt Resources)

我尝试使用 DotPeek 检查结果并对结果感到满意

但事实证明,有一个工具可以轻松地对所有程序集进行反混淆(出于明显的原因,我不会提及它是什么工具)。但我很好奇是否有人遇到过类似的问题。有谁知道保护将在客户端桌面/服务器上运行的 C# 代码的可靠方法

**请不要建议使用 C++ 重写应用程序

4

2 回答 2

4

一般来说,编写软件的成本比购买使用它的许可证要高出许多数量级。同样,维护成本很高。因此,在大多数情况下,与运营成本相比,知识产权的价值较低。因此,很少有(如果有的话)用户会足够成熟和经济优势足以对您的软件进行逆向工程以用于他们可能拥有的任何目的。

此外,一般来说,如果您分发对某物的物理访问权,无论是电话、计算机还是编译的软件,您就不再对任何东西的安全性有任何期望。

因此,我认为你的努力是错误的。如果有特别有价值的算法或方法,可以考虑将服务器作为 API 托管,或者申请专利。如果您必须分发此特别文章,请与您的客户签订强有力的保密协议。让他们尝试从逆向工程中受益具有经济风险。

于 2019-01-28T01:16:17.397 回答
0

选项1)

提取程序的一个重要部分(或几个 - 越多越好)以在您的服务器上远程运行 - 这意味着用户需要连接到互联网才能运行您的程序。不要只添加远程密钥检查,因为破解者只会将其排除在外。相反,在那里运行一个非平凡的算法。

选项 2)

构建硬件加密狗并将其与您的软件一起分发。同样,在加密狗上实现一个或多个密钥算法,而不仅仅是密钥检查。

选项 3)

编译后,将生成的 DLL 压缩为存档,然后对其进行加密。然后,您将使用汇编程序编写一个手动编码的“加载程序”(它试图隐藏它正在做的事情)。请注意,加载程序需要在某处包含解密密钥,但是您可以采取一些措施来更好地隐藏它。这个想法是隐藏它在 .NET 框架上运行的事实(肯定会击败所有现成的解密工具)。然而,它不会阻止破解者(他们会看到内存中的进程是 .NET 并且会转储该进程)。

高温高压

于 2019-01-28T00:07:57.353 回答