Frida iOS12

前言

此文只是我在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

准备工作

  1. 使用CyDownload或Cyder2到https://build.frida.re/下载deb包
  2. 导入手机后直接安装

修改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
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<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
2
3
4
cd /var/LIB/LaunchDaemons
launchctl load re.frida.server.plist #加载服务
launchctl start re.frida.server.plist #启动服务
ps aux|grep frida #可以透过该命令查看是否启动成功。

结果

最后,的确让frida-server运行起来了。但是在我的电脑上。使用frida-ps -U设备直接重启。试了多次都是重启。不过rootlessjb在iPhone6上的稳定性极差。仅仅是越狱就需要多次才能成功。平时使用中也是容易重启。所以目前并不能确定是frida的问题还是rootlseejb的问题。rootlessjb在iPhone7 Plus上稳定性很不错,等找机会再拿来测试看看此法是否可行吧。

法二

前言

法一无效,想起Frida除了支持越狱模式还只能非越狱模式。但是非越狱模式一般都是直接修改ipa包,把FridaGadget.dylib打包进ipa,来注入。既然我们都已经越狱了,还要这样做就太繁琐了。我们直接把FridaGadget.dylib当插件来注入相关app即可。

下载dylib

下载FridaGadget.dylib

生成plist

将下面内容保存为FridaGadget.plist,此文件是注入com.apple.springboard,请根据自己需求修改。

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Filter</key>
<dict>
<key>Bundles</key>
<array>
<string>com.apple.springboard</string>
</array>
</dict>
</dict>
</plist>

安装到手机

1
2
scp FridaGadget.dylib root@192.168.1.110:/var/LIB/MobileSubstrate/DynamicLibraries/  #192.168.1.110手机局域网IP
scp FridaGadget.plist 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-cycript

1
2
3
iMac: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。虽然稍微麻烦点。但是至少能用。


本文结束感谢您的阅读