ios学习篇(1)
引言
哎,感觉学安卓太难了,没有用过安卓系统,但是之前有过ios越狱经验,干脆直接学ios逆向好了。学了一个星期,才刚把基础题做出来。为了省钱不买mac,就用windows硬搞,吃尽了苦头啊。。。
工具/设备
iphone 7:dopamine(多巴胺),牛蛙助手,巨魔商店,open-ssh,debugserver
windows系统:ssh,爱思助手,ida
无根越狱(仅适配ios17以下版本)
看了很多教程,试过了WinRa1n,直接报错差点成为苹果板砖了。感觉还是多巴胺一键最简单
前置步骤
先去把爱思助手下了,爱思能帮你配好很多环境,还有唯一可见的ui,只能执行/var/mobile/Media下的文件
再去下个牛蛙助手官网_苹果助手,BLFGTool这个可以将你下载的ipa进行签名并且安装
签名详细步骤可以跟着【免费免越狱】牛蛙助手iphone手机7天自签名神器 手机上自签 从此告别电脑签名 苹果应用多开_哔哩哔哩_bilibili来操作
中间步骤
在手机上的safari浏览器下一个dopamine(多巴胺)的ipa,然后传到牛蛙助手(如果你有巨魔就用巨魔,因为我的巨魔是越狱后搞得)上进行签名安装,打开多巴胺后,就直接默认设置直接一键越狱即可,后续设置的密码要记住,记得使用sileo越狱商店。
后续步骤
有了sileo以后,就可以添加各种软件源,在源上下载很多插件,工具,软件等,我的字体也是这里改的。
先在sileo中搜Trollstore helper,对巨魔商店进行一个安装(感觉是通过一个ios的漏洞安装的,因为没越狱也能装),巨魔商店是一个一个ipa直接安装的超级牛的工具
后面在sileo上再装open-ssh和debug-server,方便我们在windows系统中进行终端操作,和ida远程调试
最后我喜欢搞一个Filza,一个ios的文件管理器,自带那个权限太低了,啥操作也没有,这个就跟安卓的文件管理器相似了。
ssh连接
确保两台设备在同一网络下,使用ssh,进行连接
1 | ssh root@192.168.x.xxx |
输入密码,一般默认是alpine或者是你之前越狱设置的密码
这样就成功进入了,ios系统是基于unix系统的,所以一些常见的linux指令也能运行
动态调试
以crack me1这题为例子,来演示一下
ipa
一般给你的文件就是一个ipa的文件(很多正式的ipa都会有带壳,需要对壳进行砸壳处理,但这题没有),相当于安卓里的apk文件,其实本质上都是一个压缩包,用压缩包打开后,进入/Payload/crack me1.app/
就可以看到全部的文件,我们主要用到的是一个mach-o的文件,是mac和ios系统下的可执行文件,就是那个crack me1,关于其他文件是什么,可以自行搜索ipa结构进行分析查看。
将这个ipa传到巨魔商店里进行安装,打开
mach-o
关于怎么判断哪个文件为mach-o文件,其实可以用010中的mach-o的模板看,因为该类文件的文件头和java的.class文件相同,都是CA FE BA BE(咖啡宝贝)
模板中也能看到很多文件头,函数表,数据库信息等
当然如果你有mac,使用machoview会更方便
通过010我们也可以看到,这个文件把32位和64位架构全部整合进去了,所以这个文件无论在哪种arm架构下都能正常运行,但我们手机基本用的是arm64,所以我们用ida64对文件进行分析。
打开,发现也能正常反编译,是使用object-c写的,左边的函数表中有一堆,然后main函数只是一个接口,没有关键函数,所以从AppDelegate,ViewController,GTMBase64这几个大类下手。
iOS应用的启动流程和优化详解 - 掘金 (juejin.cn)
iOS程序入口结构 - 背包の技术 - 博客园 (cnblogs.com)
ida分析
看了一堆文章再加随便乱点以后,发现了关键函数位置ViewController touch
1 | v33[2] = self;//指向应用程序的委托对象的指针 |
细看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为37918
输入
1 | debugserver 192.168.x.xxx:3333 |
打开ida,远程调试参数设置
那个hostname填的是你手机的ip地址,跟上面的相反
连上后再用attach process输入刚才获取的程序PID,进行附加
要慢慢wait,等待各种函数加载好,这样就可以正常调试了,我们在刚才那个分析的判断函数下断个断点
点进v32
一个地址,再进去
下面就是我们的flag啦
输入我们的app进行验证