1-如何确保.Net应用程序不会被破解?
如果一台电脑可以运行你的代码+黑客可以以比你更高的权限运行自己的代码,那么没有什么可以100%阻止你的应用被破解。即使他们只能访问可执行文件但不能访问目标平台,他们仍然可以逐步完成并模仿目标平台会做什么,并弄清楚保护是如何完成的。
2-黑客现在知道我的代码,因为他已经完成了修改。我应该采取什么步骤?
完全重写身份验证部分,因此他们必须从头开始,但他们会再次获得它,这只是多长时间的问题。
3-我在互联网上阅读了有关-混淆器的信息。但是黑客知道我的代码我该怎么办?
既然他们有非混淆代码,jinni 就从瓶子里拿出来了。除非您彻底重新编写软件,否则您无能为力,因此他们必须从头开始。混淆器不会阻止坚定的攻击者,他们唯一可以阻止它的就是将二进制文件置于他们手中。
4-我可以用来避免软件破解的任何其他专业提示吗?
我见过的唯一可以远程延迟任何时间的复制保护是育碧对刺客信条:兄弟会所做的。他们用游戏磁盘加密了关卡,并且必须根据需要从互联网下载解密密钥(这是将二进制文件放在他们手中的方法)。但这并没有永远奏效,最终黑客确实将这些级别解密并完全破解。这种方法正是我所看到的在没有法律参与的情况下花费最长的时间来解决的问题(见底部的第 2 点)
5-我不确定,但这些反射器软件是否也可以反编译带有敏感数据的 App.Config ?
反射器软件需要做的就是查找加载 App.config 的部分并阅读默认值。没有安全的地方可以在您无法完全控制的计算机上存储信息。如果它在计算机上,则可以读取。如果可以读取,则可以对其进行逆向工程。
我能看到的防止盗版的唯一真正解决方案是两种选择之一。
这个人永远不会得到你的应用程序,它是从你控制的服务器流式传输的,他们永远不会看到二进制文件。您发送给他们的唯一内容是他们驱动 UI 所需的信息。这是所有 MMO 的工作方法。人们可以对您发送到 UI 的内容进行逆向工程,并模仿服务器上正在发生的逻辑,但他们永远无法直接看到它在做什么,而且如果您的软件足够复杂,攻击者可能不会收取费用重新创建服务器端代码。这种方法的缺点是您需要托管服务器供您的用户连接,这将是一个重复发生的成本,您需要一种方法来弥补。这种方法通常被称为“富客户端”或“瘦客户端” 取决于客户端完成了多少处理以及服务器端完成了多少处理。看“ Microsoft 应用程序体系结构指南,第 2 版”的第 22 章。具体来说,我正在描述图 4 和图 5中显示的内容
第二种选择是,无论您出售您的软件,谁也让他们签署一份不分发软件的法律合同(不是 EULA,必须由客户亲自签署的实际合同)。在该合同中,对泄露软件的人处以巨额罚款,然后在你的程序上加上购买软件的人独有的指纹,这样当程序泄露时,你就可以看到是谁做的。(这是供应商 Hex-Rays 用于他们的反汇编程序IDA的方法。快速谷歌搜索无法找到任何比 6.1 更新的破解版本,它们在6.3)。这种方法不会阻止盗版,但它可能会阻止复制品被泄露。这还可以让您恢复与最初泄露的程序相关的一些损失成本。一个问题是,您需要放置大量指纹,并且它们需要很微妙,如果攻击者可以获得程序的两个副本并且可以比较两者之间的文件,他将能够分辨出什么是识别信息把他们想要的东西放进去,这样他们就不能知道他们是从谁那里得到的。做到这一点的唯一方法是放入大量的红鲱鱼,不能只是被剥离或随机化,如果他们不必努力破解它,也可以使识别代码对运行软件不重要他们更有可能把它留在里面。
更新:在重新访问此答案以链接到另一个问题后,我想到了一种实现#2 解决方案的简单方法。
您需要做的就是通过混淆器运行您的代码,并让它为您出售软件的每个人重命名您的类(我仍然会让他们签署许可协议,而不仅仅是单击 EULA,以便您可以执行下一部分) . 然后你建立一个混淆映射的数据库,当你在互联网上看到一个泄露的副本时,你只需要在项目的任何地方找到一个类,在你的数据库中查找它,你就会知道是谁泄露了它,知道你需要谁追求法律赔偿。