希望能尽量防止别人 反编译你的代码:

目前苹果审核规则可知,苹果官方是不希望你使用代码混淆的。。。如果发现了你用代码混淆,甚至会勒令你修改你的代码,否则下一次审核会直接移除你的app…尤其是跑脚本的那种。我猜想 ,目的是防止马甲包泛滥,并且苹果不希望你有所隐瞒。。。所以代码要请清清白白

参考审核规则

Guideline 2.3.1 - Performance

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 再存储

(2)Sqlite 数据库存储数据加密          :eg  realm 使用 AES-256 对称加密。每次创建新的 Realm 实例的时候,都需要提供相同的密钥。

(可以把密钥存在钥匙串里)

(3)网络传输数据加密:可以使用RSA非对称加密,保证传输的数据安全,防止代理抓包,伪造https证书抓包

  2.  代码混淆 是增加破解难度,不是完全不能破解

(1)字符串混淆 (方法名混淆) :可读性降低 ,部分敏感字符串混淆

(2)逻辑混淆     :逻辑混乱,降低可读性

(3)   指定敏感业务逻辑代码局部C 重写:把函数名隐藏在结构体里,以函数指针成员的形式存储。这样做的好处是,编译后,只留了下地址,去掉了名字和参数表,提高了逆向成本和攻击门槛。

(4)  垃圾代码生成:容易造成冗余代码,降级可读性

Tips:(1)混淆只是增加了别人的攻破时间成本。实际别人多花点时间 肯定是能攻破的

(2)代码混淆,如果针对应用整体,工作量大,操作耗时。一般都是针对业务敏感的关键代码进行混淆,轻量,好维护

(3)在 (2)的基础上,混淆的结果是毫无意思的字符串,苹果也是容易被拒绝的。所以混淆结果是跟功能,变量意义完全没关系的名称,即可。

eg:

如你的功能名是 - (void)addMessageCount。  你可以换成- (void)newErZi

newErZi 这种跟功能就完全没关系的名称。 并且也不是那种无意义的字符串 (参考8 中的混淆思路特别好,混淆的是一些单词)

混淆代码的本质是增加了别人的攻破时间成本。实际别人多花点时间 肯定是能攻破的。

   3.核心代码封装成库(这里指的是静态库framework 非开源 即闭源库),核心功能做逻辑混淆

  参考

iOS 提升代码的安全性,可以做哪些措施???的更多相关文章

  1. 值得细读!如何系统有效地提升Android代码的安全性?

    众所周知,代码安全是Android开发工作中的一大核心要素. 11月3日,安卓巴士全球开发者论坛线下系列沙龙第七站在成都顺利举办.作为中国领先的安卓开发者社区,安卓巴士近年来一直致力于在全国各大城市举 ...

  2. Cordova - 与iOS原生代码交互2(使用Swift开发Cordova的自定义插件)

    在前一篇文章中我介绍了如何通过 js 与原生代码进行交互(Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)),当时是直接对Cordova生成的iOS工程项目进行编辑操作的(添加 ...

  3. iOS 初探代码混淆(OC)

    iOS 初探代码混淆(OC) 前言 自己做iOS开发也有几年的时间了,平时做完项目基本就直接打包上传到Appstore上,然后做上架操作了.但是最近,客户方面提出了代码安全的要求.说是要做代码混淆,这 ...

  4. [iOS]一行代码集成空白页面占位图(基于runtime+MJRefresh思想)

    2018年01月03日阅读 2472   [iOS]一行代码集成空白页面占位图(基于runtime+MJRefresh思想) LYEmptyView 此框架是本人在5,6个月前,公司启动新项目的时候, ...

  5. 使用NodeJsScan扫描nodejs代码检查安全性

    使用NodeJsScan扫描nodejs代码检查安全性1.下载源码:https://github.com/ajinabraham/NodeJsScan2.下载Windows版docker toolbo ...

  6. 关于Unity发布iOS平台代码混淆问题

    之前在越狱手机里找到<永恒战士3>的程序发现是用Unity做的,拷出资源出来看的时候发现里面有游戏程序集,立马抽出来反编译了一下,发现里面的代码只有方法签名,没有方法体,还以为用什么高端混 ...

  7. .NET Core技术研究-通过Roslyn代码分析技术规范提升代码质量

    随着团队越来越多,越来越大,需求更迭越来越快,每天提交的代码变更由原先的2位数,暴涨到3位数,每天几百次代码Check In,补丁提交,大量的代码审查消耗了大量的资源投入. 如何确保提交代码的质量和提 ...

  8. 痞子衡嵌入式:在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺. 恩智浦 MCU SE 团队近期一直在加班加点赶 SBL 项目 ...

  9. iOS团队代码规范

    iOS团队代码规范 工程之始可能需要的工具: 1.使用CocoaPods类库管理工具.CocoaPods安装和使用教程. 2.下载安装注释插件VVDocumenter-Xcode. 一.项目结构管理 ...

随机推荐

  1. hdu 3760(2次bfs求最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3760 思路:首先是建反图,从点n开始做spfa求出n到各点的最短路,然后从1点开始搜最小序列,对于边( ...

  2. 如何改变placeholder的样式

    input::-webkit-input-placeholder { color: #B2B2B2; } input:-moz-placeholder { color: #B2B2B2; } inpu ...

  3. Java Web项目--使用Servlet生成一个页面

    为了生成一个servlet对应的网页.我们需要新建一个web.xml,其中将会放置servlet的相关信息.web.xml文件放置在WebContent/WEB-INF/目录下.(我们在Eclipe中 ...

  4. 创建4个线程,两个对j加一,两个对j减一(j两同两内)

    package multithread; public class MyThread { //j变量私有 private int j; //同步的+1方法 private synchronized v ...

  5. DOM API querySelector与querySelectorAll的用法

    DOM API querySelector与querySelectorAll的用法:  http://www.qttc.net/201309371.html querySelectorAll与quer ...

  6. json学习之JSONArray的应用(转载)

    从json数组中得到相应java数组,如果要获取java数组中的元素,只需要遍历该数组. 1 /** 2 * 从json数组中得到相应java数组 3 * JSONArray下的toArray()方法 ...

  7. MySql指令大全(转载)

    1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...

  8. Java自定义注解的定义与使用

    Java注解 Annotation(注解)是JDK5.0及以后版本引入的.它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查.注解是以‘@注解名’在代码中存在的,根据注解参数的个数,我们可 ...

  9. Vue.js_构造器及其实例化概念

    Vue构造器 1.Vue.js是一个构造函数,编程中称之为构造器 2.每一个new Vue() 都是一个Vue构造函数的实例,这个过程叫做实例化 3.构造函数需要将其实例化后才会启用 var vm = ...

  10. myeclipse 代码提示(alt+/)

    windows -->preference-->general-->keys找到 alt+/ 解除绑定 windows -->preference-->general-- ...