Xpatch:免Root實現App載入Xposed外掛的一種方法

Wind正在掘金發表於2019-04-09

Xpatch概述

Xpatch用來重新簽名打包Apk檔案,使重打包後的Apk能載入安裝在系統裡的任意Xposed外掛,從而實現免Root Hook任意App。

原始碼

github.com/WindySha/Xp…

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

  1. 自動破解app簽名
  2. 支援xposed外掛直接打包到apk中
  3. 支援xposed外掛中so檔案的載入 ...

敬請期待....

原始碼解析

Xpatch實現原理文件已釋出到個人技術公眾號Android葵花寶典上。
微信掃一掃關注公眾號即可查閱:

Xpatch:免Root實現App載入Xposed外掛的一種方法

Issues

Xpatch是基於apk二次打包實現的,而且使用到了dex2Jar工具,因此,也存在不少的侷限性。大概有以下幾點:

  1. 對於使用了簽名校驗的應用,使用Xpatch得到的apk可能無法啟動,或者無法獲取到網路資料,比如優酷,趣頭條等。不過,這種問題並不是致命性問題,既然app啟動時可以載入xposed外掛,那我們可以編寫一個hook獲取簽名的方法的xposed外掛,從而使校驗簽名能夠順利通過。具體實施細節稍後會在個人微信技術號上公開,歡迎關注:Android葵花寶典
  2. 有些app可能做了app加固,導致dex2Jar工具無法將dex檔案解析為jar包,從而無法生成新的apk。這種問題暫時還無法解決。
  3. hook框架使用的是lody的Whale框架,此框架存在一些不穩定性,對少數方法的hook會導致崩潰,並且在某些機型上hook也會崩潰。
  4. Xposed Hook框架暫時不支援Dalvik虛擬機器。
  5. 暫時不支援Xposed外掛中的資源Hook。

結尾

歡迎Star, fork or PR.

相關文章