快轉到主要內容

USBFlux,讓macOS Xcode遠端偵錯iOS裝置

Linux系統 虛擬機與容器技術 macOS QEMU Xcode libimobiledevice
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

USBFlux (usbfluxd) 是Corellium開發的一款自由軟體,用於轉發USBMux的網路界面。

Apple設計了USBMux (usbmuxd),規定了iPhone與macOS之間的USB通訊方式。原本USBMuxd是macOS才有的閉源軟體,在被人破解後成為libmobiledevice專案的一部分,移植到Linux、Windows系統。usbmuxd會監聽iPhone的socket,於是使用者便能透過此軟體與iPhone互動,比如備份檔案、存取照片等操作。

USBFlux這款軟體則是轉發usbmuxd的socket,讓遠端的裝置連線進來,讓它好像變成本機連線的一樣。

…好抽象喔,那這能幹嘛?

從mac遠距到另一台macOS,跑遠端Xcode,開發iOS APP。

或者

從Linux遠距到遠端macOS虛擬機,開發iOS APP。

哈!?

講明白一點,你可以把iPhone無線連接到macOS虛擬機,讓Xcode與其連線,這樣你在Xcode上寫的APP就可以無線傳到iPhone測試了。 idevicepair工具的指令也能遠端執行喔!

甚至有開發者嘗試遠端跑checkra1n越獄!

1. 準備macOS虛擬機
#

  1. 在Linux透過 OSX-KVM Docker-OSX安裝macOS虛擬機,再於虛擬機內下載Xcode。

  2. 接著給Linux設定SSH或者VNC之類的遠端桌面方案。

  3. macOS虛擬機的畫面可以在開機後,用VNC遠端存取。

2. 啟動usbfluxd
#

以下操作皆是在本機執行,宿主機和虛擬機位於同一台機器上。測試當下宿主機系統是Ubuntu 22.04,虛擬機系統為macOS Ventura。

如果你要從本機連線到遠端的macOS,記得開放對應通訊埠的防火牆,或者用SSH Forwarding的方式轉發通訊埠(見文末參考資料)。

  1. 於Linux宿主機安裝usbmuxd套件
# Ubuntu 22.04
sudo apt install libusbmuxd-dev usbmuxd avahi-daemon socat

# Arch Linux
sudo pacman -S libusbmuxd usbmuxd avahi socat
  1. 接著安裝usbfluxd套件
# Ubuntu 22.04安裝usbfluxd作者釋出的二進位檔
wget https://github.com/corellium/usbfluxd/releases/download/v1.0/usbfluxd-aarch64-libc6-libdbus13.tar.gz
tar -xvf usbfluxd-aarch64-libc6-libdbus13.tar.gz
sudo mv usbfluxd-x86_64-libc6-libdbus13/* /usr/local/bin

# Arch Linux從AUR安裝usbfluxd
yay -s usbfluxd
  1. 啟動usbfluxd服務
sudo systemctl start usbmuxd
sudo avahi-daemon
  1. 執行socat監聽5000通訊埠:
sudo systemctl restart usbmuxd
sudo socat tcp-listen:5000,fork unix-connect:/var/run/usbmuxd
  1. 開第二個終端機,執行usbfluxd:
sudo usbfluxd -f -n
  1. 將iPhone插到Linux電腦,啟動macOS虛擬機

  2. 在macOS虛擬機開啟終端機,以 Homebrew安裝usbfluxd套件

brew install make automake autoconf libtool pkg-config gcc libimobiledevice usbmuxd

git clone https://github.com/corellium/usbfluxd.git

cd usbfluxd

./autogen.sh

make

sudo make install
  1. 在macOS啟動usbmuxd服務
sudo launchctl start usbmuxd
  1. 接著啟動usbflux,連線到Linux宿主機的IP(在Linux宿主機用ip addr指令查看),若有需要請開放Linux宿主機防火牆的5000通訊埠。
export PATH=/usr/local/sbin:${PATH}

sudo usbfluxd -f -r 192.168.0.101:5000
  1. macOS新增第二個終端機視窗,執行以下指令,列出iOS的裝置ID
idevice_id -l
  1. 嘗試配對,在iPhone上點選「信任此電腦」。
idevicepair pair "裝置ID"
  1. macOS開啟XCode專案,點選上方的Manage Run Destinations...,應該會看到iPhone了。

  2. 如此就能將APP的IPA傳送到iPhone安裝了,不過Xcode無法直接編譯傳過去執行。且Finder仍抓不到iPhone,無法進行備份,只能用 idevicebackup指令備份。

  3. 中止所有行程的方法:

sudo killall usbfluxd
sudo systemctl restart usbmuxd
sudo killall socat

參考資料
#

相關文章

Darling幫幫我!Linux跑macOS的Xcode程式
Linux系統 虛擬機與容器技術 Darling Xcode macOS Linux
免Mac電腦,OSX-KVM讓你在Linux系統安裝macOS的QEMU虛擬機
Linux系統 虛擬機與容器技術 macOS QEMU Libvirt Xcode
Ubuntu單GPU直通方法,Nvidia顯示卡直通給Windows 11 QEMU/KVM虛擬機
Linux系統 虛擬機與容器技術 GPU Passthrough Ubuntu QEMU Libvirt

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。