iOS APP 如何做才安全

2023-11-14

本来 写了一篇《iOS 如何做才安全--逆向工程 - Reveal、IDA、Hopper、https抓包 等》,发现文章有点杂,并且“iOS 如何做才安全”这部分写的越来越多,觉得 分出来更清晰一点。所以拆成两部分。 同时也是为了大家能 共同讨论,毕竟不是专业搞安全的,如果文中有错误 欢迎指正,共同进步。

 

iOS应用的安全性 常常被大家忽视。

iOS 如何做才安全:

  1、ipa包加壳

  首先,我们可以通过iTunes 下载 AppStore的ipa文件(苹果 把开发者上传的ipa包 进行了加壳再放到AppStore中),所以我们从AppStore下载的ipa都是加壳的,所以不能直接用来反编译。

  得到ipa文件 可以分析APP 里包含的一些资源,如:图片、plist文件、静态wap页、.bundle 等。

  所以不要 在plist文件、项目中的静态文件中 存储关键的信息,如果要保存,记得 对称加密(这样可以增加破解的难度)。

  如果是越狱的手机,从 手机上的PP助手下载的ipa包 都是 脱壳之后的,可以直接用来反编译。

 

  2、敏感信息存储位置

  我们可以用软件 查看 APP的沙盒,查看里面存储的 文件:sqlite、plist(NSUserdefault会存到Library下的Preferences中 的 plist文件中)、图片等,NSUserdefault 中不要保存关键信息,如果要保存,还是加密吧。。sqlite也是这样子的。

  iOS 8.3之前 不越狱的手机也可以 直接用MAC上的PP助手、iTool 来查看 任何APP的沙盒(系统APP除外)。iOS 8.3之后就不行了。

  越狱手机都可以查看任意APP的沙盒,包括系统APP的沙盒。还有iOS的系统目录等。

 

  3、设备安全(越狱,丢失)

  越狱手机直接用PP助手下载的就是 脱壳的ipa,所以不用再脱了。对AppStore下载的ipa包 可以用工具对加壳的ipa 进行脱壳,再用IDA、Hopper 进行反编译,进行分析 ,可以得到 近乎易懂的 伪代码。但是反编译后的代码 要 一个方法一个方法的去分析,类似面向过程编程。。当然也有工具 去提取 项目中的所有.h文件。不过 反编译 终归是个 耐心的活,急躁的人容易砸电脑。

 

  4、APP反编译(逆向工程)

  所有的APP都是可以反编译的,所以 很关键的数据 最好通过接口获取。

  那么接口如何保证安全呢。首先用HTTPS,虽然HTTPS已经很安全了,但是数据也是有可能被破解的,这个后面会介绍。。所以 接口一定要自己加密。

  非对称加密(RSA)现在 还是没有办法破解的,但是因为 非对称加密的效率低,所以很少有企业将所有的接口都用非对称加密。

  接口如果用对称加密,密钥 放到代码里 是能被反编译出来的。如果你的 APP的安全性很高,就不要把密钥 写到代码里。

 

    可以这样处理:

  先通过非对称加密的接口 获取密钥,然后 再在 后面的 接口通信中 用这个密钥进行加密。这样做 就类似 HTTPS 的简化版实现了。安全性很高。目前应该 是不能破解的。

 

 

  5、代码内容加密(对称加密/非对称加密)

  根据APP的安全性,也可以把 关键数据 写在代码里,可以保存的是加密后的数据。比如,我给一个变量赋值:U2FsdGVkX1+rN+sgpLmOYTqoVhRRerZj9oobZAIPzjo=,你不知道 我这个字符串解密后是 123456,我只是使用的时候才解密处理用。

  这样也只是增加了黑客获取关键数据的难度。

 

  6、安全密钥更新周期

  密钥要定期更换。比如 3个月 或半年换一次,如果密钥是从接口通过非对称加密 获取的,直接修改服务端就可以了。

  如果密钥是写在代码里的。就等APP升级新的版本的时候,新版本的APP和其对应的接口版本 都 修改为新的密钥 就可以了。

  旧的接口版本和APP版本还用以前的密钥,等强制更新的时候才会失效。

  如果一个APP 一个密钥用上几年都不变 ,是很危险的。离职的人员都可以直接用以前 的代码 来获取相关的数据。特别是 支付相关的,有的服务端甚至没有 去校验支付的金额或其他数据,导致 离职人员用1分钱 可以买到 任何价格的 线上产品(服务端这种在线上环境留后门的安全性问题,我是真的遇到有人这么搞)。。

 

  7、代码混淆

  最好能 进行 代码混淆,能增加反编译的难度,当然只是增加了难度,还是能破解的。但是 代码混淆 的 性价比是很高的,就是你这边付出了 一点时间,而黑客 就要多付出几十倍 的时间。。其实 接口 自己加密 的性价比也很高。

 

  8、接口安全(双向加密)

  接口返回的数据 最好也进行 加密。比如,现在大家都连我的热点,或者代理服务器,我是有可能 直接 获取你的APP的 HTTPS 解密后的json数据(如何获取相见《逆向工程》)。当然,如果你觉得 你的APP返回的json数据都是 不重要的,也可以不对数据进行加密。

  像微信、QQ、支付宝这种 安全性高的,通信两边的数据 收发  都 应该 进行加密的。

 

  9、通讯安全,第三方库漏洞

  像HTTPS本身 是否有漏洞这种我们就不去说了。就 去年iOS的AFNetworking 漏洞事件,完全是 代码的问题。虽然不是HTTPS的安全机制的问题。但是 黑客还是能很容易拿到HTTPS解密后的数据。

  去年iOS的AFNetworking曝SSL漏洞  就涉及2.5万个APP。 有的银行的APP,只用了HTTPS,通信都不加密,就很容易拿到明文数据了。有的APP里的各种数据都 采用复杂的加密算法,破解人员看到都烦,去破解这个APP的时间还不如去搞其他的几个APP。

  HTTPS 本身是安全的。但是数据还是可能被破解。所以 不要觉得 我只用HTTPS 就安全了。理论上 说任何 的 协议、代码都是可能有漏洞的,只是有的现在 还没被发现或破解,并不代表一直不能被破解。。

 

 

  10、敏感信息安全加密

  黑客不会 去一个手机一个手机的 把沙盒数据 拿出来 来看每个用户的数据(黑客也不可能拿到你的手机)。但是如果黑客捡到 你的手机 ,都不用登陆微信  就可以 通过微信APP的沙盒 拿到你和小三的偷情聊天记录、能拿到你的银行卡号,你的手机号(很多APP都把手机号、银行卡号、聊天记录 明文保存在沙盒里)。。你是不是会觉得微信 怎么这么low。我们只是拿微信举个例子,微信还不会这么low。

 

  11、通讯网络安全

  黑客最主要的还是通过网络来获取 他们想要的数据(网络的安全级别是最高的)。如果恰好 你的APP 加密密钥 明文 保存到了沙盒里 或者 你的 数据通信 还没有进行加密,恭喜你,你的数据和裸奔没啥区别。。

  有人说:“我就做了个聊天的APP,没啥机密信息。再说 大家连的都是 公司的wifi、4G网络,不会有问题的,所以我的通信才不加密,麻烦。”

    举个搞笑的栗子:

  你现在在飞机场,连着免费wifi,正在和副总裁在微信里 谈着 价值100个亿的创意的时候,聊天记录已经被 黑客 抓包获取 ,然后卖给竞争对手了。。(只是举个例子,微信的加密是相当安全的,微信很多的通讯还是用的HTTP,但是就算你拿到他们数据,也是无法解密的。这里举例用微信,只是为了方便大家理解。免费wifi确实有可能是黑客设的坑,新闻上经常报道)。

  所以不要让自己的数据裸奔。。。

 

  12、代码调试信息安全管理

    代码方面:

    12.1、在release环境下 NSLog 不要打印日志 否则iOS系统日志里都可以查看到,在.pch文件中加下面的几行代码就可以解决。很早大家都这么做了。

1 #ifdef DEBUG
2 #define NSLog(...) NSLog(__VA_ARGS__)
3 #define debugMethod() NSLog(@"%s", __func__)
4 #else
5 #define NSLog(...)
6 #define debugMethod()
7 #endif

    现在很多APP的部分页面开始使用 Swift,在Swift 文件中是允许用 NSLog 的语法来打印,但是 不要这么做,因为 这样 就会导致这段代码在 release环境 中也可以正常输出。通过 PP助手、iTools,可以直接 查看 iOS的系统日志。也可以直接 通过Xcode-Window-Devices - 点最下面的向上的小箭头,来看日志。

    所以Swift中打印 还是用 print吧。

 

    12.2、AFNetworking 的 allowInvalidCertificates 属性 要设置成 false,validatesDomainName属性 设置成true。否则 HTTPS通信就可以被解密。这块涉及到AFnetworking 去年的通信漏洞 就不详述了。

    但是一般开发的 测试环境 的HTTPS 不是CA颁发的,而是自签名证书,访问的也不是域名,而是IP。所以可以在测试环境 忽略证书和域名,代码如下:

1 #ifdef DEBUG
2         manager.securityPolicy.allowInvalidCertificates = YES;
3         manager.securityPolicy.validatesDomainName = NO;
4 #endif

 

  答疑:

  像上文中提到的 接口模拟HTTPS 进行通信,基本上是破解不了的。非对称加密毕竟还是 很安全的。

 

  黑客也是有时间成本的,有性价比的。文中多次 写到,可以增加破解的难度,不是这样做了 就一定 不会被破解。

 

  有人会觉得 在 代码中 加密了 反正也 能被破解,那还加啥密,反正没啥卵用。(比如 关键数据 加密 后 存到代码里)

  打个比方:我装个防盗门 反正也防不住贼,干脆...就别装门了,反正也没啥卵用。

 

  再比如:有几个房间放着同样价值的东西(账户数据、聊天数据等)。但这几个房间,有的是全封闭防炸弹的,有的就只是一个木门,有的甚至门都是开着的,你会选择哪个。。
  这就像为什么现在 iOS 系统的越狱速度越来越慢,不是说越狱人员的水平变低了,而是现在越狱的用户越来越少,像盘古这种公司通过越狱获得的盈利也越来越少了,自然投入的精力就会变少。

 

  关键数据加密后,存到代码里,这样总比你直接把明文保存到代码中更难破解,我们要做的是让黑客知道,你要来惹我,你就必须付出更多的时间和精力。

 

转至:iOS APP 如何做才安全

 

转载于:https://www.cnblogs.com/1024Planet/p/5810246.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS APP 如何做才安全 的相关文章

  • cv2.VideoCapture()

    一 语法 cap cv2 VideoCapture 0 说明 参数0表示默认为笔记本的内置第一个摄像头 如果需要读取已有的视频则参数改为视频所在路径路径 例如 cap cv2 VideoCapture video mp4 二 语法 cap
  • el-tab 切换时添加动画

    需求 在点击切换页面的时候添加动画 解决 用的是 Animate css 1 安装依赖 npm install animate css save 2 在main js里面引入 import animate css 3 在页面中使用 第一步
  • 断开的管道 java.io.IOException: Broken pipe

    此类报错首次接触 在阅览一些文章后 总结如下 pipe是管道的意思 管道里面是数据流 通常是从文件或网络套接字读取的数据 当该管道从另一端突然关闭时 会发生数据突然中断 即是broken 对于文件File来说 这可能是文件安装在已断开连接的
  • VM ware14在win10系统出现虚拟机繁忙/无法正常启动、关闭虚拟机

    VM版本 VM warestation14 windows版本 Windows10 Linux版本 CentOS 7 出现的一些问题 1 无法正常关闭虚拟机 关机界面最后的单词显示为 halting 并一直呈该状态 2 强制关闭虚拟机电源后
  • 【C语言进阶】重新认识字符型变量

    引例 首先我们看一个简单的例子 include
  • 再谈递归——直接法 vs 递归法

    直接法就是有一个直接的思路 算法来解决问题 什么样的数据结构 第一步干什么 然后干什么 最后干什么 递归法的感觉是 好像也没想出什么具体的算法 莫名其妙的就把题解了 解完也没什么深刻的印象怎么解的 因为递归就是base case 递推 而b
  • SQLSever创建表和约束

    表的基本概念 概念 由数据按一定的顺序和格式构成的数据集合 是数据库的主要对象 每一行代表一个记录 每一列代表一个属性 设计表 创建前考虑如下特征 表中要包含数据类型 表中列数 每一列中的数据类型 那些列允许空值 是否使用以及何时约束 那些
  • eclipse实现前后端交互的初步操作

    首先new创建 选择Other 在最下面 然后 然后next起名 再两次next后进行选择 创建完成如下 所有的前端代码写在WebContent里面 所有的Java代码写在Java Resource里的src里面 创建html文件 在win
  • CSS之背景样式及边框样式

    1 背景样式 常用属性 background color 背景颜色 background image 背景图片 background repeat 背景图片的平铺方式 background position 背景图片的位置 backgrou
  • 加密、解密、加签、验签专题

    首先明确几个名词 加密 发送方利用接收方的公钥对要发送的明文进行加密 解密 接受方利用自己的私钥进行解密 公钥和私钥配对的 用公钥加密的文件 只有对应的私钥才能解密 当然也可以反过来 用私钥加密 用对应的公钥进行解密 签名 发送方用一个哈希
  • 智能家居系统中网关与服务器如何连接?

    原文点击打开链接 在新型智能家居系统中 家庭网关将取代PC机作为家庭控制中心 传统客户端 服务器模式不能保持家庭网关与远程服务器实时连接 基于百万级的家庭网关与服务器保持长连接的目的 采用主从服务器框架进行负载均衡 心跳机制保障网关与服务器
  • 容器安全最佳实践入门

    作者 Cloudberry 译者 王者 策划 万佳 保证容器安全是一项复杂的任务 这个问题域很广 面对大量的检查清单和最佳实践 你很难确定采用哪个解决方案 所以 如果你要实现容器安全策略 应该从哪里开始呢 我建议从最基本的开始 理解容器安全
  • v-model.number的坑,自动清除小数点后的0

  • Android7.0 获取蓝牙设备电量

    参考http blog csdn net jcxxxxx55 article details 52847291 locationNum 4 fps 1 1 修改 HeadsetStateMachine packages apps Bluet
  • 有趣的数据结构算法16——线索二叉树的构建

    有趣的数据结构算法16 线索二叉树的构建 什么是线索二叉树 线索二叉树的实现形式 线索二叉树的代码实现 线索二叉树的初始化 线索的串联 全部实现代码 GITHUB下载连接 深度遍历不仅仅有递归的方法噢 还有通过建立线索二叉树进行遍历的方法
  • 在pycharm上安装Tensorflow1.13 win10

    Tensorflow安装教程 清明回家就折腾了几天的tensorflow 我是使用pycharm安装的 所以下面基于pycharm进行安装 tensorflow1 13 0基础配置 python3 7 cuda10 0 适合cuda的cuD
  • 《数字图像处理》笔记—灰度变换

    3 1 背景 本章主要讲解空间域的图像处理方法 直接对图像中的像素进行操作 主要包括 灰度变换和空间滤波 灰度变换是对图像的各个像素进行操作 空间滤波是对每个像素的邻域进行操作 3 1 1 灰度变换和空间滤波基础 空间域处理可以表达为 邻域
  • 漫画:排序算法系列 第一讲(利用插入算法思想解题)

    在本系列中 将为大家讲解排序算法相关内容 同时 由于网上排序相关的教程太多了 我会尽可能的讲解一些不一样的内容 而不是按照 排序讲解 标准Titile 什么 十大排序算法 经典排序算法 排序算法必知必会 之类的一个一个来进行讲解 所以 如果
  • JDK1.8下载步骤

    JDK概述 JDK是 Java 语言的软件开发工具包 主要用于移动设备 嵌入式设备上的java应用程序 JDK是整个java开发的核心 它包含了 JAVA开发工具 jdk bin 基础开发库 jdk jre lib rt jar 基础开发库
  • windows11测评

    微软在今年6月正式发布了新一代Windows 11操作系统 作为微软近6年来首次推出新的Windows操作系统 Windows 11带来了众多新功能和新特性 例如全新应用商店 新版右键菜单 分离式通知中心 优化的设置面板以及UI界面的重新设

随机推荐

  • 汽车零配件行业MES规划与落地

    汽车零部件行业作为汽车整车行业的上游 是汽车工业发展的基础 汽车制造业的竞争很大程度上也是其零部件产业水平的竞争 近年来 国内汽车零部件企业通过技术引进 合资合作 自主发展 多元化投资等相关措施 在装备水平 制造技术 产品质量 管理水平等方
  • nextcloud 安装教程 windows 中nextcloud 安装方法

    一 准备工作 1 windows server 中可以用WM 虚拟机 再安装docker 虚拟机磁盘只要20G就够了 云盘数据可以映射到其它盘中 2 在虚拟机中设置好共享文件夹名称为nextcloud 用来存放云盘数据 所以请选一个大一点的
  • 【C++】3、排序算法 C++ 实现

    文章目录 排序算法程序 1 冒泡排序 2 直接插入排序 3 希尔排序 4 快速排序 5 总结 排序算法程序 1 冒泡排序 通过对相邻数据的元素进行交换 逐步将待排序序列排成有序序列的过程 如升序排列 扫描整个待排序序列 非整个序列 不扫描已
  • 关系数据库中表示层级结构

    Managing Hierarchical Data in MySQL What are the options for storing hierarchical data in a relational database Trees in
  • 微信小程序地图导航源码、地图导航小程序源码

    最近研究了微信小程序地图功能 编写了地图导航功能的Demo 文章尾部附有下载地址 1 用户定位功能 用户同意小程序获取位置权限 并定位用户当前位置 2 选择目的地 并开始自动导航功能 2 选择交通工具 显示里程数 及显示相似目的地功能 地图
  • JSP页面分页显示数据

    效果如上图所示 最多显示10条 完整jsp和后台代码如下
  • Meetup回顾

    近期 社区组织了专场线上Meetup 分享了v3 0在2022年的研发路线及开发部署方式 直播间讨论十分热烈 我们把一些开发者们比较关心的问题进行了梳理 整理成这一篇关于v3 0的常见问题和解答 供大家学习参考 Q 目前v3 0性能是多少
  • 动态规划之详解01背包和完全背包

    一 总述 在动态规划中 01背包和完全背包可以说是动态规划最典型的应用了 先介绍一下定义 动态规划 英 Dynamic Programming 简称DP 动态规划是一种多阶段决策最优解模型的思想 如果某 问题有很多重叠 问题 使 动态规划
  • Unity调试真机VS中找不到手机设备

    这个问题困扰了我好几天 网上各种百度没有解决 在VS中 调试 gt 附加 Unity 调试程序 一直找不到AndroidPlayer 最后检查了一下手机的系统版本是10 0 而我电脑中下载的版本缺少10 0的一些配置 Android SDK
  • Eclipse安装FindBugs插件

    上菜 一 FindBugs说明 Findbugs 是一个静态分析工具 它检查类或者 JAR 文件 将字节码与一组缺陷模式进行对比以发现可能的问题 利用这个工具 就可以在不实际运行程序的情况对软件进行分析 它可以帮助改进代码的质量 二 Fin
  • COLA之架构演变(一)

    一 常用架构 1 分层架构 2 CQRS架构 3 六边形架构 4 洋葱圈架构 二 COLA介绍 COLA 是 Clean Object Oriented and Layered Architecture的缩写 代表 整洁面向对象分层架构 目
  • Eclipse中配置Tomcat热部署

    在Eclipse中配置VM参数使Tomcat自动加载部署修改后的项目 如果在第二张图中选择了通过xml文件发布项目则还需要配置在xml中配置文件的信息
  • 什么是七牛云?七牛云的使用

    一 什么是七牛云 七牛云是国内知名的云计算及数据服务提供商 主要提供了现在网络上占据百分之就是打非结构化数据 也就是图片 音频 视频的云存储服务 二 七牛云的使用 1 注册账号 2 绑定邮箱 3 实名认证 必须进行 4 创建一个存储空间 5
  • 高效的学习方法(几个小技巧)

    几个学习小技巧 1 价值导向性学习法 发现 赋予学习内容意义或者使命感 价值导向性学习法是一种高效的思维方式 可以传递出这样的一种观点 学习上有意义 有价值的行为 而不是消极的 被动式的学习 首先 最重要的是赋予学习内容以意义 其次 定制清
  • RK3399 ,64位,Ubuntu16.04系统安装ROS-kinetic方法总结

    1 第一步是修改hosts vi etc hosts 在127 0 0 1 localhost 后边添加 rpdzkj 自己的ubuntu用户名 127 0 0 1 localhost rpdzkj 设置sources list 我选择的是
  • LaTeX公式符号总结(Markdown适用)

    文章目录 1 希腊字母 小写字母 大写字母 2 符号 箭头符号 二元运算符 逻辑符号 集合符号 特殊符号 3 运算和函数 4 矩阵和多行列式 5 括号与空格 6 颜色 字体颜色 背景颜色 RGB颜色和自定义 默认支持颜色 本文从 Typor
  • 开发日记(4)如何将Bitmap转换成Uri?

    1 bitmap to uri Uri uri Uri parse MediaStore Images Media insertImage getContentResolver bitmap null null 2 uri to bitma
  • 阿里:MySQL 单表数据最大不要超过多少行?为什么?

    点击上方 芋道源码 选择 设为星标 管她前浪 还是后浪 能浪的浪 才是好浪 每天 10 33 更新文章 每天掉亿点点头发 源码精品专栏 原创 Java 2021 超神之路 很肝 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网
  • 2023AIGC人才趋势洞察报告

    导读 自ChatGPT于2022年11月发布至今 其大大超出预期的 涌现 能力使得AIGC赛道被彻底点燃 从人力资源角度观察 AIGC相关的岗位明显增加的同时 人才对于此类岗位的投递也愈发积极 值得注意的是 AIGC并不单单是属于ICT行业
  • iOS APP 如何做才安全

    本来 写了一篇 iOS 如何做才安全 逆向工程 Reveal IDA Hopper https抓包 等 发现文章有点杂 并且 iOS 如何做才安全 这部分写的越来越多 觉得 分出来更清晰一点 所以拆成两部分 同时也是为了大家能 共同讨论 毕