我只是用我自己的 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 或找到一些关于如何在 here 和 here 中混淆字符串的想法。我建议自己编写加密/解密函数,并使用
NS_INLINE
作为解密函数,使反编译时的代码更加复杂。 - 但是还有一个问题;该字符串在代码中被加密,但它会在运行时在某个时候被解密,即使您在使用后立即删除解密的字符串。有人可以很容易地调试代码并 Hook 解密的字符串。幸运的是,here 中描述了一些防止调试的方法。
不过,这些都是众所周知的方法,只会保护代码免受好奇的眼睛。如需更多信息,您可以查看此 tutorial 或阅读 Apple documentation 或此 book。
关于ios - 使应用程序反编译保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23970217/