6

如果我想让我的应用程序更难破解,有哪些好的约定可以遵循?

4

10 回答 10

11

只要您的整个应用程序是客户端,就完全不可能保护它不被破解。保护应用程序不被破解的唯一方法是让它必须连接到服务器才能运行(例如在线游戏)。

即便如此,我也看到了一些模拟服务器并向程序发送虚拟确认的裂缝,因此它认为它正在与一个真实的、合法的服务器通信(在这种情况下,我说的是“回拨”验证策略,而不是一个游戏)。

另外,请记住,有志者事竟成。如果有人非常想要你的产品,他们会得到它。最后,您将实施可能会给您的诚实客户带来麻烦的保护措施,并且只会被视为对饼干的挑战。

另外,请参阅此线程以获取有关此主题的非常彻底的讨论。

于 2009-04-30T13:30:29.410 回答
6

很多答案似乎都忽略了问题是如何让它变得更难,而不是如何让它变得不可能。

混淆是该过程中的第一个关键步骤。如果代码没有被混淆,任何进一步的事情都太容易解决了。

在那之后,它确实有点取决于你试图避免什么。无许可证安装?限时审判炸了?在不支付额外费用的情况下增加软件的使用(例如在更多 CPU 上)?

在当今的虚拟机世界中,长期的反破解策略必须涉及一些归属感。环境太容易变得原始了。话虽如此,如果您必须回到原始状态才能使用某些类型的软件,它们将毫无用处。如果那是您的软件类型,那么在注册表中放置东西以跟踪定时试验的地方相当隐蔽。通常是一种难以伪造的许可证密钥方案。

不过要注意一件事-不要太花哨。很多时候,许可方案获得的 QA 最少,并且在生产中遇到严重问题,合法客户被拒之门外。不要因为害怕被人抄袭而赶走真正的付费客户,否则他们很可能不会付给你一毛钱。

于 2009-04-30T14:38:13.647 回答
3

书籍:编写安全代码 2

于 2009-04-30T13:31:39.453 回答
3

有 3rd 方工具可以混淆您的代码。Visual Studio 自带一个。

但是,首先,您应该认真考虑一下您为什么要打扰。如果您的应用程序足够好并且足够受欢迎,以至于希望被破解,那么尽管您付出了所有努力,它还是会成功。

于 2009-04-30T13:31:55.053 回答
3

这里有一些提示,并不完美,但可能会有所帮助:

  • 经常更新您的软件
  • 如果您的软件连接到某处的某个服务器,请不时更改协议。您甚至可以拥有许多协议并根据某些算法在它们之间交替
  • 将部分软件存储在每次运行软件时都会下载的服务器上
  • 当你启动你的程序时,对你加载的 dll 进行 crc 检查,即有一个 crc 列表,用于批准的 dll
  • 有一项服务可以忽略您的主应用程序,不时进行 crc 检查并监视您的其他依赖 dll 的/程序集。

不幸的是,你花在复制保护你的软件上的钱越多,你在功能上花的钱就越少,一切都是为了平衡。

另一种方法是廉价出售您的软件,但经常进行廉价的升级/更新,这样破解就不会有利可图。

于 2009-04-30T16:22:38.510 回答
1

.NET 代码的问题是使用.NET Reflector等工具进行逆向工程相对容易。代码混淆可以提供帮助,但仍然可以解决。

于 2009-04-30T13:33:17.780 回答
1

如果你想要一个快速的解决方案(当然,不能保证你不会被破解——这只是一些“保护”),你可以搜索一些工具,如ThemidaStar Force。这些都是著名的保护壳。

于 2009-04-30T13:35:38.523 回答
1

这真的是不可能的。只需经常发布补丁,然后更改加密中的盐。但是,如果您的软件被破解了,那么它一定非常好:-)

于 2009-04-30T14:17:42.820 回答
-1

除非您的客户很少,否则这几乎是不可能完成的任务。

想想看——你见过没有破解的 Windows 版本吗?

于 2009-04-30T13:31:26.363 回答
-1

如果您发明了一种保护它的方法,那么有人可以发明一种破解它的方法。花费足够的精力,以便当人们以“非法”方式使用它时,他们会意识到这一点。除此之外的大多数事情都有浪费时间的风险;o)

于 2009-04-30T13:34:40.180 回答