【问题标题】:Make application decompiling save使应用程序反编译保存
【发布时间】:2014-05-31 12:42:17
【问题描述】:

我只是用我自己的 DRM 制作了一个 iOs 应用程序(该应用程序用于 Cydia)。我想知道如何保护我的应用程序免受反编译。我反编译了我的应用程序,只是为了检查“感兴趣的”用户可以看到什么。我能够看到每个字符串,敏感字符串。然后我反编译了 FindMyiPhone,我看到每个字符串都替换为"some string from a protected section" 有人知道保护字符串吗?

【问题讨论】:

  • 您要使用 Cydia 并且想要安全?矛盾的!
  • @Zaph 我想让它尽可能安全
  • 您是否查看过 FindMyiPhone 应用程序中的“.strings”文件?我在“en.lproj/Localizable.strings”中看到 400 个纯文本字符串。您甚至不需要“反编译”,只需将“.app”重命名为“.zip”,双击解压并查看文件。
  • .strings 文件用于本地化,我认为他们不会在其中添加 iCloud API 的 URL。他们以某种方式隐藏或加密了汇编文件中的字符串。
  • 如果您只想保护一些简单的东西,例如 URL,您可以使用钥匙串。但是保护 URL 几乎不值得,发送的所有内容都可以通过 Charles Proxy 等网络分析器看到——甚至是 https。

标签: ios xcode compilation decompiling


【解决方案1】:

首先要做的事;如果有人真的想破解一个应用程序,他/她会想办法做到这一点。此外,Cydia 和越狱对保护您的应用程序没有多大帮助。

您应该单独加密字符串并在您的代码中使用此加密字符串。自然,字符串在使用前应该在运行时解密。这很容易破解,这些是你可以做的让它更难的事情;

  • 在项目构建设置中将“部署后处理”和“剥离链接产品”标志设置为 YES。这将剥离symbol table 并使获取关键变量和方法名称(以及它们的地址)变得更加困难。
  • 除了第一步,你还可以使用预处理器指令(尤其是#define)来使编译后的代码更加令人费解。例如;

    #define importantString temp
    @property (nonatomic, strong) NSString * importantString;
    
  • 隐藏字符串的内容更加棘手。您应该加密字符串,仅在代码中使用加密字符串,并在需要时在运行时对其进行解密。这样,当应用程序被反编译时,您的字符串将被隐藏,任何攻击者都必须解决您的加密方法。您可以直接使用 AES 或在 herehere 中找到一些关于如何混淆字符串的想法。建议自己编写加密/解密函数,解密函数使用NS_INLINE,这样反编译时代码会更复杂。
  • 但是还有另一个问题;该字符串在代码中被加密,但它会在运行时在某些时候被解密,即使您在使用它后擦除解密的字符串也是如此。有人可以轻松调试代码并挂钩解密的字符串。幸运的是,here 中描述了一些防止调试的方法。

不过,这些都是众所周知的方法,只会保护代码免受好奇的目光。如需更多信息,您可以查看此tutorial 或阅读Apple documentation 或此book

【讨论】:

    猜你喜欢
    • 2012-06-17
    • 2013-12-07
    • 2012-07-28
    • 2010-10-17
    • 2016-10-29
    • 2015-09-18
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多