一、前言
这是2020年第一篇文章,我们从今年开始主要介绍iOS安全逆向相关知识,介于之前已经了解了Android逆向相关的知识,所以这里会相对比较容易入门,本文就来介绍一下iOS逆向需要准备的工具和环境搭建,为后续操作做准备。
二、越狱设备(uncOver+Cydia)
首先我们得有个Mac笔记版,然后得有个iPhone手机,这个和搞Android逆向一样,去咸鱼买个二手的,而且现在咸鱼已经可以买到已经越狱后的手机了,当然现在只有12.4以及以下的系统可以越狱,后面说怎么越狱,当然这个系统局限于现在这个时间点,因为后面有大神搞了新的系统漏洞,新系统也可以越狱了。现在假如买了一个没有越狱的手机,并且系统是支持越狱的手机哈,如果买了一个已经越狱的手机可以忽略以下内容:
我们连接上手机,安装一个叫做”爱思助手”这个软件有Mac和Windows版本的,这个工具就相当于Android当时root的工具”刷机精灵”不过可惜,刷机精灵工具现在已经停更了,加上现在Android最新系统root越来越难,所以我现在选择的方式是买小米手机,然后去论坛下个开发版的rom,因为这个已经提前root功能了。希望这个爱思助手不要停更,因为这个工具真的很好用:
这个工具可以刷机也可以越狱,这里一定要注意不要随便的刷机哦,因为iPhone是不支持系统降级的,现在这个时间点能刷机的就是12.4了,所以暂时大家不要去刷13.x的,当然以后应该是可以的,这里我们应该买了一个二手的可以刷机的手机,这里不用刷机了,直接点击一键越狱即可:
这里直接点击越狱即可:
这里如果不出意外情况的话,会提示你越狱成功,同时会在你的设备中安装这个应用:uncOver
然后打开这个应用,不过会提示你让你信任证书,这个没关系,去设置->通用->描述文件与设备管理,找到uncOver的信息点击信任即可,这个主要是iOS中的应用发布方式的区别,这个后面文章会说到iOS中的应用发布的几种方式和区别。信任了之后再打开:
我这个是因为已经JailBreak了,所以提示的是Re-Jailbreak了,第一次进入应该提示你Jailbreak,直接点击即可,这里没有遇到什么问题,运行完了之后会弹出一个对话框,点击ok就会重启:
这里一定要注意不是重启设备就是我们常说的重启手机,因为现在包括上面的爱思助手的越狱方式都叫做不完美越狱,就是越狱成功了,在真正意义上重启设备或者关机越狱就会失效,需要重新越狱,所以大家一般没事就不用关闭设备或者重启了,而上面这个包括后面我们都有一种操作叫做重启(killall SpringBoard)。
拓展说明:这里遇到过一个问题,就是上面爱思助手有时候会抽风越狱报了各种错,我遇到的是这个错误:
然后网上搜了一下,说是爱思助手的服务器在做升级啥的,暂时越不了了,这个的确坑,所以我们需要手动的安装uncOver然后手机上直接越狱即可:https://udid.35ya.com 如果这个也不行那就自行搜索一个可以获取的地方吧,在手机中用Safari浏览器打开,然后选择uncOver
这里点击安装即可,不过速度有点慢需要等一段时间即可。还有一个问题就是uncOver里面越狱重启之后无限loading,这时候可以用命令 killall SpringBoard 重启设备,当然这个前提是安装了后面提到的OpenSSH工具,或者用爱思助手直接重启设备,这时候虽然在无限loading但是连接没有断开的:
到这里呢如果重启之后没问题的话,桌面多了一个Cydia的东西,这个其实就是越狱之后的经典插件管理应用,可以把它理解理解成一个专门逆向破解的工具市场,我们打开他:
这里因为我已经安装了一些常用的工具了,所以这里也没法给大家演示每个工具的安装步骤了,后面会单独介绍常用的工具,这里安装其实很简单,直接点击搜索,然后搜索你想要安装的逆向工具即可。
拓展说明:我们在安装软件工具的时候,或者刚刚进入Cydia的时候会提示网络错误,这时候记得在爱思助手市场中搜索”乐网”这个应用安装,然后打开,其实我也没弄懂为啥要装这个应用才可以,同时还必须是非AppStore中的包才可以:
这个工具看上去是拦截广告的,但是也没拦截成功过,不过他的确可以解决Cydia打开提示网络错误的问题。
当然我们在安装一些工具的时候,他也会提示你找不到该工具或者下载失败问题,这时候我们需要安装指定的软件源,这里我加了一个比较常用的pp助手源,后面下载和搜索OpenSSH工具用到的。
到这里其实这两个核心的工具已经安装好了,但是这个过程看着挺顺利的,其实并不是,在这个过程中我遇到了很多问题,比如uncOver打开闪退,Cydia打开闪退,uncOver无限重启之后Cydia打开失效闪退问题等,当然相信大家还会遇到其他各式各样的问题,这里就先把我遇到的问题以及处理方式总结一下:
1、Cydia打开提示网络错误,必须安装爱思助手中的乐网app,不要安装AppStore里面的。
2、如果打开Cydia闪退,直接打开uncOver重新re-Jailbreak即可。
3、如果打开uncOver打开也是闪退,那就用爱思助手重新越狱,这种情况一般是真正的重启设备了。
4、如果用爱思助手越狱失败,可以手动安装uncOver工具即可:https://udid.35ya.com 用系统浏览器打开即可。如果这个地址过期或者安装失败,大家可以自行google搜索uncOver的安装方法。
5、如果Jailbreak越狱重启转菊花,然后始终越狱失败,记得打开设置页面,关闭第一个选项:Load Tweaks,重新越狱Jailbreak。
6、如果以上都是不行,最终方案是:打开uncOver,打开设置->关闭第一个选项Load Tweaks,然后在Jailbreak。
踩过的坑:安装触摸精灵,重启后越狱失败,而且Cydia打开闪退,重新越狱也是无效,所以感觉是触摸精灵插件问题,但是这时候Cydia打开也闪退,也卸载不了这个插件, uncOver的设置中关闭Load Tweaks,然后打开Cydia不闪退了,这时候删除插件,在Jailbreak重新越狱即可:
当然上面整理的不一定是最全的,但是都是本人遇到的问题总结而已,如果大家遇到问题没有解决的,可以自行google搜索解决方案。注意其实真正越狱的工具是uncOver,用爱思助手只是帮助我们安装这个工具,如果没有爱思助手,我们可以去网上找到一些企业签名的uncOver最新版本安装即可,当然这个工具已经开源了:https://github.com/pwn20wndstuff/Undecimus
三、安装OpenSSH
为什么这个工具要单独拿出来说呢?因为这个工具我个人觉得是逆向里面最重要的一个工具,他也是最基本的一个工具,他就相当于是Android里面的adb shell命令的功能可以进入设备空间中,安装他其实很简单,打开Cydia之后搜索OpenSSH即可,不过要记得添加pp助手源,不然可能搜不到结果:http://apt.25pp.com
安装之后其实就简单了,我们可以输入命令进入设备空间里面了:
这里我们输入ssh命令就可以进入设备空间了,其实大家看到这个命令是不是很熟悉呢?对的我们如果弄过服务器都知道也是用ssh登录远端服务器的,其实这里也是类似,把iPhone当做远端服务器了,这么看及时我们PC不连接iPhone也可以操作设备了,这个其实Android中也可以做到的wifi连接设备替代有线连接。命令很简单:ssh username@remote_ip 即可,不过这里的username一般都是默认的root身份,而设备的ip地址可以查看手机连接的wifi中进行查看的。其实理论上第一次连接会提示你保存rsa信息的,直接输入yes即可,然后下次在输入这个就可以直接进入了,当然这里还做了一个操作,理论上ssh登录肯定是需要输入密码的,而这里的默认密码就是:alpine,但是每次输入密码效率很低,所以我们设置免密登录:
ssh-keygen -t rsa -P ”
ssh-copy-id -i ~/.ssh/id_rsa root@iPhone_ip
这样输入之后,我们在ssh命令登录iPhone设备就不需要提示输入密码了,当然我们知道对设备进行push文件或者从设备下载文件都是用scp这个命令的,这个命令的用法大家都自己搜索吧,当然我们一边喜欢可视化操作的,这里用FileZilla这个工具专门登录远端设备的查看目录,删除新增下载上传等操作的:
这里就看到这个工具非常好用,可以从手机里pull文件到本地,也可以把本地文件push到设备中,所以这里看到OpenSSH这个命令的重要性了,如果没有他后面很多工具和工作没法展开,一旦进入了设备空间中,那么我们就可以为所欲为了,可以安装deb包,可以查看安装的应用信息等,后面的砸壳等都是依赖于这个工具的。
拓展说明:如果ssh之前是可以连接上的,突然提示connection error了,如果Cydia可以打开,这个可能需要 killall SpringBoard 刷新一下,如果Cydia打开闪退,请参考之前的Cydia和uncOver的操作失败解决办法。
四、PC端工具(libimobiledevice&&ideviceinstaller)
为什么这两个工具要单独拿出来说安装呢,因为这两个工具的重要程度不亚于OpenSSH功能了,这两个工具就好比Android中的adb命令,对于开发或者是逆向都有很重要的作用,后面介绍内容的时候就知道这个工具的威力了,安装其实比较简单:
#brew update
#brew install libimobiledevice
#brew install ideviceinstaller
其中ideviceinstaller看到名字就知道他主要和ipa应用有关系:
比如我们安装一个ipa文件,和Android中的adb install xxx.apk命令一样:
#ideviceinstaller -i xxx.ipa
如果想卸载一个应用,和Android中的adb uninstall packagename命令一样:
#ideviceinstaller -U [bundleid]
查看设备中已经安装的应用信息,和Android中的adb shell pm list packages命令一样:
#ideviceinstaller -l
其实主要就这三个命令最常用的,而libimobiledevice命令主要用于设备相关的命令
比如查看设备的uuid信息,和Android中的adb get-serialno 命令一样:
#idevice_id –list
截取设备屏幕图片,和Android中的adb shell screencap 命令一样:
#idevicescreenshot
这个命令有个坑,运行可以会报错:
如果在使用截图的时候出现报错信息,需要安装指定设备系统版本的DeveloperDiskImage,获取版本号命令:
#ideviceinfo -k ProductVersion
路径:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/对应版本/
安装DeveloperDiskImage命令:
#ideviceimagemounter DeveloperDiskImage.dmg
然后就可以正常截图了
查看系统日志信息,和Android中的adb logcat 命令一样:
#idevicesyslog
查看设备所有信息:
#ideviceinfo
五、安装cycript(cyrun)和使用
关于cycript的作用大家可以理解为他是一个脚本,可以注入到应用进程中,比如我们现在想hook微信,那么用这个命令直接注入微信进程中,然后利用脚本就可以进行hook写插件了,当然我们最终hook操作大部分依赖于后面的MonkeyDev工具,这个这里简单介绍一下,以防后面会使用到。关于这个工具开始比较坑的是,安装好了但是运行是失败了,最后发现这个工具已经不再维护了,替代他的是另外一个工具了cyrun:由于Saurik停止维护了Cycript,在现有iOS12的系统环境下无法使用,所以这里直接介绍如何安装cyrun工具吧,首先通过Cydia安装New Curses,readline,adv-cmds,通过Cydia安装wget,主要为了在iPhone上可以下载deb文件使用之前说到的ssh登录iPhone设备中,然后运行命令下载安装包:
wget http://apt.saurik.com/debs/cycript_0.9.594_iphoneos-arm.deb
wget http://www.tateu.net/repo/files/net.tateu.cycriptlistenertweak_1.0.0_iphoneos-arm.deb
wget http://www.tateu.net/repo/files/net.tateu.cyrun_1.0.5_iphoneos-arm.deb
然后用dpkg安装包即可,如果上面在设备中下载失败,可以在本地下载好了导入到设备中也可以:
dpkg -i cycript_0.9.594_iphoneos-arm.deb
dpkg -i net.tateu.cycriptlistenertweak_1.0.0_iphoneos-arm.deb net.tateu.cyrun_1.0.5_iphoneos-arm.deb
这时候是不是看到了,上面说到的安装OpenSSH是多么的重要了,安装好了之后我们就可以进行应用的注入和编写hook代码了,用法很简单:
使用指令:cyrun -n App名称 -e 或 cyrun -b bundleID -e
例如:cyrun -n live4iphone -e 或 cyrun -b com.tencent.live4iphone -e
注意:这里的-n是appname,我们可以通过ideviceinstaller或者frida-ps -U获取,但是这里好像不能输入中文,比较坑
那么接下来我们如何获取应用的bundleID或者应用名称呢?这里的bundleID就是Android中的packagename,这里有很多种方法哈,我们可以借助代码获取手机中所有应用的bundleid信息,好比Android中通过代码方式获取所有已经安装的应用包名一样,当然也可以用后面介绍的frida工具获取,也可以用ideviceinstaller命令获取:
这个命令还有很多其他用法,后面会介绍,这里就很方便的获取到安装应用的bundleid信息,这个和Android中的命令很类似:adb shell pm list packages 当然这里看到我么只能获取第三方安装的应用,比如系统应用就无法获取了,但是Android依然可以,我们一般在Android中获取应用包名信息,直接adb shell dump activity top即可,不过也不是没有办法,后面会介绍怎么获取哈,这里获取到了微信bundleid信息,那么我下面就来注入他然后写个简单的hook代码:
这样我们就成功注入到了微信进程中了:
cy# alertView = [[UIAlertView alloc] initWithTitle:@”Hook Success” message:@”Hook UI” delegate:nil cancelButtonTitle:@”OK” otherButtonTitles:nil]
cy# [alertView show]
如果要退出可以按 control+d 快捷键,这个脚本支持OC语言的,所以我们想写插件啥的都可以:
看到这里我们就可以hook成功微信了,弹出一个提示框了,当然还有很多逆向常用的命令,比如获取当前页面的布局信息,当前页面的控制器等信息:
1》快捷的获取 ViewController 的方法:
[[[UIWindow keyWindow] rootViewController] _printHierarchy].toString()
2》展示的架构是基于layout
cy# [[UIApp keyWindow] _autolayoutTrace].toString()
3》通过view的nextResponder方法,可以找出它所属的视图控制器ViewController
cy# [#0x181009f0 nextResponder]
4》打印出当前界面的view层级
cy# UIApp.keyWindow.recursiveDescription().toString()
5》找到目标App的Documents目录路径
cy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
获取bundle info
[[NSBundle mainBundle] infoDictionary].toString()
6》获取应用安装目录
cy# [[NSBundle mainBundle] bundlePath]
这个命令虽然不是我们后面主要的hook工具,因为后面主要利用MonkeyDev来进行编写插件等操作,但是这个命令还是逆向分析中不可或缺的常用工具,当然还有很多常用的语法后面用到再说,前提是你要熟悉OC语法哦。
六、应用砸壳工具
我们知道在Android中应用为了安全会对应用进行加固也叫做加壳,其实iOS也有这个操作,当然这个操作是系统做的,因为如果你私自加壳会导致AppStore审核不通过的,这也就看出来了iOS和Android的差别,因为Android早期的生态导致现在国内有自己各大商场,国外一个googleplay,国内大家都可以接受应用自己整一套加固策略,所以没有一个约束会发现在加固这一块Android能做的比iOS很多,同时Android逆向会比iOS逆向更难,我们一般下载后的应用都是被加壳的,只有运行的时候才会解密,那么我们需要进行逆向分析应用的行为的时候,如果有壳的话肯定是不行的,所以需要用一些工具进行脱壳,网上一般都是三个工具:Clutch,dumpdecrypted,frida-ios-dump;我试了这三个工具,最后感觉最好用的还是frida-ios-dump,前面两个工具也用过,但是总是出现 Kill -9 的错误,网上说dylib没签名,也有的说要执行su mobile,但是都试了也还是不行,所以最终用最后一个工具了。所以这里就直接介绍这个工具吧,其他两个工具大家感兴趣的可以自行搜索使用方法哈,因为是依赖于frida这个工具的,大家如果弄过Android逆向都知道这个工具是进行Hook操作的,当然这个工具也可以用于iOS的hook操作,安装这个工具其实很简单:
1》因为Mac自带了Python,所以不需要额外安装,如果是其他系统可以自行安装Python即可
2》安装pip:sudo easy_install pip
3》安装frida:sudo pip install frida-tools
在这个过程中可能会遇到一些错误,这个不同错误可自行搜索处理接口。
4》获取frida-ios-dump代码:sudo git clone https://github.com/AloneMonkey/frida-ios-dump
5》进入frida-ios-dump目录下:sudo pip install -r frida-ios-dump/requirements.txt –upgrade
6》打开Cydia安装frida:
安装好了之后,我们连接手机就可以输入命令查看当前设备的进程信息了,这个和Android也是类似:frida-ps -U
这里可以看到我们可以获取应用的AppName,还记得上面的cyrun工具注入需要应用名称这里也是可以获取的,接下来我们开始脱壳,首先我们介绍一个工具,这个工具是用来查询一个应用是否被加壳了:
otool -l [ipa解压->xxx.app->显示包内容->找到二进制文件] |grep crypt
这个命令是系统自带的,需要注意的是输入文件是二进制可执行文件,下面我们可以用这个命令查看一下加壳的应用,我们可以取爱思助手上下载应用,然后本地打开执行命令,我们下载下来的是最终的ipa文件,然后解压:
解压ipa之后再Payload中找到xxx.app文件,然后显示包内容,就可以看到最终的可执行二进制文件了:
然后输入命令查看是否加壳了:
这里的cryptid 1 就代表了加壳了,由此可见爱思助手上下载的应用是没有自动砸壳的,但是pp助手是可以的,那么接下来我们就把这个应用进行砸壳操作:
首先我们打开目录下的dump.py文件,把这里的信息填写对就好了,这个就是ssh登陆的信息,这里也可以看到这个工具也是依赖于OpenSSH的,修改好了保存:
这里运行命令很简单,在当前目录下运行:python dump.py [appname] 关于应用的appname可以通过ideviceinstaller工具或者是frida-ps -U 命令查看即可,这里有个问题,如果python dump.py 命令执行之后发现卡住不动情况的话,可以退出在重新执行命令,成功之后会在当前目录下生成砸壳后的应用:
然后在用otools命令查看是否砸壳成功:
这里看到cryptid 0 说明已经砸壳成功了,可以进行后续的hook操作了。如果不想自己砸壳可以直接去pp助手上下载就是砸过壳的应用ipa了,当然这个工具还有一个很重要的用途就是可以获取系统应用,Android中我们知道系统应用安装包是在 /system/app/ 目录下,第三方是在 /data/app/ 目录下。但是iOS中应用安装之后是释放了一个目录,其实就是把ipa解压成了一个.app文件,其实.app也是一个目录而已,具体的话系统应用是在这里:
这里看到了AppStore.app应用安装目录了,当然还有其他的,我们其实把这个目录下载到本地,然后新建一个Payload,把文件放到里面然后压缩成ipa就是系统应用包了。然后第三方安装的应用在这里:
不过比较奇葩的是,这里的名称是一串码,无法知道是哪个应用的,这里就要借助之前说到的工具了:
我们可以通过ideviceinstaller获取第三方应用的bundleid,然后用cyrun进行注入,执行OC代码:[[NSBundle mainBundle] bundlePath] 就可以获取到当前应用的安装目录了。这里要注意区分,因为cyrun里面输入不支持中文,但是ideviceinstaller只能获取第三方应用的信息,所以我们需要用frida-ps -U 获取系统应用的appname,然后直接砸壳获取应用的ipa,然后解压到app中查看他的Info.plist里面找到bundleid即可。当然不砸壳就到 /Applications/ 目录里面找也可以。所以总结一下我们获取系统应用和第三方应用的安装目录方法:
1》系统应用安装目录就是在 /Applications/ 目录下,或者用frida-ps -U 获取appname然后砸壳得到系统应用ipa
2》第三方应用安装目录在 /private/var/containers/Bundle/Application/ 目录下,但是因为文件名是串码,所以我们需要借助ideviceinstaller获取应用的bundleid,然后用cyrun注入,借助OC代码打印目录路径,或者直接用frida-ps -U 获取appname然后砸壳得到应用的ipa文件。
综上所述可以得知,最直接的办法就是frida-ps -U 获取应用的appname,然后砸壳获取应用ipa文件,这个文件里面包含了应用的所有信息,比如Info.plist文件。有的同学好奇为啥我们都能下载到应用还要这么费劲呢?因为我们知道有时候我们安装一个应用不是从市场上下载到的,比如安装描述文件的,这时候要是想获取应用包那就要用这种方法了。
重要延展:上面的工具还有一个比较好的地方就是他可以获取手机中所有的应用信息,包括系统应用信息,这个就比之前介绍的命令ideviceinstaller -l 好用一点,看到可以获取系统应用的bundleid信息了
不过我们在实际砸壳过程中会发现,Clutch,dumpdecrypted 这两个工具呀一直是-9,据说是因为不完全越狱导致的,而frida-ios-dump的确是可以砸壳,但是他的原理是需要ssh链接设备,会经常出现砸大型应用的时候直接卡住不动特别恶心,虽然可以中断再来一次但是的确效率低,所以就找到了一个更加方便的工具,这个工具直接是在手机中就可以砸壳:CrackerXI 这个需要添加软件源然后在Cydia中安装,这里直接添加了多米诺软件源:https://apt.wxhbts.com :
添加之后会发现,这个软件源还提供了很多常用的插件,比如更改系统主题,微信QQ等常用插件:
看到这里是不是突然想起了Xposed模块,这个Cydia其实有点类似于Android中的Xposed模块,提供各种插件功能,只要手机越狱就可以,不需要额外的安装盗版的ipa文件了:
安装了软件源之后,就直接搜索CrackerXI 就可以安装了:
安装完成之后,会在桌面多个icon,打开之后看到应用列表:
去设置页面打开总开关,然后选择一个需要砸壳的应用:
一般都是需要完整的ipa文件:
他会先跳转打开需要砸壳的应用,然后弹出这个解密对话框
砸壳成功会提示砸壳成功后的ipa文件在设备目录下,然后在dump到本地就是砸壳后的应用了,看到这里是不是觉得这个应用非常好用他不回出现类似于frida-ios-dumper卡住的问题,因为他不需要ssh链接传输,所以这个和frida-ios-dumper相比:
优点:设备就可以操作,可以看到应用列表信息,一键脱壳操作速度也很快
缺点:看到这里只有第三方应用,如果我们想获取系统应用还是得靠frida-ios-dumper了
所以总体看,frida-ios-dumper这个工具他需要ssh链接传输,所以对于大型应用资源文件很大,经常出现链接错误卡住问题,这时候可以考虑用Cracker XI工具,而一般系统应用都不会很大,所以直接用frida-ios-dumper即可,总结来看我会先用frida-ios-dumper进行砸壳,如果多次卡住问题我会尝试使用Cracker XI,当然这里也可以看到,iOS中的砸壳工具其实大致是这几个,但是肯定还有其他的,所以个人觉得如果在砸壳中遇到一些这几个工具都没法用的话,可以尝试继续搜索其他优秀的工具。
七、安装MonkeyDev
关于这个工具其实是iOS逆向里面最常用的工具,这个工具本身不是开发出来的,他的牛逼地方在于他把一些常用的逆向工具都整合到一起,然后只要一键创建工程然后编写脚本就可以进行hook了,省去了以往的复杂hool流程,安装他也很简单:
安装最新的theos
sudo git clone –recursive https://github.com/theos/theos.git /opt/theos
安装ldid(如安装theos过程安装了ldid,跳过)
brew install ldid
配置免密码登录越狱设备(如果没有越狱设备,跳过)
ssh-keygen -t rsa -P ”
ssh-copy-id -i /Users/username/.ssh/id_rsa root@ip
或者安装sshpass自己设置密码:
brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb
安装
你可以通过以下命令选择指定的Xcode进行安装:
sudo xcode-select -s /Applications/Xcode-beta.app
默认安装的Xcode为:
xcode-select -p
执行安装命令:
sudo /bin/sh -c “$(curl -fsSL https://raw.githubusercontent.com/AloneMonkey/MonkeyDev/master/bin/md-install)”
卸载
sudo /bin/sh -c “$(curl -fsSL https://raw.githubusercontent.com/AloneMonkey/MonkeyDev/master/bin/md-uninstall)”
更新
如果没有发布特殊说明,使用如下命令更新即可:
sudo /bin/sh -c “$(curl -fsSL https://raw.githubusercontent.com/AloneMonkey/MonkeyDev/master/bin/md-update)”
安装/更新之后重启下Xcode再新建项目。
上面操作完成之后,我们打开Xcode就可以看到这个选项:
然后傻瓜试的下一步就可以了,具体操作说明等到后面文章说明,用案例介绍如何hook应用功能,这里不在详细介绍了,大家只要记住这个工具是后续常用的一个hook工具。
八、Reveal工具安装使用
这个工具其实在上面的MonkeyDev已经集成了,他的作用就是可以查看应用的界面信息,比如控制器,View类型等,好比Android中的UI分析工具Layout Inspector:
这个工具在对于逆向分析需要找到当前页面信息元素的时候比较有用,其实上面提到的cyrun命令也是可以有脚本打印当前页面层级关系和控制器类信息的,但是那个终究是个命令看起来很不方便,不如这个UI界面展示的好:
第一步:获取Mac端的Reveal(这个软件是收费的,大家自行解决收费问题),然后show library找到RevealServer.framework,最新版本都是framework了,而不是以前说的dylib了:
第二步:Cydia中找到Reveal2Loader安装
第三步:把第一步中的RevealServer.framework拷贝到设备的: /Library/Frameworks/ 下面
第四步:第二步安装之后,发现在 /Library/MobileSubstrate/DynamicLibraries/ 下面有reveal2Loader.dylib和reveal2Loader.plist
因为Cydia中的Reveal2Loader版本和Mac中的版本不一致会报错,所以这时候需要把Mac端的RevealServer.framework中的RevealServer改名reveal2Loader.dylib覆盖上面的目录中的dylib即可
然后我们打开Reveal可以看到能够操作的应用:
看到这里有连线的和wifi的两种状态,这个得到的是当前在运行的应用,点开QQ应用:
这里看到就可以发现QQ页面的布局情况了,虽然有点复杂但是可以慢慢查看,控件和当前控制器的类信息了,方便后面进行逆向分析操作了。
本文的目的只有一个就是学习逆向分析技巧,如果有人利用本文技术进行非法操作带来的后果都是操作者自己承担,和本文以及本文作者没有任何关系,本文涉及到的代码项目可以去编码美丽小密圈自取,欢迎加入小密圈一起学习探讨技术
九、总结
通过上面整理了那几个工具,当然还有其他辅助开发工具就没说了,比如手机中查看文件目录的工具Filza,这个在Cydia里面直接搜索安装即可:
还有逆向分析看源码的工具,比如dump出应用的头文件工具class-dumper,静态分析oc代码的Hopper和IDA等,这个只有等到后面具体操作的时候才详细分析,今天说的这几个工具是最基本的几个工具。本文内容其实有点多,大家可以慢慢看,这里在说明几点主要是梳理文章中的重点:
第一、爱思助手的好处是他能够在设备中安装uncOver,而真正越狱的就是这个工具,越狱成功会安装一个Cydia工具,所以如果发现爱思助手安装失败,可以去网上找一个能够安装uncOver地址即可。不一定依赖于爱思助手,不过爱思助手有一个好处他的工具箱里面有很多常用工具。
第二、Cydia如果网络错误,一定要记得安装乐网app,但是要记住不要安装AppStore里面的,而是爱思助手里面的版本,否则没有效果。
第三、如何获取设备中的所有应用信息,包括bundleid和安装包文件?其实如果有了安装包ipa文件之后,就可以获取很多应用信息包括bundleid,在ipa里面的app里面的Info.plist里面有。这里主要有两种方式获取应用包:
1》第一种直接用frida-ps -U 命令获取应用appname,然后砸壳获取应用包即可,这种方式可以获取系统应用和第三方应用。
2》第二种需要区分系统应用,对于系统应用的安装包.app文件在 /Applications/ 目录下,而第三方应用在 /private/var/containers/Bundle/Application/ 目录下,但是文件目录名都是串码,如果要对应上,需要用ideviceinstaller获取应用的bundleid,然后用cyrun进行注入执行oc代码获取目录即可。这里获取到的都是app目录,如何生成对应的ipa文件呢?其实很简单创建一个Payload目录,把app文件放进去,然后压缩成ipa即可。
3》其实可以用frida-ios-dumper中的工具直接查看设备中所有的应用信息。
第四、关于砸壳问题个人推荐frida-ios-dumper工具,如果这个工具出现卡住问题,可以尝试使用Cracker XI工具
《Android应用安全防护和逆向分析》
点击立即购买:京东 天猫
更多内容:点击这里
关注微信公众号,最新技术干货实时推送
转载请注明:尼古拉斯.赵四 » iOS安全逆向之旅—安全逆向环境搭建和工具使用介绍