注意:
从App Store下载的app,砸壳重签名后安装到其他手机上会出现The application is not build for this device.
安装不了
解决方案1 :用电脑PC端的itunes下载对应的app,再安装到手机里,再进行砸壳重签名就没问题了。
解决方案2 :由于砸壳后ipa做了瘦身,一些UI支持的设备在info.plist里显示不全,只需要修改info.plist的UISupportedDevices项,把自己的设备添加上去即可。
1.砸壳原理
提交给Appstore发布的App,都经过官方保护而加密,这样可以保证机器上跑的应用是苹果审核过的,也可以管理软件授权。经过App Store加密的应用,我们无法通过Hopper等反编译静态分析,也无法Class-Dump,在逆向分析过程中需要对加密的二进制文件进行解密才可以进行静态分析。
iOS常用的是动态砸壳,动态砸壳就是从运行在进程内存空间中的可执行程序映像(image)入手,来将内存中的内容进行转储(dump)处理来实现脱壳处理。这种方法实现起来相对简单,且不必关心使用的是何种加密技术。
2.iOS常用的砸壳工具
越狱机器
2.1.Clutch
Clutch通过调用posix_spawnp生成一个进程,然后暂停进程,dump内存
下载最新的Release版
去掉版本号,改名为Clutch
2.1.1 开启端口映射
python ~/GGShell/usbmuxd-1.0.8/tcprelay.py -t 22:10010
2.1.2 将Clutch文件拷贝到iPhone的/usr/bin目录
scp -P 10010 ~/GGShell/Clutch root@localhost:/usr/bin
2.1.3 将Clutch文件拷贝到iPhone的/usr/bin目录
登录到手机
ssh -p 10010 root@localhost
下面的情况是权限不够
赋予可执行的权限
chmod +x /usr/bin/Clutch
查看可砸壳的应用
2.1.4 开始砸壳
砸壳成功
拷贝出来的时候,找不到这个文件可能是名字的问题
在iFunBox里面重命名一下成功了
2.2. dumpdecrypted
dumpdecrypted动态注入后,dump内存中解密的代码部分
2.2.1 在源代码目录执行make指令进行编译,获得dylib动态库文件
2.2.2 将dumpdecrypted.dylib拷贝到根目录/var/root
scp -P 10010 dumpdecrypted.dylib root@localhost:~/
2.2.3 登录手机查看微信的可执行文件路径
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/2B6D4F9E-1960-4733-9C14-D686D3976879/WeChat.app/WeChat
会出现失败,需要重签名
1.终端执行下 :security find-identity -v -p codesigning
看看 你电脑 当前有哪些可用的签名证书
2.然后重新签下名:codesign --force --verify --verbose --sign "iPhone Developer: xxx xxxx (xxxxxxxxxx)" dumpdecrypted.dylib
然后重新拷贝进手机,重新执行下,砸壳出来的是可执行文件
拷贝出来
otool -l一下,cryptid 0代码已砸壳
2.3 frida-iOS-dump
该工具基于frida提供的强大功能通过注入js实现内存dump然后通过python自动拷贝到电脑生成ipa文件
2.3.1 安装pip $sudo easy_install pip
2.3.2 安装frida $sudo -H pip install frida-tools
sudo -H == set-home 将 HOME 变量设为目标用户的主目录
2.3.3 安装 frida-ios-dump 进入目录安装依赖 sudo pip install -r requirements.txt --upgrade
2.3.4 手机Cydia添加源https://build.frida.re,安装Frida
2.3.5 ./dump.py 微信 手机需要运行微信,./dump.py -l
查看应用名字bundleid
以后只需要一行代码就可以砸壳了