ios - 使应用程序反编译保存

标签 ios xcode compilation decompiling

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

最佳答案

要事第一;如果有人真的想破解一个应用程序,他/她会找到一种方法来做到这一点。此外,Cydia 和 Jailbreak 不会帮助您保护您的应用程序。

您应该单独加密字符串并在您的代码中使用这个加密的字符串。自然地,字符串应该在使用前在运行时被解密。这很容易破解,您可以采取这些措施使其更难破解;

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

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

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

关于ios - 使应用程序反编译保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23970217/

相关文章:

ios - 在 objective-c 中从NSMutableArray转换为JSON

ios - 自定义导航栏最小字体比例?

ios - 更改静态 UITableViewCell 的高度以适合内容

ios - SpriteKit `sprite.atlas` 包何时以及如何压缩/优化?

c++ - ofxOSC.h 的插件问题

c++ - 将静态库链接到 Boost Python(共享库)- 导入错误

c++ - 目标平台无法创建共享库

c# - 运行时编译期间收到 “You must add a reference to assembly ' netstandard'”错误

ios - UIButton 标题文本选择特定文本并复制它

ios - 将自定义对象添加到 NSMutablearray 不起作用,添加对象返回空数组