ios学习篇(1)
引言
 哎,感觉学安卓太难了,没有用过安卓系统,但是之前有过ios越狱经验,干脆直接学ios逆向好了。学了一个星期,才刚把基础题做出来。为了省钱不买mac,就用windows硬搞,吃尽了苦头啊。。。
工具/设备
iphone 7:dopamine(多巴胺),牛蛙助手,巨魔商店,open-ssh,debugserver
windows系统:ssh,爱思助手,ida
无根越狱(仅适配ios17以下版本)
看了很多教程,试过了WinRa1n,直接报错差点成为苹果板砖了。感觉还是多巴胺一键最简单
前置步骤
/%E6%89%80%E9%9C%80%E8%BD%AF%E4%BB%B6.png)
 先去把爱思助手下了,爱思能帮你配好很多环境,还有唯一可见的ui,只能执行/var/mobile/Media下的文件
 再去下个牛蛙助手官网_苹果助手,BLFGTool这个可以将你下载的ipa进行签名并且安装
 签名详细步骤可以跟着【免费免越狱】牛蛙助手iphone手机7天自签名神器 手机上自签 从此告别电脑签名 苹果应用多开_哔哩哔哩_bilibili来操作
中间步骤
 在手机上的safari浏览器下一个dopamine(多巴胺)的ipa,然后传到牛蛙助手(如果你有巨魔就用巨魔,因为我的巨魔是越狱后搞得)上进行签名安装,打开多巴胺后,就直接默认设置直接一键越狱即可,后续设置的密码要记住,记得使用sileo越狱商店。
/%E5%A4%9A%E5%B7%B4%E8%83%BA.png)
后续步骤
有了sileo以后,就可以添加各种软件源,在源上下载很多插件,工具,软件等,我的字体也是这里改的。
先在sileo中搜Trollstore helper,对巨魔商店进行一个安装(感觉是通过一个ios的漏洞安装的,因为没越狱也能装),巨魔商店是一个一个ipa直接安装的超级牛的工具
/%E5%B7%A8%E9%AD%94%E5%95%86%E5%BA%97.png)
后面在sileo上再装open-ssh和debug-server,方便我们在windows系统中进行终端操作,和ida远程调试
/open-ssh.png)
/debugserver.png)
最后我喜欢搞一个Filza,一个ios的文件管理器,自带那个权限太低了,啥操作也没有,这个就跟安卓的文件管理器相似了。
ssh连接
确保两台设备在同一网络下,使用ssh,进行连接
1  | ssh root@192.168.x.xxx  | 
输入密码,一般默认是alpine或者是你之前越狱设置的密码
/ssh%E8%BF%9E%E6%8E%A5.png)
这样就成功进入了,ios系统是基于unix系统的,所以一些常见的linux指令也能运行
动态调试
以crack me1这题为例子,来演示一下
ipa
一般给你的文件就是一个ipa的文件(很多正式的ipa都会有带壳,需要对壳进行砸壳处理,但这题没有),相当于安卓里的apk文件,其实本质上都是一个压缩包,用压缩包打开后,进入/Payload/crack me1.app/
/ipa%E6%96%87%E4%BB%B6.png)
就可以看到全部的文件,我们主要用到的是一个mach-o的文件,是mac和ios系统下的可执行文件,就是那个crack me1,关于其他文件是什么,可以自行搜索ipa结构进行分析查看。
将这个ipa传到巨魔商店里进行安装,打开
/%E9%A2%98%E7%9B%AE.png)
mach-o
关于怎么判断哪个文件为mach-o文件,其实可以用010中的mach-o的模板看,因为该类文件的文件头和java的.class文件相同,都是CA FE BA BE(咖啡宝贝)
/%E5%A4%B4%E6%96%87%E4%BB%B6.png)
模板中也能看到很多文件头,函数表,数据库信息等
/mach-o%E7%BB%93%E6%9E%84.png)
当然如果你有mac,使用machoview会更方便
通过010我们也可以看到,这个文件把32位和64位架构全部整合进去了,所以这个文件无论在哪种arm架构下都能正常运行,但我们手机基本用的是arm64,所以我们用ida64对文件进行分析。
/main%E5%87%BD%E6%95%B0.png)
打开,发现也能正常反编译,是使用object-c写的,左边的函数表中有一堆,然后main函数只是一个接口,没有关键函数,所以从AppDelegate,ViewController,GTMBase64这几个大类下手。
iOS应用的启动流程和优化详解 - 掘金 (juejin.cn)
iOS程序入口结构 - 背包の技术 - 博客园 (cnblogs.com)
ida分析
看了一堆文章再加随便乱点以后,发现了关键函数位置ViewController touch
/%E5%85%B3%E9%94%AE%E5%87%BD%E6%95%B0.png)
1  | v33[2] = self;//指向应用程序的委托对象的指针  | 
/DES%E5%8A%A0%E5%AF%86.png)
细看DES加密的函数,要是不给函数名,估计更难看,这边调用了CommonCrypto 库中的 CCCrypt 函数进行加密或解密操作
进入CCCrypt细看
1  | CCCryptorStatus __cdecl CCCrypt(  | 
1  | 解释一下每个参数的作用:  | 
然后根据参数看出来是DES/pkcs7/ECB加密,密文是1hKgkdbhfbeu6755d8fk,密钥是crack,但是自己加密出来结果怎么都是是错的,感觉是密钥填充的问题,哎,要是能动态调试这题就秒杀了。
动态调试
最煎熬的地方,看了无数文章,无限个报错,终于成功动调了。
因为ida本身不自带iphone-server(为什么macos-server都有,iPhone没有?怒了),我们要用其他的方法调试
我先尝试了用网上下载的debug-server,但是因为iphone自身极高的保护,修改了各种权限后,还是一执行就把我kill掉,估计也是因为签名问题,iphone 的保护真是好啊!
于是又搜到sileo中的自带的debugserver,在iphone中安装完debugserver后,就已经在环境变量中能直接使用
1  | debugserver-@(#)PROGRAM:LLDB PROJECT:lldb-14.0.0  | 
将我们的题目在手机中打开
先要查看你所运行的程序的PID,简单的grep查找指令
1  | ps aux | grep crack  | 
/PID%E6%9F%A5%E7%9C%8B.png)
可以看到PID为37918
输入
1  | debugserver 192.168.x.xxx:3333  | 
/%E7%9B%91%E5%90%AC.png)
打开ida,远程调试参数设置
/ip%E8%AE%BE%E7%BD%AE.png)
那个hostname填的是你手机的ip地址,跟上面的相反
连上后再用attach process输入刚才获取的程序PID,进行附加
/%E7%AB%AF%E5%8F%A3%E8%AE%BE%E7%BD%AE.png)
要慢慢wait,等待各种函数加载好,这样就可以正常调试了,我们在刚才那个分析的判断函数下断个断点
/%E4%B8%8B%E6%96%AD%E7%82%B9.png)
点进v32
/%E5%9C%B0%E5%9D%80.png)
一个地址,再进去
/flag.png)
下面就是我们的flag啦
输入我们的app进行验证
/%E9%AA%8C%E8%AF%81%E6%88%90%E5%8A%9F.png)