如何验证客户端代码没有被改变?

时间:2013-01-26 19:05:16

标签: ios objective-c security

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

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

我在这里有几个问题:

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

2 个答案:

答案 0 :(得分:3)

  

如何在编译时不引人注意地校验客户端SDK Objective-C代码?

我认为这不可能像你想象/想要的那样。如果有权访问源代码,那么他将能够修改任何内容 - 包括硬编码的校验和(并且他可以修改检查代码)。

  

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

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

但是,为什么你如此关心代码的修改呢?

答案 1 :(得分:0)

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

  1. 添加构建规则,该规则在编译时生成库源代码的加密哈希,并将结果构建到库中。
  2. 将库版本号的哈希值发送到服务器。
  3. 在服务器验证服务器上的哈希值和版本号匹配。
  4. 对于确定的攻击者来说,这是不安全的,因为他们可以使用未修改版本的预先计算的哈希为该库构建脚本。您可能会在某种程度上混淆该过程。