iOS 提升代码的安全性,可以做哪些措施???
希望能尽量防止别人 反编译你的代码:
目前苹果审核规则可知,苹果官方是不希望你使用代码混淆的。。。如果发现了你用代码混淆,甚至会勒令你修改你的代码,否则下一次审核会直接移除你的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 非开源 即闭源库),核心功能做逻辑混淆
参考
- 1.https://www.jianshu.com/p/d9cd97c77549
- 2.http://www.cocoachina.com/ios/20170324/18955.html
- 3.https://www.jianshu.com/p/a2ed798a7f62?from=timeline
- 4.https://blog.csdn.net/yiyaaixuexi/article/details/29210413 iOS安全攻防(二十四):敏感逻辑的保护方案(1)
- 5.https://blog.csdn.net/yiyaaixuexi/article/details/29201699 iOS安全攻防(二十三):Objective-C代码混淆
- 6.https://github.com/guogh/iOSApplicationReinforcement/issues/3
- 7 . https://github.com/LarkNan/TestConfusion/issues
- 8.https://github.com/TMWu/TMConfuse (由于上架过程中混淆词汇中存在敏感词汇,被苹果爸爸拒了一次,所以修改随机单词拼接规则,由通用的单词拼接,可以自行修改)
- 9.https://www.jianshu.com/p/ca2f329254e8 (iOS 相关库知识)
iOS 提升代码的安全性,可以做哪些措施???的更多相关文章
- 值得细读!如何系统有效地提升Android代码的安全性?
众所周知,代码安全是Android开发工作中的一大核心要素. 11月3日,安卓巴士全球开发者论坛线下系列沙龙第七站在成都顺利举办.作为中国领先的安卓开发者社区,安卓巴士近年来一直致力于在全国各大城市举 ...
- Cordova - 与iOS原生代码交互2(使用Swift开发Cordova的自定义插件)
在前一篇文章中我介绍了如何通过 js 与原生代码进行交互(Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)),当时是直接对Cordova生成的iOS工程项目进行编辑操作的(添加 ...
- iOS 初探代码混淆(OC)
iOS 初探代码混淆(OC) 前言 自己做iOS开发也有几年的时间了,平时做完项目基本就直接打包上传到Appstore上,然后做上架操作了.但是最近,客户方面提出了代码安全的要求.说是要做代码混淆,这 ...
- [iOS]一行代码集成空白页面占位图(基于runtime+MJRefresh思想)
2018年01月03日阅读 2472 [iOS]一行代码集成空白页面占位图(基于runtime+MJRefresh思想) LYEmptyView 此框架是本人在5,6个月前,公司启动新项目的时候, ...
- 使用NodeJsScan扫描nodejs代码检查安全性
使用NodeJsScan扫描nodejs代码检查安全性1.下载源码:https://github.com/ajinabraham/NodeJsScan2.下载Windows版docker toolbo ...
- 关于Unity发布iOS平台代码混淆问题
之前在越狱手机里找到<永恒战士3>的程序发现是用Unity做的,拷出资源出来看的时候发现里面有游戏程序集,立马抽出来反编译了一下,发现里面的代码只有方法签名,没有方法体,还以为用什么高端混 ...
- .NET Core技术研究-通过Roslyn代码分析技术规范提升代码质量
随着团队越来越多,越来越大,需求更迭越来越快,每天提交的代码变更由原先的2位数,暴涨到3位数,每天几百次代码Check In,补丁提交,大量的代码审查消耗了大量的资源投入. 如何确保提交代码的质量和提 ...
- 痞子衡嵌入式:在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺. 恩智浦 MCU SE 团队近期一直在加班加点赶 SBL 项目 ...
- iOS团队代码规范
iOS团队代码规范 工程之始可能需要的工具: 1.使用CocoaPods类库管理工具.CocoaPods安装和使用教程. 2.下载安装注释插件VVDocumenter-Xcode. 一.项目结构管理 ...
随机推荐
- JavaScript入门之函数返回值
函数返回值 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF ...
- hdu 4291(矩阵+暴力求循环节)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4291 思路:首先保留求出循环节,然后就是矩阵求幂了. #include<iostream> ...
- Object Slicing in C++
In C++, a derived class object can be assigned to base class, but the other way is not possible. cla ...
- Android 切换主题 (二)
Android 切换主题 (二) 背景 我原来写过一篇文章关于 android 切换主题的文章 -- Android 切换主题以及换肤的实现 , 里面介绍了如何使用 setTheme() 来切换主题, ...
- 常问面试题:C++中sizeof的陷阱及应答
C++中sizeof是经常被问到的一个概念,比如,下面的几个关于sizeof的面试题反复出现在各大IT公司的技术面试当中,我们有必要完全理解并掌握.注:在曾经面试大公司时,我的确被问到过这样的问题. ...
- java基础---->java自带的xml解析
在查看公司框架的源码的时候,发现框架用的是jdk自带的xml解析.今天,想着对它总结一下.从未放弃过爱你,只是从浓烈变得悄无声气. 利用jdk自带的xml创建文档 一. CreateXmlFile类如 ...
- Python--进阶处理3
# ===================第三章:数字日期和时间==================== # ---------------------数字的四舍五入----------------- ...
- 第八课——MySQL优化之InnoDB基础原理
一.事务隔离级别 理解各种事务隔离级别的优缺点 (一)四种事务隔离级别总结 (二)四种事务隔离级别下,去重现脏读现象.不可重复读现象.幻读现象 1.在RU隔离级别下,会出现脏读现象 2.在RC隔离级别 ...
- traceroute tracert 路由器地址 清单 192.168.2.1 网关路由器地址
[root@a ~]# traceroute www.ijntv.cntraceroute to www.ijntv.cn (42.81.61.31), 30 hops max, 60 byte pa ...
- 在nginx启动后,如果我们要操作nginx,要怎么做呢 别增加无谓的上下文切换 异步非阻塞的方式来处理请求 worker的个数为cpu的核数 红黑树
nginx平台初探(100%) — Nginx开发从入门到精通 http://ten 众所周知,nginx性能高,而nginx的高性能与其架构是分不开的.那么nginx究竟是怎么样的呢?这一节我们先来 ...