需要建议设计'防裂'软件

时间:2010-03-05 01:15:11

标签: security

我目前正在开发一个项目,我需要创建一些架构,框架或任何标准,我可以“至少”增加软件的破解方法,即增加软件安全性。已经有不同的方法来激活软件,包括在线激活,密钥等。我目前正在研究一些研究论文。但是我仍然想讨论很多事情。

有人可以引导我去一些体面的论坛,邮件列表或类似的东西吗?或任何其他帮助将不胜感激。

7 个答案:

答案 0 :(得分:14)

我会告诉你最接近“破解”的东西:一个网络应用程序。

由于许多其他原因,桌面应用程序注定要失败,但是让您的应用程序在浏览器中“在云端”运行,可以让您更好地控制安全性。

桌面软件在客户端的计算机上运行,​​因此客户端可以完全访问它。 Web应用程序在您的服务器上运行,因此客户端只能看到它的一小部分。

答案 1 :(得分:8)

你需要首先渗透当地的黑客团伙,冒充11岁,想要“破解”。一旦您赢得了他们的信任,您就可以了解他们认为最难破解的功能。当你秘密地向本地留言板发布“uncrackable”软件时,你可以看到他们用它做了什么。以你的内在知识为基础,直到他们不再破解你的软件。完成后,请告知您的身份。理想情况下,这将被视为背叛的标志,即你正在反对他们。希望这会导致他们联系当地社区以外的其他黑客攻击您的软件。

继续直到你到达黑客黑手党的顶端。把你的论文写成一本书,卖给HBO。

答案 2 :(得分:7)

当您的产品破裂时,这不是成功的标志吗? :)

严重的是 - 一种方法是使用序列化为XML然后使用公钥/私钥对加密的许可证对象。然后在运行时读回它们,反序列化并处理它们以确保它们有效。

但是仍然存在无处不在的“IsValid()”方法,它可以被破解以始终返回true。

您甚至可以将该方法放入已签名的程序集中以防止篡改,但您所做的就是创建另一层“IsValid()”,它也可以被破解。

我们使用许可证打开或关闭我们软件中的各种功能,并验证支持/升级期限。但这仅适用于我们的合法客户。任何想要绕过它的人都可能。

我们相信我们的合法客户不会试图绕过许可,我们接受我们的非法客户会找到方法。

我们会浪费更多的钱来试图改进我们解决方案的“防篡改”性质,而这些解决方案我们会泄露给盗版软件的人。

另外,你必须考虑我们的合法客户的痛苦,并要求他们从他们的在线帐户页面粘贴许可证字符串是我想要通过他们的痛苦。为什么要为潜在客户创造额外的进入障碍?

无论如何,根据你已经实施的解决方案,我上面的描述可能会给你一些想法,可能会减少某人破解你产品的可能性。

答案 3 :(得分:7)

正如nute所说,您发布到客户机器的任何代码都是可以破解的。

不要试图“不可破解”。尝试“有足够的威慑力来合理保护我的资产。”

有许多方法可以尝试并增加破解成本。 其中大多数花费了你,但你可以做的一件事实际上可以降低你的成本,同时增加破解成本:经常交付。

破解任何给定的二进制文件的成本有限。破解二进制文件的数量会增加这个成本。如果您每周发布新功能,则基本上将您的用户分为两组:

  1. 那些不需要最新功能且可以等待破解的人。
  2. 那些确实需要最新功能且需要为您的软件付费的人。
  3. 通过采用传统的防破解技术,您可以将破解一个二进制文件的成本倍增,从而扩大新功能发布时和黑市上可用时之间的差距。最重要的是,你的成本会下降,你在一段时间内交付的价值会上升 - 这就是让它免费的原因。

    您发布的频率越高,您发现质量和价值越高,成本越低,窃取软件的可能性就越小。

答案 4 :(得分:5)

正如其他人所提到的,一旦你向用户发布了这些位,你就放弃了对它们的控制。专门的黑客可以更改代码以执行他们想要的任何操作。如果您想要更接近防裂的东西,请不要将这些位发布给用户。将它保存在服务器上。通过Internet提供对应用程序的访问,或者,如果用户需要桌面客户端,则在服务器上保留关键位并通过Web服务提供对它们的访问。

答案 5 :(得分:3)

像其他人所说的那样,没有办法创建一个完整的防破解软件,但有办法让软件破解更加困难;大多数这些技术实际上被坏人用来隐藏二进制文件中的恶意软件,并且游戏公司更难以破解和复制游戏。

如果您真的认真对待这样做,可以检查一下像UPX这样的可执行打包程序。但是,你还需要实现解包器。我实际上并不建议这样做,但学习游戏保护程序和二进制混淆可能会帮助你完成任务。

答案 6 :(得分:2)

首先,你用什么语言写这个? 确实,防裂程序是不可能实现的,但是你总是可以让它变得更难。应用程序安全性的简单方法意味着可以在几分钟内破解程序。一些提示:

如果要部署到虚拟机,那太糟糕了。那里没有太多替代品。所有流行的vms(java,clr等)都很容易反编译,没有混淆器和签名就足够了。

尝试尽可能多地将UI编程与底层程序分离。这也是一个很好的设计原则,它将使得破解者的工作更难从GUI(例如进入你的串行窗口)来跟踪你实际执行检查的代码

如果您正在编译实际的本机代码,您始终可以将构建设置为版本(不包括任何调试信息至关重要),并尽可能优化。此外,在应用程序的关键部分(例如,在验证软件时),请务必使其成为内联函数调用,这样您就不会遇到单点故障。并从您应用中的许多不同位置调用此函数。

如前所述,包装商总是会增加另一层保护。虽然现在有许多可靠的选择,但最终可能会被一些反病毒程序识别为假阳性病毒,所有着名的选择(例如UPX)都已经非常直接的解包。

你也可以寻找一些反调试技巧。但这对你来说很麻烦,因为在某些时候你可能还需要调试发布应用程序!

请记住,您的首要任务是尽可能无法追踪代码的关键部分。明文字符串,库调用,gui元素等......它们都是攻击者用来跟踪代码关键部分的所有点。