因为我比较懒所以创建了这个IPAForce来帮助你一键完成许多功能。传统的逆向非常复杂,至少对我一个懒人来说,太麻烦。
但是...
传统工艺依然弥散着自己的香味,所以如果你想见证自己成长的每一个脚印,请你至少进行一次传统工艺~!
类似于iOS-砸壳+IDA分析这样的的传统工艺教学文章不下几百篇,你阅读他们,一定是会有收获的。
其实光看App内部的文字你就能了解它的运作,所以下面的讲解会比较深入。(至少对于新手来说)
逆向思路:
1.搭建环境
2.开始获取资料
3.开始逆向
4.分享
1.搭建环境
搭建macOS环境
搭建mac环境就是安装一些必备的工具。我们经常会用到下面的这些工具。对这些工具的熟练掌握是进行逆向的前提。
- HomeBrew
macOS 上优秀的软件包管理软件,类似于Linux中 Ubuntu的apt, CentOS的yum
- wget
非常好用的下载命令行
- ldid, ldid2, jtool, jtool2
主要功能为App签名,辅助功能有机会探讨
- dpkg
deb软件包控制工具,可以安装卸载,可以打包解包
- libimobiledevice
牛人逆向iTunes服务获取到的AppleUSB接口组件
- MonkeyDev
逆向iOS工程的模版,已经集成了各类注入,附加debugger,自动签名安装
- frida, frida-iOS-dump
方便获取iOS解密包。后者为AloneMonkey写的脚本
- class-dump
经典的iOS App逆向工具,适合dump头文件
- Hopper, IDA
经典的逆向App软件,用于查看伪代码获取头文件
你可以通过在这里获取的一键安装脚本或IPAForce帮助程序来安装这些必备的工具。安装前建议使用代理,避免出现下载失败重新开始的尴尬。当然这个一键安装脚本也可以用来更新这些工具。
搭建iOS环境
搭建iOS环境其实与macOS环境的搭建非常类似,但是出于安全原因所有的搭建都是用越狱以后自带的dpkg完成的。dpkg在安装的时候会检查插件的兼容性及其可用性。如果缺少依赖或者与其他插件冲突都会导致安装失败。同时,这也保护了你的越狱环境。比如这个插件支持到iOS8,但是你的越狱手机却是iOS11,那么强行安装一些插件会导致进入安全模式(插件注入模块,对不是进程,终止插件注入进入的Fail Safe模式)。当然,如果这个插件包含了不兼容的守护进程(LaunchDaemon)则会导致无法进入越狱环境或者白苹果。(完美越狱会在启动时注入守护进程并且守护进程与插件注入模块相互独立)每个插件实际上是dylib库和需要注入的App列表plist。更多信息稍后讨论。
- 依赖包
iOS的依赖包非常多,再次不一一赘述。
有一些依赖是开发者自己写的封装,比如lakr_Great_Method.deb
- rocketbootstrap
进程间通信用的插件。(这个其实我并不是特别清楚)
- MobileSubstrate
插件注入模块。是的他需要单独安装。
这个模块相当于总开关,他会读取你放在指定位置的插件加载到App。
- Tweak Inject
Electra专用插件注入模块,向下兼容MobileSubstrate。
- Preferenceloader
把插件的设置注入系统的设置App。
- afc2
用于在电脑上访问iOS系统文件。
因为安装他会创建了守护进程,所以请一定要选择正确的版本。
- Filza
最好用的iOS越狱文件管理器,没有之一。
安装他可能会失败,LaunchDaemon权限不正确导致的.
- bfdecrypt
解密ipa并在本地生成安装包,可以开启服务器在电脑上用nc获取。
官方的最新版本支持在设置选择解密目标。
- Crash Repoter
阅读崩溃日志。
- frida-server
电脑用USB获取解密包的瑞士军刀。更多功能请自行了解。
- NewTerm2
手机上最好用的终端,没有之一。
你可以使用IPAForce这款App来完成环境的搭建,但他是为iOS11专门定制的。如果你运行可能会出现问题,但dpkg会帮你很好的处理这些问题。至少你不会有机会损坏你的设备,丢失越狱。注意,在越狱之后一定要使用passwd修改root密码。请注意,如果使用本帮助软件,你的ssh密码将被以明文的形式保存在本地App路径,你可以通过点击Reset App来清除。
iOS越狱疑难解答
为什么我的插件没有注入成功?
如果你是iOS11的操作系统,那么你的插件可能没有被链接到iOS11专用的TweakInjector目录中。请尝试为/Library/MobileSubstrate/DynamicLibraries/创建软连接指向/Library/TweakInject/,然后注销。如果你不是iOS11用户,请检查依赖。
为什么设置里看不到我插件的设置?
请检查插件注入是否成功,Preferenceloader安装是否正确。
如何查看我的软件包状态?(安装成功,配置失败等)
请用ssh连接到设备输入dpkg -l查看。ii为安装成功,iU为安装成功配置失败。dpkg在安装和卸载软件包时均可以执行脚本(如果有需要)。如果脚本之行失败,或者dpkg进程被终止,都有可能导致软件包配置失败。
如何强制安装或卸载软件包?
当你确定你的软件包可以安装,但dpkg给出错误的时候,可以使用如下指令来强制执行。dpkg --force-all [软件包名称]
为什么我的Filza没有文件权限?
LaunchDaemo设置不正确。越狱并没有移除文件沙箱,你并不能修改这些文件。LaunchDaemon创建的守护进程权限附属于launchd,权限root,没有沙箱,可以进行这些操作。尝试一下操作来正确配置Filza
chown root:wheel /Library/LaunchDaemons/com.tigisoftware.filza.helper.plist
chmod 0644 /Library/LaunchDaemons/com.tigisoftware.filza.helper.plist
launchctl load /Library/LaunchDaemons/com.tigisoftware.filza.helper.plist
iOS越狱基本流程
了解越狱基本流程有助于保护你的iOS设备。
运行App --> 执行漏洞 --> 获取root权限 --> 破解代码签名 --> 挂载文件系统(--> 注入代码到开机前,完美越狱) --> 注销
其中关于挂载文件系统需要特殊说明,这有助于理解在早期越狱中硬盘空余较多却报容量不足的问题。较早版本的iOS的越狱会将系统分区的文件链接到/var分区,这是因为系统分区通常只够系统存放文件。而对/大量读写并不会被链接,导致把系统分区写满了而用户分区还剩下许多空间。此时系统会提示空间不足从iOS10开始的越狱为了解决Cydia兼容性移除了这个步骤,导致用户不能对更目录有太多的读写。coolstar的stash插件则解决了这个问题。其原理就是为特定的文件夹创建软连接到/var文件夹。
从iOS11开始,根目录和/var的分区不再那么明显,具体情况可以理解为动态大小。(实际情况只有Apple知道)而根目录挂载的则是一个快照。iOS11.2-11.3.1的越狱就是通过技术手段重命名这个快照,让系统挂载/为只读,然后通过技术手段移除只读flag。
2.开始获取资料
如iOS-砸壳+IDA分析所述,(具体请看链接的文章)所有从 App Store 下载的App都经过了DRM保护。如果你需要逆向这款App你就需要解密这款App。而解密这款App,只有iOS设备能做到。你会发现现在PP助手,同步推这类帮助软件越狱软件的更新越来越慢,其中很大的原因就是iOS的越狱发布越来越慢。当时间回溯到iOS7,基本上盘古越狱会在第一时间破解iOS。在iOS8时,太极越狱在iOS8.1.2发布的一个月内发布了越狱。iOS9.0.2则是盘古在第一个星期发布的。再往后一直到iOS9.3.3,最后一个可以完美越狱的iOS中,(完美越狱插件)越狱的发布还可以说是0day。在这之后,基本上能越狱的版本,苹果都已经关闭了该固件的验证通道。最靠近的一次是iOS11.3.1,漏洞发布时验证通道还打开,但是第一个带有文件系统挂载的公开越狱是我在验证通道关闭的第三周发布的,功能还很不完整。接下来将讲述用IPAForce帮助软件获取解密安装包的过程,请确保你已经配置好了本软件需要的环境。(依次点击Setup macOS, Setup SSH. Setup iOS)
演示视频:https://www.youtube.com/watch?v=dTFsSNlORFI
获取目标App信息
在设置并保存好ssh信息(包括密码)之后,你就可以用USB连接到手机。通过点击Refresh App List来刷新已安装的App列表。这个过程调用了AloneMonkey写的frida-iOS-dump脚本来获取数据。如果4秒内没有传回任何数据,App会终止这个创建的进程,并要求检查USB连接。
你在设备上已经打开的App会显示在最前端,这有利于方便的找到你的App。
获取解密的App安装包 *.ipa
复制你的App显示的名字,或者BundleID,粘贴到Start Coding --> Decrypt App & Get Headers
------确保你解锁了iOS设备,并退出了你要解密的App ------
这一步对于解决一些疑难杂症特别重要,比如dylib注入失败导致的启动解密失败,亦或者手机崩溃重启。
查看解密的App以及头文件
本帮助软件在配置macOS的时候安装了class-dump,在解密App的时候自动获取了头文件。这些文件被保存在
~/Documents/IPAForceDump/App名字或BundleID 文件夹内
3.开始逆向
逆向的详细过程将会在稍后有机会心情好的时候一点一点记录。目前来说就是把ipa拖进MonkeyDev模版中开始逆向。
MonkeyDev安装App到设备失败?
请检查App是否为解密的App。如果不是,请解密,如果是,请使用Xcode9安装一次,再使用Xcode10调试。
安装Reavel动态调试框架到iOS设备?
在配置完整帮助软件以后,点击Inject Reveal并输入BundleID则会自动注入这个框架。 注意,是BundleID。