这里如果不出意外情况的话,会提示你越狱成功,同时会在你的设备中安装这个应用:uncOver
我这个是因为已经JailBreak了,所以提示的是Re-Jailbreak了,第一次进入应该提示你Jailbreak,直接点击即可,这里没有遇到什么问题,运行完了之后会弹出一个对话框,点击ok就会重启:
这里一定要注意不是重启设备就是我们常说的重启手机,因为现在包括上面的爱思助手的越狱方式都叫做不完美越狱,就是越狱成功了,在真正意义上重启设备或者关机越狱就会失效,需要重新越狱,所以大家一般没事就不用关闭设备或者重启了,而上面这个包括后面我们都有一种操作叫做重启(killallSpringBoard)。
拓展说明:这里遇到过一个问题,就是上面爱思助手有时候会抽风越狱报了各种错,我遇到的是这个错误:
到这里呢如果重启之后没问题的话,桌面多了一个Cydia的东西,这个其实就是越狱之后的经典插件管理应用,可以把它理解理解成一个专门逆向破解的工具市场,我们打开他:
这里因为我已经安装了一些常用的工具了,所以这里也没法给大家演示每个工具的安装步骤了,后面会单独介绍常用的工具,这里安装其实很简单,直接点击搜索,然后搜索你想要安装的逆向工具即可。
当然我们在安装一些工具的时候,他也会提示你找不到该工具或者下载失败问题,这时候我们需要安装指定的软件源,这里我加了一个比较常用的pp助手源,后面下载和搜索OpenSSH工具用到的。
到这里其实这两个核心的工具已经安装好了,但是这个过程看着挺顺利的,其实并不是,在这个过程中我遇到了很多问题,比如uncOver打开闪退,Cydia打开闪退,uncOver无限重启之后Cydia打开失效闪退问题等,当然相信大家还会遇到其他各式各样的问题,这里就先把我遇到的问题以及处理方式总结一下:
安装之后其实就简单了,我们可以输入命令进入设备空间里面了:
这里就看到这个工具非常好用,可以从手机里pull文件到本地,也可以把本地文件push到设备中,所以这里看到OpenSSH这个命令的重要性了,如果没有他后面很多工具和工作没法展开,一旦进入了设备空间中,那么我们就可以为所欲为了,可以安装deb包,可以查看安装的应用信息等,后面的砸壳等都是依赖于这个工具的。
拓展说明:如果ssh之前是可以连接上的,突然提示connectionerror了,如果Cydia可以打开,这个可能需要killallSpringBoard刷新一下,如果Cydia打开闪退,请参考之前的Cydia和uncOver的操作失败解决办法。
为什么这两个工具要单独拿出来说安装呢,因为这两个工具的重要程度不亚于OpenSSH功能了,这两个工具就好比Android中的adb命令,对于开发或者是逆向都有很重要的作用,后面介绍内容的时候就知道这个工具的威力了,安装其实比较简单:
#brewupdate#brewinstalllibimobiledevice#brewinstallideviceinstaller
其中ideviceinstaller看到名字就知道他主要和ipa应用有关系:
比如我们安装一个ipa文件,和Android中的adbinstallxxx.apk命令一样:
#ideviceinstaller-ixxx.ipa
如果想卸载一个应用,和Android中的adbuninstallpackagename命令一样:
#ideviceinstaller-U[bundleid]
查看设备中已经安装的应用信息,和Android中的adbshellpmlistpackages命令一样:
#ideviceinstaller-l
比如查看设备的uuid信息,和Android中的adbget-serialno命令一样:
截取设备屏幕图片,和Android中的adbshellscreencap命令一样:
#idevicescreenshot
这个命令有个坑,运行可以会报错:
如果在使用截图的时候出现报错信息,需要安装指定设备系统版本的DeveloperDiskImage,获取版本号命令:#ideviceinfo-kProductVersion
安装DeveloperDiskImage命令:#ideviceimagemounterDeveloperDiskImage.dmg然后就可以正常截图了
查看系统日志信息,和Android中的adblogcat命令一样:
#idevicesyslog
查看设备所有信息:
#ideviceinfo
然后用dpkg安装包即可,如果上面在设备中下载失败,可以在本地下载好了导入到设备中也可以:
dpkg-icycript_0.9.594_iphoneos-arm.debdpkg-inet.tateu.cycriptlistenertweak_1.0.0_iphoneos-arm.debnet.tateu.cyrun_1.0.5_iphoneos-arm.deb这时候是不是看到了,上面说到的安装OpenSSH是多么的重要了,安装好了之后我们就可以进行应用的注入和编写hook代码了,用法很简单:
使用指令:cyrun-nApp名称-e或cyrun-bbundleID-e例如:cyrun-nlive4iphone-e或cyrun-bcom.tencent.live4iphone-e
注意:这里的-n是appname,我们可以通过ideviceinstaller或者frida-ps-U获取,但是这里好像不能输入中文,比较坑
那么接下来我们如何获取应用的bundleID或者应用名称呢?这里的bundleID就是Android中的packagename,这里有很多种方法哈,我们可以借助代码获取手机中所有应用的bundleid信息,好比Android中通过代码方式获取所有已经安装的应用包名一样,当然也可以用后面介绍的frida工具获取,也可以用ideviceinstaller命令获取:
cy#[alertViewshow]
如果要退出可以按control+d快捷键,这个脚本支持OC语言的,所以我们想写插件啥的都可以:
2》展示的架构是基于layoutcy#[[UIAppkeyWindow]_autolayoutTrace].toString()
3》通过view的nextResponder方法,可以找出它所属的视图控制器ViewControllercy#[#0x181009f0nextResponder]
4》打印出当前界面的view层级cy#UIApp.keyWindow.recursiveDescription().toString()
5》找到目标App的Documents目录路径cy#[[NSFileManagerdefaultManager]URLsForDirectory:NSDocumentDirectoryinDomains:NSUserDomainMask][0]获取bundleinfo[[NSBundlemainBundle]infoDictionary].toString()
6》获取应用安装目录cy#[[NSBundlemainBundle]bundlePath]
这个命令虽然不是我们后面主要的hook工具,因为后面主要利用MonkeyDev来进行编写插件等操作,但是这个命令还是逆向分析中不可或缺的常用工具,当然还有很多常用的语法后面用到再说,前提是你要熟悉OC语法哦。
1》因为Mac自带了Python,所以不需要额外安装,如果是其他系统可以自行安装Python即可
2》安装pip:sudoeasy_installpip
3》安装frida:sudopipinstallfrida-tools
在这个过程中可能会遇到一些错误,这个不同错误可自行搜索处理接口。
5》进入frida-ios-dump目录下:sudopipinstall-rfrida-ios-dump/requirements.txt–upgrade
6》打开Cydia安装frida:
安装好了之后,我们连接手机就可以输入命令查看当前设备的进程信息了,这个和Android也是类似:frida-ps-U
这里可以看到我们可以获取应用的AppName,还记得上面的cyrun工具注入需要应用名称这里也是可以获取的,接下来我们开始脱壳,首先我们介绍一个工具,这个工具是用来查询一个应用是否被加壳了:
otool-l[ipa解压->xxx.app->显示包内容->找到二进制文件]|grepcrypt
这个命令是系统自带的,需要注意的是输入文件是二进制可执行文件,下面我们可以用这个命令查看一下加壳的应用,我们可以取爱思助手上下载应用,然后本地打开执行命令,我们下载下来的是最终的ipa文件,然后解压:
解压ipa之后再Payload中找到xxx.app文件,然后显示包内容,就可以看到最终的可执行二进制文件了:
然后输入命令查看是否加壳了:
这里的cryptid1就代表了加壳了,由此可见爱思助手上下载的应用是没有自动砸壳的,但是pp助手是可以的,那么接下来我们就把这个应用进行砸壳操作:
首先我们打开目录下的dump.py文件,把这里的信息填写对就好了,这个就是ssh登陆的信息,这里也可以看到这个工具也是依赖于OpenSSH的,修改好了保存:
这里运行命令很简单,在当前目录下运行:pythondump.py[appname]关于应用的appname可以通过ideviceinstaller工具或者是frida-ps-U命令查看即可,这里有个问题,如果pythondump.py命令执行之后发现卡住不动情况的话,可以退出在重新执行命令,成功之后会在当前目录下生成砸壳后的应用:
然后在用otools命令查看是否砸壳成功:
这里看到cryptid0说明已经砸壳成功了,可以进行后续的hook操作了。如果不想自己砸壳可以直接去pp助手上下载就是砸过壳的应用ipa了,当然这个工具还有一个很重要的用途就是可以获取系统应用,Android中我们知道系统应用安装包是在/system/app/目录下,第三方是在/data/app/目录下。但是iOS中应用安装之后是释放了一个目录,其实就是把ipa解压成了一个.app文件,其实.app也是一个目录而已,具体的话系统应用是在这里:
这里看到了AppStore.app应用安装目录了,当然还有其他的,我们其实把这个目录下载到本地,然后新建一个Payload,把文件放到里面然后压缩成ipa就是系统应用包了。然后第三方安装的应用在这里:
不过比较奇葩的是,这里的名称是一串码,无法知道是哪个应用的,这里就要借助之前说到的工具了:
我们可以通过ideviceinstaller获取第三方应用的bundleid,然后用cyrun进行注入,执行OC代码:[[NSBundlemainBundle]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信息了
看到这里是不是突然想起了Xposed模块,这个Cydia其实有点类似于Android中的Xposed模块,提供各种插件功能,只要手机越狱就可以,不需要额外的安装盗版的ipa文件了:
安装了软件源之后,就直接搜索CrackerXI就可以安装了:
安装完成之后,会在桌面多个icon,打开之后看到应用列表:
去设置页面打开总开关,然后选择一个需要砸壳的应用:
一般都是需要完整的ipa文件:
他会先跳转打开需要砸壳的应用,然后弹出这个解密对话框
砸壳成功会提示砸壳成功后的ipa文件在设备目录下,然后在dump到本地就是砸壳后的应用了,看到这里是不是觉得这个应用非常好用他不回出现类似于frida-ios-dumper卡住的问题,因为他不需要ssh链接传输,所以这个和frida-ios-dumper相比:
优点:设备就可以操作,可以看到应用列表信息,一键脱壳操作速度也很快
缺点:看到这里只有第三方应用,如果我们想获取系统应用还是得靠frida-ios-dumper了
所以总体看,frida-ios-dumper这个工具他需要ssh链接传输,所以对于大型应用资源文件很大,经常出现链接错误卡住问题,这时候可以考虑用CrackerXI工具,而一般系统应用都不会很大,所以直接用frida-ios-dumper即可,总结来看我会先用frida-ios-dumper进行砸壳,如果多次卡住问题我会尝试使用CrackerXI,当然这里也可以看到,iOS中的砸壳工具其实大致是这几个,但是肯定还有其他的,所以个人觉得如果在砸壳中遇到一些这几个工具都没法用的话,可以尝试继续搜索其他优秀的工具。
关于这个工具其实是iOS逆向里面最常用的工具,这个工具本身不是开发出来的,他的牛逼地方在于他把一些常用的逆向工具都整合到一起,然后只要一键创建工程然后编写脚本就可以进行hook了,省去了以往的复杂hool流程,安装他也很简单:
上面操作完成之后,我们打开Xcode就可以看到这个选项:
这个工具其实在上面的MonkeyDev已经集成了,他的作用就是可以查看应用的界面信息,比如控制器,View类型等,好比Android中的UI分析工具LayoutInspector:
这个工具在对于逆向分析需要找到当前页面信息元素的时候比较有用,其实上面提到的cyrun命令也是可以有脚本打印当前页面层级关系和控制器类信息的,但是那个终究是个命令看起来很不方便,不如这个UI界面展示的好:
第一步:获取Mac端的Reveal(这个软件是收费的,大家自行解决收费问题),然后showlibrary找到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可以看到能够操作的应用:
本文的目的只有一个就是学习逆向分析技巧,如果有人利用本文技术进行非法操作带来的后果都是操作者自己承担,和本文以及本文作者没有任何关系,本文涉及到的代码项目可以去编码美丽小密圈自取,欢迎加入小密圈一起学习探讨技术
通过上面整理了那几个工具,当然还有其他辅助开发工具就没说了,比如手机中查看文件目录的工具Filza,这个在Cydia里面直接搜索安装即可:
第一、爱思助手的好处是他能够在设备中安装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工具,如果这个工具出现卡住问题,可以尝试使用CrackerXI工具