1. 砸壳工具安装
在论坛上搜索,发现大家都说 bagbak (https://github.com/ChiChou/bagbak) 这个工具比较好用,尝试安装一下。看了下简介,工具是基于frida,并用node.js编写,frida 安装就不说了,文章太多,这里简述一下 node.js 安装:
brew install node
brew install nvm
然后按照 github 页面使用 npm 安装 bagbak:
npm install -g bagbak
这个下载速度简直是龟速,查了一下,npm 可以设置代理,果然快多了,等命令执行完成后,工具就安装好了:
npm config set https-proxy http://yourhost:port
2. 开砸
这个工具使用时确实挺简单的,先列出所有安装在设备上的App:
bagbak -l
┌─────────┬────────────────────────────────┬────────────────┬──────┐
│ (index) │ identifier │ name │ pid │
├─────────┼────────────────────────────────┼────────────────┼──────┤
│ 0 │ 'com.apple.AppStore' │ 'App Store' │ 949 │
│ 1 │ 'kjc.loader' │ 'checkra1n' │ 0 │
│ 2 │ 'com.google.chrome.ios' │ 'Chrome' │ 0 │
│ 3 │ 'com.saurik.Cydia' │ 'Cydia' │ 557 │
│ 4 │ 'developer.apple.wwdc-Release' │ 'Developer' │ 0 │
│ 5 │ 'com.apple.facetime' │ 'FaceTime通话' │ 0 │
│ 6 │ 'com.tigisoftware.Filza' │ 'Filza' │ 0 │
│ 7 │ 'max.HelloiOSProject' │ 'HelloiOS' │ 0 │
│ 8 │ 'com.apple.MobileStore' │ 'iTunes Store' │ 0 │
│ 9 │ 'com.apple.mobilesafari' │ 'Safari浏览器' │ 0 │
│ 10 │ 'com.liguangming.Shadowrocket' │ 'Shadowrocket' │ 0 │
│ 11 │ 'com.apple.TestFlight' │ 'TestFlight' │ 0 │
之后直接 bagbak + id 或者 name
3. 定位关键方法
class-dump 出未加密的Mach-o文件后,搜索 jailbreak 字符串看上去像的方法都hook一下,看看输出,发现是最后一个方法在起作用
4. Hook掉
直接上 Hook 代码,尝试by-pass,成功绕过
%hook RiskStubAPI
+ (BOOL)isJailbreak {
BOOL result = %orig;
NSLog(@"[RiskStubAPI isJailbreak] : return %@", result ? @"YES" : @"NO");
NSLog(@"[RiskStubAPI isJailbreak] changing to NO");
return NO;
}
%end
5. 查看 Hook 日志
这里要注意一下,发现用 Mac 自带的 Console.app 查看NSLog,有部分log不会输出,搞得我还以为哪里又写错了,搜索发现,有人说 libimobiledevice 中的 idevicesyslog 查看日志比较方便,这里记录一下安装和使用:
如果原来直接 brew install 安装过libimobiledevice,需要先卸载掉,brew 上的版本太过于老旧,存在很多未修的bug
brew uninstall libimobiledevice usbmuxd
从源码编译安装
brew install -v --HEAD --build-from-source usbmuxd libimobiledevice
-
运行libimobiledevice套件
idevice_id
命令查看已经连接上的iOS设备,相当于 Androidadb devices
idevicesyslog
命令查看系统日志,相当于 Android adb logcat