我知道在SO上已经存在类似的问题。但我的问题更具理论性。
我想知道,是否可以设计一个万无一失的试用系统?万无一失是指这样一个系统,即使一个破解者知道这种系统的算法也不能破解?
很抱歉,如果这不是编程问题。
编辑:我想我应该让我的问题更实际。我问的是整个系统,而不是独立的应用程序。系统由带有Linux OS的PC和连接到它的一些硬件组成。也许我可以使用硬盘加密?
答案 0 :(得分:4)
可能唯一的方法是基于互联网的“软件即服务”应用程序。如果您不提供访问权限,则表示他们不使用该软件。如果它是基于桌面的应用程序,那么某些关键功能仍然必须在某个地方的在线服务器上。
如果黑客在其本地计算机上拥有整个应用程序,则可以通过某种方式对其进行逆向工程和“破解”。解决这个问题的唯一方法是确保功能的某些部分永远不会在他们的机器上。
答案 1 :(得分:3)
拥有防破解软件的唯一(理论)方法是拥有一个完全封闭的系统。如果您控制从硬件到操作系统到应用程序和开发工具的所有内容,则可以防止篡改。
请注意我是如何说这是理论上的。不可避免地,你会发现一个硬件黑客会想出一种修改硬件的方法(参见modchips)。从那里,他们可以加载他们想要的任何软件并修改已经存在的软件。
适用于物理安全性(保险箱,保险库等)的相同模型适用于软件。重点是通过合法手段窃取/复制货物的价格更高。你永远不能创建一个万无一失的系统,但你可以轻松地防止脚本小子和业余爱好黑客破解你的产品。另一方面,专业人士生活在破解之中。他们会找到办法。
答案 2 :(得分:1)
您可以将您的应用程序设计为依赖于远程服务器,但您可以控制任何人。
答案 3 :(得分:0)
没有。您可以非常努力,但您的问题相当于“我怎样才能让某人运行代码但不让他们运行代码。”
例如,您可以省略一小部分代码,并要求从您控制的服务器下载代码。这使您可以跟踪试用活动并关闭特定用户。但是,一旦他们收到代码,他们就可以捕获它并在给定足够的工作量的情况下构建产品的无阻碍版本。