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. 一.项目结构管理 ...
随机推荐
- hdu 1561(树形dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1561 思路:dp[u][i]表示以u为根的树选了i个子节点. #include<iostream ...
- ASp.Net控件的生命周期
服务端事件 页面生命周期 描述 Init Initialization 初始化控件树 LoadViewState Unpack ViewState 从ViewState里提取出状态信息 LoadCon ...
- codevs 5965 [SDOI2017]新生舞会
分数规划的裸题. 不会分数规划的OIer.百度:胡伯涛<最小割模型在信息学竞赛中的应用> /* TLE1: last:add(i,j+n,1e9,(real)((real)a[i][j]- ...
- [SCOI2010]字符串
思路: 设1为向(1,1)方向走,0为向(1,-1)方向走.那么题意可转化为从(0,0)走到(n+m,n-m)且不能跨过y=0的方案数.总方案数C(n+m,n),然后要减去不合法的即线路通过y=-1的 ...
- 【黑金原创教程】【TimeQuest】【第四章】内部延迟与其他
声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...
- Linux Centos 开启防火墙 FirewallD is not running
转载自:http://www.z4zr.com/page/1006.html CentOS7用firewall命令“替代”了iptables.在这里我们需要区分“iptables服务”和“iptabl ...
- Tortoise SVN 使用
1.添加文件或文件夹 2.删除文件或文件夹 ①If you want to delete an item from the repository, but keep it locally as an ...
- cross-compler toolchains--clfs
http://www.cnblogs.com/leaven/archive/2010/11/17/1879679.html
- SqueezeNet
虽然网络性能得到了提高,但随之而来的就是效率问题(AlexNet VGG GoogLeNet Resnet DenseNet) 效率问题主要是模型的存储问题和模型进行预测的速度问题. Model Co ...
- python 通过文件路径获取文件hash值
import hashlib import os,sys def CalcSha1(filepath): with open(filepath,'rb') as f: sha1obj = hashli ...