Xposed的使用(一)

簡介

Xposed是 Android 平臺上很出名的一個hook開源框架,使用這個框架我們可以Hook Android系統的核心進程Zygote來達到修改應用程序的運行過程和結果,本篇文章主要介紹怎樣通過Android Studio來編寫插件給Xposed來實現自己想要的攔截效果。

使用

安裝xposed_install

首先需要安裝xposed_installer框架,因爲需要劫持系統,所以要求你的手機已經是root的了,並且因爲David虛擬機和Art虛擬機的不同,在安裝上的區別比較大,這裏只介紹在David虛擬機(Android4.0~4.4)上的安裝使用,在5.0以及以上的可以參考網上的其他資料進行安裝。xposed的下載地址爲:http://repo.xposed.info/module/de.robv.android.xposed.installer ,直接下載
de.robv.android.xposed.installer_v33_36570c.apk進行安裝即可。
image.png

下載完成之後,點擊 “框架”–“安裝/更新”即可,這個過程手機可能會重啓幾次。
image.png

下載/模塊

安裝完成之後,我們就可以點擊 “下載” 去下載一些比較熱門的插件,這裏有一些其他大神寫好的模塊,可以直接體驗,下載完成之後在“模塊”進行勾選激活,按照提示進行重啓即可使用。但如果想要實現自己想要的修改效果,就需要自己來編寫插件了。

日誌

有時候爲了知道運行過程的細節,需要打log,一般我們可以使用Android 提供的Log類在控制檯進行輸出,但這種方式不會提示你在xposed運行過程的一些異常,Xposed提供了XposedBridge.log的方式,這種方式的好處是在程序發生異常的時候,會進行輸出提示,不過他提示的內容是在上面的“日誌”模塊,當你寫的模塊沒有按照預期的方式響應,需要調試的時候推薦使用這個,不過缺點也很明顯,需要來回切換。

插件編寫

  • 1、AndroidStudio創建一個新的Project,因爲我們不需要有界面,所以在創建的時候選擇Add No Activity即可。
  • 2、在app 目錄下創建一個名字爲lib的文件夾,將XposedBridgeApi.jar包放在lib這個目錄下面,同時右鍵選擇 Add as Library,將包引入進來,同時還需要修改build.gradle文件,將complie改爲provided.
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:27.1.1'
    provided files('lib/XposedBridgeApi-54.jar')
}
  • 3、新建Main類,實現IXposedHookLoadPackage接口,配置AndroidManifest.xml
    image.png

  • 4、在main文件夾下新建assets目錄,創建xposed_init文件,同時將Main類的路徑填入:com.example.hook.HookModule
    image.png

  • 5、在HookModule類裏面的handleLoadPackage方法實現自己的邏輯。
    image.png

我們的HookModule實現了IXposedHookLoadPackage接口,當系統加載我們的應用程序的時候,會回調handleLoadPackage方法,如果是我們想要hook的應用程序的包名,則通過XposedHelpers.findClass找到對應的類,然後通過XposedHelpers.findAndHookMethod的方式找到我們要hook的方法,這裏需要注意一點,找類的時候,需要使用反編譯之後的名字,即使是.a.b這樣子的形式,通過再hook方法的時候,如果原來的方法有參數,需要寫上對應參數+.class,XposedHelpers也提供了findAndHookConstructor來hook類的構造函數。

編譯打包

插件編寫完成之後,需要經過打包簽名才能夠使用,方式是:選擇build- generate signed APK,簽名的key可以隨意寫,完成之後就會在release文件夾下生成對應的apk。然後進行安裝,這個手機通知欄會提示我們xposed模塊已經更新,在模塊那裏勾選,然後重啓即可完成整個hook操作。
image.png

結果

image.png
我們的程序的代碼如上,剛纔的handleLoadPackage是hook了summit 方法,並修改了參數的內容。在運行我們的hook模塊之前,程序正常運行的情況下,點擊按鈕提示的是 “未被劫持”,在hook之後提示的是“我被劫持了”。
image.png

說明我們已經成功修改了程序的參數,至此整個hook步驟就完成了。
感興趣的同學可以在下面的鏈接下載來體驗一下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章