但願能儘可能防止別人 反編譯你的代碼: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 非開源 即閉源庫),核心功能作邏輯混淆
參考