0

我正在开发一个客户端/服务器 SDK 项目,其中 iOS 客户端 SDK 作为代码而不是静态库分发给开发人员(我们有这种分发方法的商业原因)。我遇到过一些我们怀疑某些开发人员正在更改客户端 SDK 代码的情况。我想更新我们的客户端 SDK 以更主动地检测到这一点。

我的一个想法是在编译代码文件时以某种方式校验和,并让客户端 SDK 在与服务器交互时报告校验和以及 SDK 版本。在我们发布客户端 SDK 之前,我们会在我们这边记录每个版本的校验和,然后在客户端 SDK 校验和与其版本不正确时拒绝发送到我们服务器的任何内容。

我在这里有几个问题:

  1. 我如何在编译时不显眼地校验客户端 SDK Objective-C 代码?
  2. 有没有更好的方法来实现我的总体目标?
4

2 回答 2

3

我如何在编译时不显眼地校验客户端 SDK Objective-C 代码?

我认为这不可能如您想象/想要的那样。如果一个人可以访问源代码,那么他将能够修改任何东西——包括硬编码的校验和(无论如何他都可以修补检查代码)。

有没有更好的方法来实现我的总体目标?

嗯......如果你不能将你的库作为封闭源分发,那么不,不是真的......也许在许可证中要求不要修改代码,并阻止 - 使用服务器 - 那些怀疑改变代码。

但是尽管如此:你为什么这么关心代码的修改?

于 2013-01-26T19:11:39.320 回答
0

这种方法比没有提供更多的安全性:

  1. 添加在编译时生成库源代码的加密哈希的构建规则,并将结果构建到库中。
  2. 将哈希与库版本号一起发送到服务器。
  3. 在服务器上验证哈希和版本号在服务器上匹配。

对于坚定的攻击者来说,这是不安全的,因为他们可以简单地使用未修改版本的预先计算的哈希为库构建脚本。您可能会在某种程度上混淆该过程。

于 2013-01-26T19:51:16.980 回答