前言
此文只是我在iOS12上折腾Frida的遇到的一些坑。
需求
iOS12越狱正在向我们走来。目前rootlessjb越狱虽然没有带Cydia。但是对于很多人来说基本够用了。iOS11之前,我习惯使用Cycript来做App的调试。iOS12就想拿Frida来练练手。
法一
前言
虽然rootlessjb 3.2.6开始已经支持deb包直接安装了。不过由于rootlessjb越狱所有的文件都在/var
,所以直接安装是无法成功加载frida-server
voucher_swap is used for 16K devices, and v3ntex for 4K ones.
Binaries are located in: /var/containers/Bundle/iosbinpack64
Launch daemons are located in /var/containers/Bundle/iosbinpack64/LaunchDaemons
/var/containers/Bundle/tweaksupport contains a filesystem simulation where tweaks and stuff get installed
Symlinks include: /var/LIB, /var/ulb, /var/bin, /var/sbin, /var/Apps, /var/libexec
准备工作
- 使用CyDownload或Cyder2到
https://build.frida.re/
下载deb包 - 导入手机后直接安装
修改plist
将/var/containers/Bundle/iosbinpack64/LaunchDaemons/re.frida.server.plist
文件中的/usr/sbin/frida-server
全部修改为/var/usr/sbin/frida-server
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<plist version="1.0">
<dict>
<key>Label</key>
<string>re.frida.server</string>
<key>Program</key>
<string>/var/usr/sbin/frida-server</string>
<key>ProgramArguments</key>
<array>
<string>/var/usr/sbin/frida-server</string>
</array>
<key>EnvironmentVariables</key>
<dict>
<key>_MSSafeMode</key>
<string>1</string>
</dict>
<key>UserName</key>
<string>root</string>
<key>MachServices</key>
<dict>
<key>com.apple.uikit.viewservice.frida</key>
<true/>
</dict>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>ThrottleInterval</key>
<integer>5</integer>
<key>ExecuteAllowed</key>
<true/>
</dict>
</plist>
加载服务
1 | cd /var/LIB/LaunchDaemons |
结果
最后,的确让frida-server运行起来了。但是在我的电脑上。使用frida-ps -U
设备直接重启。试了多次都是重启。不过rootlessjb在iPhone6上的稳定性极差。仅仅是越狱就需要多次才能成功。平时使用中也是容易重启。所以目前并不能确定是frida的问题还是rootlseejb的问题。rootlessjb在iPhone7 Plus上稳定性很不错,等找机会再拿来测试看看此法是否可行吧。
法二
前言
法一无效,想起Frida除了支持越狱模式还只能非越狱模式。但是非越狱模式一般都是直接修改ipa包,把FridaGadget.dylib
打包进ipa,来注入。既然我们都已经越狱了,还要这样做就太繁琐了。我们直接把FridaGadget.dylib
当插件来注入相关app即可。
下载dylib
生成plist
将下面内容保存为FridaGadget.plist
,此文件是注入com.apple.springboard
,请根据自己需求修改。
1 |
|
安装到手机
1 | scp FridaGadget.dylib root@192.168.1.110:/var/LIB/MobileSubstrate/DynamicLibraries/ #192.168.1.110手机局域网IP |
开始调试
注销手机FridaGadget.dylib
就会注入相关进程了。
如果是注入com.apple.springboard
的话,会一直转圈。这是因为FridaGadget挂起了进程。
使用Frida调试
手机连到电脑上,在电脑终端中使用frida -U --no-pause -f re.frida.Gadget
后就可以愉快玩耍了。1
2
3
4
5
6
7
8
9
10
11
12 ____
/ _ | Frida 12.3.3 - A world-class dynamic instrumentation toolkit
| (_| |
> _ | Commands:
/_/ |_| help -> Displays the help system
. . . . object? -> Display information about 'object'
. . . . exit/quit -> Exit
. . . .
. . . . More info at http://www.frida.re/docs/home/
Spawned `re.frida.Gadget`. Use %resume to let the main thread start executing!
[iPhone::re.frida.Gadget]-> %resume
[iPhone::re.frida.Gadget]->
相关技巧1
2[iPhone::re.frida.Gadget]-> ObjC.classes.UIApplication.sharedApplication().keyWindow().recursiveDescription().toString() #打印当前View详情
[iPhone::re.frida.Gadget]-> ObjC.Object(ptr("0x123ed9ed0")) #地址转ObjC对象
使用Frida-Cycript调试
Frida用起来有点操蛋,就想着能不能用Cycript来调试。
Github上有个项目frida-cycript1
2
3iMac:frida-cycript-2.0.5-macos-x86_64 zlxdike$ system_profiler SPUSBDataType |grep 'Serial Number' #查看usb端口device id
Serial Number: 7645899f9c3f57faf29fa40359de786238801953
iMac:frida-cycript-2.0.5-macos-x86_64 zlxdike$ ./cycript -d 7645899f9c3f57faf29fa40359de786238801953 -p Gadget
结果
此法,算是曲线救国,需要注入不同app。就需要修改FridaGadget.plist
。虽然稍微麻烦点。但是至少能用。