但愿能尽可能防止别人 反编译你的代码:html
目前苹果审核规则可知,苹果官方是不但愿你使用代码混淆的。。。若是发现了你用代码混淆,甚至会勒令你修改你的代码,不然下一次审核会直接移除你的app…尤为是跑脚本的那种。我猜测 ,目的是防止马甲包泛滥,而且苹果不但愿你有所隐瞒。。。因此代码要请清清白白ios
参考审核规则git
Guideline 2.3.1 - Performancegithub
We discovered that your app contains hidden features. Specifically, It would be appropriate to remove all code obfuscation and selector mangling or to explain in detail the purpose of its inclusion before resubmitting for review.数据库
那么,咱们想提升一些代码的安全性,还有哪些手段措施:
1. 数据加密:安全
1.本地数据数据加密:网络
(1)NSUserDefaults 里关键数据加密 : eg base64 再存储app
(2)Sqlite 数据库存储数据加密 :eg realm 使用 AES-256 对称加密。每次建立新的 Realm 实例的时候,都须要提供相同的密钥。 ide
(能够把密钥存在钥匙串里)函数
(3)网络传输数据加密:能够使用RSA非对称加密,保证传输的数据安全,防止代理抓包,伪造https证书抓包
2. 代码混淆 是增长破解难度,不是彻底不能破解
(1)字符串混淆 (方法名混淆) :可读性下降 ,部分敏感字符串混淆
(2)逻辑混淆 :逻辑混乱,下降可读性
(3) 指定敏感业务逻辑代码局部C 重写:把函数名隐藏在结构体里,以函数指针成员的形式存储。这样作的好处是,编译后,只留了下地址,去掉了名字和参数表,提升了逆向成本和攻击门槛。
(4) 垃圾代码生成:容易形成冗余代码,降级可读性
Tips:(1)混淆只是增长了别人的攻破时间成本。实际别人多花点时间 确定是能攻破的
(2)代码混淆,若是针对应用总体,工做量大,操做耗时。通常都是针对业务敏感的关键代码进行混淆,轻量,好维护
(3)在 (2)的基础上,混淆的结果是毫无心思的字符串,苹果也是容易被拒绝的。因此混淆结果是跟功能,变量意义彻底不要紧的名称,便可。
eg:
如你的功能名是 - (void)addMessageCount。 你能够换成- (void)newErZi
newErZi 这种跟功能就彻底不要紧的名称。 而且也不是那种无心义的字符串 (参考8 中的混淆思路特别好,混淆的是一些单词)
混淆代码的本质是增长了别人的攻破时间成本。实际别人多花点时间 确定是能攻破的。
3.核心代码封装成库(这里指的是静态库framework 非开源 即闭源库),核心功能作逻辑混淆
参考