【问题标题】:How safe is information contained within iPhone app compiled code?iPhone 应用程序编译代码中包含的信息有多安全?
【发布时间】:2013-06-06 00:56:54
【问题描述】:

我正在和一些朋友讨论这个问题,我们开始对此感到疑惑。购买您的应用后,是否有人可以访问实际 Objective-c 代码中包含的 URL 或其他值?

我们最初的感觉是没有,但我想知道是否有人以某种方式拥有明确的知识?

我知道 .plist 文件很容易获得。

示例可能是这样的:

-保存在字符串中的 URL 值

-API 密钥和秘密值

【问题讨论】:

  • DRM 人多年来一直试图解决这个问题,但归根结底是“我只希望设备能够读取它,而不是让人们读取它”,这就是就像“我希望人们能够阅读它,我只是不希望他们能够阅读它”。您真正可以做的唯一事情是通过使用某种算法(例如 rot13 或更高级的算法)“加扰”字符串来混淆字符串,但是如果您使用加密,那么您必须将密钥存储在可执行文件中的某个位置。

标签: iphone objective-c security decompiling


【解决方案1】:

是的,使用 strings 工具 (see here) 可以轻松地从编译的应用程序中提取字符串和信息,使用 class-dump-x (check here) 提取类信息实际上甚至非常容易。

只是一些思考的食物。

编辑:一种简单但不安全的隐藏秘密信息的方法是将其混淆,或将其分割成小块。

以下代码:

NSString *string = @"Hello, World!";

将产生“你好,世界!”使用strings 工具。 像这样编写代码:

NSString *string = @"H";
string = [stringByAppendingString:@"el"];
string = [stringByAppendingString:@"lo"];
...

将显示输入的字符,但不一定按顺序显示。

再说一遍:容易做,但不是很安全。

【讨论】:

  • 即使只是暗示安全,虽然默默无闻也应该让你得到 -1。你应该告诉人们,他们试图完成的是一个漏洞。虚假的希望让人们被黑。
  • @Rook:有时默默无闻是合适的,例如如果您在游戏中隐藏作弊码,那么任何更安全的东西都将是矫枉过正。 ALSO:如果这就是你的感受,你为什么不投反对票?
  • @Rook,虽然我绝对认为你可以不同意我的观点,但我不确定你是否完全阅读了我的帖子,或者考虑过我所说的。我一定要提到该方法不安全,并且没有人抱有希望。这绝对不值得反对。再说一次,混淆可能足够强大,这取决于混淆的用途(正如@benzado 正确指出的那样)。
  • @itaiferber 是的,但你应该问问他想隐藏什么。他可能正在做一些愚蠢的事情,例如隐藏 HTTP Auth 中使用的用户名/密码,以用于暴露令人讨厌的功能的 REST 服务。解决方案是编写安全的 REST 服务,当您可以嗅探网络时,隐藏用户名/密码并没有什么用处。
  • @Rook/@itaiferber - 感谢大家的参与。我了解@itaiferber 回答的上下文。我所追求的信息在第一部分。
【解决方案2】:

当您购买应用程序时,它会以“FooBar.ipa”的形式保存在您的硬盘上;该文件实际上是 Zip 格式。您可以解压缩并检查内容,包括在可执行文件中搜索字符串。试试看!代码中的常量值不会以任何方式压缩、加密或加扰。

【讨论】:

    【解决方案3】:

    我知道这已经有人回答了,但我也想给出我自己的建议。

    再次,请记住,所有混淆技术都不是 100% 安全的,因此不是最好的,但通常它们“足够好”(取决于您想要混淆的内容)。这意味着一个坚定的破解者无论如何都能够读取您的字符串,但这些技术可能会阻止“休闲破解者”。

    我的另一个建议是使用简单的 XOR 来“加密”字符串。这非常快,如果您通过 App Store 销售应用程序,则不需要任何授权(它不属于需要授权才能导出它们的算法类别)。

    在 Cocoa 中执行 XOR 有很多 sn-ps,例如:http://iphonedevsdk.com/forum/iphone-sdk-development/11352-doing-an-xor-on-a-string.html

    您使用的密钥可以是任何字符串,可以是无意义的字符/字节序列,也可以是一些有意义的东西以使读者感到困惑(例如,使用方法名称,例如“stringWithContentsOfFile:usedEncoding:error:”)。

    【讨论】:

      猜你喜欢
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多