iOS逆向攻防实战

前言
本文是自己对iOS逆向工程领域所学的一个总结,文中所用的例子仅为学习研究使用 。
1. 逆向工程是什么?
从iOS应用的功能或行为入手,通过脱壳、运行时分析、静态分析、动态调试、Hook、注入等一系列技术手段,推导出目标文件的结构、流程、算法、代码等,称为“iOS应用逆向工程 。
iOS逆向工程包括但不限于以下内容:
2. 为什么要学习逆向工程?
通常我们对某个APP进行逆向是为了在没有源代码的情况下了解这个APP的结构或该APP某个关键功能的代码实现等,比如可以针对某个第三方APP进行界面布局或者功能逻辑的分析等 。
本文将介绍iOS逆向领域中的一些常用攻防技术,运用这些技术来分析第三方APP中存在的一些安全问题并且给出防御方案 。
3. 如何开始逆向?
首先我们需要准备一台越狱手机 。由于iOS平台存在着沙盒机制,沙盒的原理是把应用程序生成和修改的文件重定向到自身文件夹中,在沙盒机制下,每个程序之间的文件夹不能互相访问 。所以非越狱手机无法了解它的内部结构、运行时机制等 。
越狱后推荐安装的插件 (越狱后会自动安装一个叫做 Cydia的应用,通过Cydia安装插件) :
Cydia:逆向必备基本框架,封装了很多函数,加入了安全的防崩溃保护机制,使插件开发变得简单高效 。
AFC2:用于激活助手类工具对iOS设备所有路径的访问权限 。
adv-cmds:提供ps命令,用于查看当前运行进程的PID以及应用的路径 。
:用来绕过系统对应用的签名验证,可以随意安装和运行脱壳后的ipa 。
Filza File :可以在上自由访问iOS文件系统 。
2:能运行在手机上的终端工具 。
4. 脱壳
iOS端App在上线之前会由苹果商店进行数字版权加密保护(称为“加壳”) 。
4.1. 什么是加壳?
利用特殊的算法,对可执行文件的编码进行改变(比如压缩、加密),以达到保护程序代码的目的 。
要对应用进行分析,就必须先解密(称为“脱壳”),从而得到原始未加密的二进制文件 。
4.2. 怎么脱壳?
iOS中有很多好用的脱壳工具,比如、、、 。
以为例进行脱壳,流程如下:
a. 首先我们要生成“砸壳”用的动态库.dylib;
b. 到越狱手机上寻找要“砸壳”的app路径(通过ssh连接设备,在终端用ps -e | grep 命令获取设备当前运行的所有应用信息中名字包括的应用,我们可以找到的运行路径;
c. 使用注入进程,然后输入以下指令获取目录
d. 然后通过爱思助手进入该目录,将.dylib拷贝到该目录下;
e. 终端进入该目录,执行下方命令:
S=.dylib /var////-726F-4304-89E8-/.app/
f. 执行命令后会生成已脱壳的可执行文件,后缀名为.;
g. 通过工具分析,4 中的Crypt ID 为0,说明脱壳成功 。
5. 攻 5.1. 攻击手段一:运行时分析
运行时分析是常用的攻击手段,具体方案或工具有/// Flex / class-dump等 。
5.1.1.
是一款脚本语言,混合了OC与JS语法解释器,能够探测和修改运行中的应用程序,主要用于注入目标程序来实现运行时调试,在重启程序后所有的修改会失效 。
利用向目标App注入代码,从表面现象入手来获取当前的界面布局及控制器,从而定位可疑方法或函数,然后进行各种调用测试,最终定位被逆向功能的入口 。
安装方法:越狱设备直接在Cydia中安装
使用方法:
a. 注入目标程序,例如注入运行中的;
b. 使用语法进行运行时分析 。
实例一:
查看的 / APP运行路径 /// 当前的 / 当前控制器 / 视图层级等等