在iOS中,将未知应用程序保留在服务器上的标准方法是什么?

时间:2015-10-13 15:00:55

标签: security rsa signing

应用程序可以将一个私钥硬编码到其中,我的服务器可以为其公开,应用程序可以签署所有内容。但是,黑客可以识别目标代码中的私钥,并编写一个恶意应用程序,用相同的密钥签署所有内容。然后该应用程序可以使用我的服务器。

应用程序可以与我的服务器进行密钥交换,但服务器在进行密钥交换时如何知道应用程序是真实的?

1 个答案:

答案 0 :(得分:1)

实质上你无法知道。

原因很简单:因为任何人都可以到达客户端并拥有所有客户端并且通过逆向工程来了解客户端(他们需要完成所有这些工作),没有什么这可以阻止他们回答您可能设置的真实应用程序将要回答的任何挑战。

但是你可以在假应用上加倍努力。但他们可以(如果做得对)给出了答案。

E.g。如何让它变得更难: 服务器向客户端应用程序发送质询以计算例如应用程序本身的CRC32(或md5,sha-1,sha-256,......无关紧要)从给定的开始到给定的结束。如果你为你发送的每个挑战设置这些起点和终点是完全随机的,你基本上强迫假应用程序完全拥有真实应用程序的编译代码......所以你要负担必须拥有真正的应用程序(不是强制它实际运行(未修改的)代码,只是拥有实际未修改的代码)。 请注意,您需要支持服务器端,允许多个版本的客户端等,或者您无法再升级客户端。

任何分发虚假应用程序的人都会因此被迫侵犯您对真实应用程序的版权(并且您的律师可能会更容易处理案件)。

<强>替代

要选择替代方案,您需要弄清楚为什么(如此)拥有您的客户很重要?

如果客户端包含机密:删除它们,仅使客户端显示并具有3层模型,您只允许用户运行显示部件并保留服务器上的所有机密。

如果您通过销售应用获得收入,请免费赠送,并在您的服务器上销售帐户。使用身份验证来执行此操作:您可以对用户进行身份验证(登录和密码,真正的双因素身份验证,...),您也可以禁止他们在短时间内显着更改其地理位置,禁止同时登录,... 但价格是用户跳过的箍。尽管如此,他们可能还会使用其他客户。

如果您允许逻辑(例如在在线游戏中使用的逻辑)使用用户CPU的功能来执行操作,您仍然可以在服务器上的逻辑级别上进行监督:例如如果在真实客户端完成任务至少需要5分钟,并且如果客户在完成5分钟之前报告为“已实现”:您有一个骗子......同样,确保所有重要资产都是仅从服务器提供,不信任客户......