Xpatch概述
Xpatch用來重新簽名打包Apk檔案,使重打包後的Apk能載入安裝在系統裡的任意Xposed外掛,從而實現免Root Hook任意App。
原始碼
Xpatch基本原理
Xpatch的原理是對Apk檔案進行二次打包,重新簽名,並生成一個新的apk檔案。 在Apk二次打包過程中,插入載入Xposed外掛的邏輯,這樣,新的Apk檔案就可以載入任意Xposed外掛,從而實現免Root Hook任意App的Java程式碼。
Hook框架底層使用的是Lody的whale,支援的平臺架構有:ARM/THUMB、ARM64,支援的andrid版本大致:Android 5 ~ Android 9
Xpatch工具包下載
點選我下載最新的Xpatch Jar包
或者進入github Releases頁面下載:releases
使用方法
Xpatch專案最終生成物是一個Jar包,此Jar使用起來非常簡單,只需要一行命令,一個接入xposed hook功能的apk就生成:
$ java -jar XpatchJar包路徑 apk檔案路徑
For example:
$ java -jar ../../xpatch.jar ../../wechat.apk
複製程式碼
這條命令之後,在原apk檔案(wechat.apk)相同的資料夾中,會生成一個名稱為wechat-xposed-signed.apk
的新apk,這就是重新簽名之後的支援xposed外掛的apk。
Note: 由於簽名與原簽名不一致,因此需要先解除安裝掉系統上已經安裝的原apk,才能安裝這個Xpatch後的apk
可用的Xposed模組示例
Note:一般來說,只要app可以被Xpatch破解,並且執行時沒有做簽名校驗,與其相關的Xposed模組都是可用的。
可破解的App示例
- 微信
- 今日頭條
- 騰訊視訊
- 天天快報
- 愛奇藝
- Subway Surf
- ...
- 其他App
Todo
- 自動破解app簽名
- 支援xposed外掛直接打包到apk中
- 支援xposed外掛中so檔案的載入 ...
敬請期待....
原始碼解析
Xpatch實現原理文件已釋出到個人技術公眾號Android葵花寶典上。
微信掃一掃關注公眾號即可查閱:
Issues
Xpatch是基於apk二次打包實現的,而且使用到了dex2Jar工具,因此,也存在不少的侷限性。大概有以下幾點:
- 對於使用了簽名校驗的應用,使用Xpatch得到的apk可能無法啟動,或者無法獲取到網路資料,比如優酷,趣頭條等。不過,這種問題並不是致命性問題,既然app啟動時可以載入xposed外掛,那我們可以編寫一個hook獲取簽名的方法的xposed外掛,從而使校驗簽名能夠順利通過。具體實施細節稍後會在個人微信技術號上公開,歡迎關注:Android葵花寶典。
- 有些app可能做了app加固,導致dex2Jar工具無法將dex檔案解析為jar包,從而無法生成新的apk。這種問題暫時還無法解決。
- hook框架使用的是lody的Whale框架,此框架存在一些不穩定性,對少數方法的hook會導致崩潰,並且在某些機型上hook也會崩潰。
- Xposed Hook框架暫時不支援Dalvik虛擬機器。
- 暫時不支援Xposed外掛中的資源Hook。
結尾
歡迎Star, fork or PR.