ios的砸壳和基础工具
一、砸壳
1、dumpdecrypted
这种砸壳方式我在ios11的机子上测试没能解密成功,然后ios10一点问题都没有。可能是我太渣了吧。新手还请用ios10来尝试
首先从github上下载了编译出来dumpdecrypted,这个基本没啥问题的。
接着我们用到了两个路径,一个是沙盒到路径,还有一个是运行的路径
运行想要砸壳的应用,然后ps -e|grep Application找到要砸壳的应用,将路径保存出来
然后我们需要找到沙盒到路径,简单的办法就是使用cycript注入之后,再查询出来。
ios11的是
1 | [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0] |
1 | file:///var/mobile/Containers/Data/Application/3B94D3F0-2CFB-4E0E-A0A2-03F960B2BA60/Documents/ |
ios10的是NSHomeDirectory()
1 | /var/mobile/Containers/Data/Application/3B94D3F0-2CFB-4E0E-A0A2-03F960B2BA60 |
接着把编译好的dumpdecrypted.dylib用scp上传到设备的/var/mobile/Containers/Data/Application/3B94D3F0-2CFB-4E0E-A0A2-03F960B2BA60/Documents/这个目录下
然后就可以砸壳了,cd到沙盒的目录下。执行下面的命令
1 | DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/4AE69936-E547-4B27-B76F-D5CEAB992553/Target.app/Target |
成功后会在当前目录生成出砸壳后的文件,scp到本地即可
2、bfinject
使用这个方式砸壳是因为刚开始我手上只有ios11的手机,然后萌新各种无法成功解密,并且获取沙盒路径也不好使,并且cycript也无法正常运行。然后我就找到了bfinject。我们可以用它来实现在ios11上运行cycript,也可以直接用它来进行砸壳。使用起来也很简单便捷
1 | bash bfinject -P iRead.app -L decrypt |
两种方式都能砸壳,成功砸壳后会生成文件。我们要搜索下文件生成在哪里了
1 | find /var/mobile/Containers/Data/Application/ -name decrypted-app.ipa |
然后把这个砸好的拷贝到本地即可。
3、frida-ios-dump
这个使用我感觉没啥好介绍了的了。ios的frida用起来简单方便
然后搜索frida,安装。有点小坑的是,frida有点略大,然后国内的网经常下载失败,反正我安装尝试很多次,最后搭梯子才下好的。
然后github上的frida-ios-dump项目拉下来。有一点坑的是,砸壳的这个py脚本里面用了一些linux的命令。如果你是在window下面来进行砸壳的话,那么你就得尽兴一些特殊处理才能成功砸壳了。
方案一,将py里面用到的一些linux命令转换成对应的win的命令。
方案二,安装cywin,安装的时候,把py脚本中用到的一些linux命令添加一下。这样脚本就可以成功运行并砸壳了。
二、各类工具
1、reveal
这个是界面ui分析工具,也是有些小坑在里面,我照着书里面的发现ios library根本点不了,没有找到这个文件,最后查了下,原来新版本的不一样。
Reveal/Contents/SharedSupport/iOS-Libraries/RevealServer.framework 目录下的 RevealServer 复制到设备/Library/RHRevealLoader/libReveal.dylib
然后RevealServer.framework 拷贝到手机上的/System/Library/Frameworks 目录下
然后到设置里面找到reveal,点开后选择自己想要抓到应用,我们就可以抓到界面了。
2、dpkg
先安装Xcode,然后就是按照下面的步骤来。如果安装了不能用要记得sudo port selfupdate
xcode-select –install
sudo xcodebuild -license
安装 Macports ,网址:http://www.macports.org/install.php
测试时否能用port可以先sudo port list一下
如果找不到port是需要设置环境变量
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
如果不能用就先sudo port selfupdate
最后执行安装dpkg
sudo port -f install dpkg
3、Charles
这个是用来抓http包的,用法很简单,这里我只说下ios设备抓https时,使用10及10以上会有个小坑
手机代理端口设置好。保证能抓包http包先,然后手机访问http://chls.pro/ssl,如果能成功安装,说明配置ok。不能就是手机还没设置好
这里注意手机不能翻q,否则可能会导致不能正常的安装
然后进入设置,通用,关于本机,证书信任,开启刚刚的证书即可
4、cycript
这个不得不说相当强大,应用运行时注入,写插件的时候可以提前用这个执行测试效果。很大的提高开发效率,简单的功能可以省掉写测试插件了。
但是也有坑,ios10运行相当顺利。但是ios11需要使用bfinject注入才能运行成功,并且control+d退出好像有点问题,我没有去查啥情况。
在ios11上运行
1 | bash bfinject -P Reddit -L cycript |
据说最新的插件装上也可以直接运行cycript。不过我没有测试了。
ios10直接运行
1 | cycript -p demo2 |
由于cycript上可以导入脚本的,如果先导入脚本,把常用的简单操作可以直接封装在脚本中,这样就可以节省我们很多时间
这里我用的github上的mjcripy。这样使用前先@import mjcript 然后查询一些信息的命令可以直接调用封装好的,主要还是因为我object-c太渣了。毕竟没做过ios开发。
5、debugserver+lldb动态调试
xcode如果有进行过调试的话,会在自动把debugserver复制到移动设备上,路径是/Developer/usr/bin下面会有个debugserver
复制到pc端,然后签名授权下,下面的内容保存为ent.xml
1 | <plist version="1.0"> |
然后签名
1 | ldid -S ent.xml debugserver |
然后把这个文件复制到手机的/usr/bin目录下
如果动态调试太卡,我们可以用iport转发下端口,然后使用localhost来进行连接
移动设备
1 | debugserver *:1234 -a “demo2” |
pc端执行lldb
然后链接到移动设备
1 | process connect connect://ip:1234 |
查询模块在内存中的偏移量
1 | image list -o -f |
Ida中的函数地址+偏移量=偏移后的基址
根据函数名设置断点
1 | b function_name |
根据地址设置断点
1 | b s -a 0x1111 |
不得不说github就说我们这些渣渣新的好基友,lldb的命令对我来说,也是头昏脑花,于是搜一搜。
果然有仗义大佬,chisel这个项目就可以让我们舒舒服服的玩耍起来了。
6、插件编写
theos
theos的编译
nic.pl 创建项目
make 编译
make package 打包成deb
make install 安装到远程移动设备
安装到远程设备是用的环境变量的值
THEOS_DEVICE_IP和THEOS_DEVICE_PORT来设置远程设备的ip和端口
MonkeyDev
我感觉就是xcode集成了theos,直接用theos每次我都是直接用编辑器来写,感觉是各种不方便,想着要是能用个ide该多爽。然后就发现是有的。
github上找到monkeydev,按照readme安装后,就可以看到Xcode创建的时候下面多了一些模版,里面的logos tweak就和theos的一样了。