C#桌面应用程序。代码混淆。使用.Net Reactor混淆的代码很容易被反混淆。

3
我们正在使用C#开发桌面应用程序(Windows服务),并尝试保护我们的知识产权,这就是为什么我们决定使用.Net Reactor的原因。
最初,它看起来像是一个强大的工具。在混淆时,我选择了除“本机exe文件”之外的所有可用选项。(Necrobit、Anti ILDASM、Anti Tampering、Control Flow混淆、混淆、字符串加密、压缩和加密资源)
我尝试使用DotPeek检查结果,并对结果感到满意。
但事实证明,有一种工具可以轻松地反混淆所有程序集(出于明显的原因,我不会提及这个工具是什么)。但我很好奇是否有人遇到过类似的问题。是否有任何可靠的方法来保护将在客户端桌面/服务器上运行的C#代码?
**请不要建议使用C ++重新编写应用程序。

1
有没有人知道一种可靠的方法来保护在客户端桌面/服务器上运行的C#代码,使其不会在他们的服务器上运行(例如在云上)? - mjwills
4
任何在用户计算机上运行的代码都无法(最终)得到保护。坚持不懈的黑客可以对任何代码进行逆向工程。 - eddiewould
1
(重写为 C++ 并不能帮助你) - eddiewould
2
“(由于明显的原因,我不会提及这个工具)”,因为“坏人们”不知道它吗?提示:坏人们比你更了解反混淆,那是他们的工作。你在法庭上保护知识产权。 - zaph
显示剩余4条评论
2个回答

4
一般而言,编写软件的成本比购买许可证使用它的成本高出许多个数量级。同样,维护也很昂贵。因此,在大多数情况下,知识产权的价值与运营成本相比较低。因此,很少有用户足够复杂和经济上优势足够去为他们可能有的任何目的逆向工程您的软件。
另外,一般而言,如果您提供物理访问权限,无论是电话、计算机还是已编译的软件,您都不再对其中任何内容有安全期望。
因此,我认为您的努力是错误的。如果有一个特别有价值的算法或方法,请考虑将其作为 API 托管在服务器上,或者寻求专利。如果您必须分发这个特殊的部分,请与客户签署强有力的保密协议。使他们从逆向工程中获得好处变得经济上风险高。

0

选项1)

从你的程序中提取出一个重要部分(或多个 - 越多越好),在你的服务器上远程运行 - 这意味着用户需要连接到互联网才能运行你的程序。不要只添加远程密钥检查,因为黑客会将其NOP掉。相反,在那里运行一个非平凡算法。

选项2)

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

选项3)

编译后,将生成的DLL压缩为存档文件,然后进行加密。然后使用汇编语言编写手工编码的“加载器”(试图隐藏它正在做什么)。请注意,加载器将需要在某个地方包含解密密钥,但是有一些方法可以更好地隐藏它。其想法是隐藏它正在.NET框架上运行的事实(肯定会击败所有现成的解密工具)。但是,它无法阻止黑客(他们将看到内存中的进程是.NET,并将转储该进程)。

希望对你有所帮助。


您也可以结合这些方法来提供额外的保护(保护以增加破解者需要跨越的“障碍”形式出现)。 - eddiewould
攻击者将使用调试器来检查内存中运行的代码。 - zaph
3
这有点像把手指塞进堤坝里止水。从长远来看,这种方法根本行不通,而且你会因此付出生命的代价。 - theMayer
@zaph - 我确实提出了这一点。你永远不可能击败一个有决心的人 - 你所能做的最好的就是安装一个挂锁 - 它可以阻止随意的小偷,但无法阻止一个有决心的人。 - eddiewould

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接