關於 exagear 的破解(其實是原理解析)
介紹介紹如何破解 exagear
通篇沒有程式碼沒有圖,因為手機寫的,iOS 搞 git 很坑的
What is exagear
我覺得這個可以自己搜吧,就是一個能在 arm linux 上跑起來 i486 linux 的一個東西,原理用腳後跟都能想得到,binfmt 唄
既然如此,為何還要破解,自己搭建一下不就行了
話雖如此,重點在於 exagear 官方魔改了 wine,讓其能夠跑外 3G/1G 記憶體分配的核心上,而樹莓派就是這麼玩的。雖然,這個魔改版本是開源的,但是人都是懶惰的
Internal of exagear
其實我自己用 debootstrap 搭建了一個 i386 ubuntu xenial 環境,但是如上所說,wine 用不了,這很難受的
But 當我決定破解 exagear 並安裝好以後,我所有的 i386 二進位制都提示需要激活了!WTF,這一下就讓我知道,它是靠著 binfmt 這一層做的攔截
於是檢視 binfmt misc 分割槽,發現 i386 的 magic 直譯器並沒有被更改,還是 qemu-i386-static,但是注意到有一個 register 的裝置檔案,同時發現了 exagear 的服務,通過讀這段 shell 知道他原來是通過服務動態向 register 註冊解釋說,來實現的攔截
所以嘛,關閉並移除服務,寫了段 chroot 的指令碼,順利跑起來了一切,知道原理一切都很簡單
About X11
這個比較坑,因為我都是 ssh 連進去的,其實也簡單,首先在當前 X session 下執行 xhost + 讓所有會話都能連線進來,然後在 ssh 環境 export DISPLAY 設定一下就好了
至於其他 exagear 的服務,其實我並不是很關心,反正關鍵的都跑起來了
Summary
其實最後我失敗了,有了 wine 也不能滿足我的需求,因為 exagear 跑的是基於wine 1.8 的魔改版本,有一些 Win32 的 EX 介面沒有實現,是關於 IO 的,而我跑的這個東西,是 rust 寫的,大量運用了這個介面,所以涼涼
查了下 wine 論壇,這個介面直到 wine 3 才有被實現,想哭
這裡涉及到的技術點,大概就是 wine, binfmt, qemu-user-static, debootstrap 以及 chroot 這一坨,上文都是順道提到了,感興趣的可以靠自己 Google,我只是記錄下我搞這個的心路歷程
感興趣的也可以 email 我私下裡交流