Android XPosed 詳細教程
pexels-pixabay-358454.jpg
一、在 Android Studio
創建一個 Module
選擇 Empty Activity
二、項目導入
在app/build.gradle
中配置
dependencies {
compileOnly 'de.robv.android.xposed:api:82'
}
三、在AndroidManifest.xml
application節點下配置模塊信息
<!-- 是否是xposed模塊,xposed根據這個來判斷是否是模塊 -->
<meta-data
android:name="xposedmodule"
android:value="true" />
<!-- 模塊描述,顯示在xposed模塊列表那里第二行 -->
<meta-data
android:name="xposeddescription"
android:value="測試Xposed模塊" />
<!-- 最低xposed版本號(lib文件名可知) -->
<meta-data
android:name="xposedminversion"
android:value="30" />
四、新建Hook
類
package com.knight.xposeddemo;
import android.telephony.TelephonyManager;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XC_MethodReplacement;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
public class MyXposedModule implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
XposedBridge.log("開始--handleLoadPackage---");
if (lpparam.packageName.equals("com.develop.test")) {
XposedBridge.log("開始hook測試程序");
//hook類調用方法
XposedHelpers.findAndHookMethod(TelephonyManager.class, "getDeviceId", new XC_MethodReplacement() {
@Override
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
return "momoxiaoming";
}
});
//hook 類名+方法名所在方法
XposedHelpers.findAndHookMethod("com.fancy.demo.ui.LoginActivity", lpparam.classLoader, "dexLoadTest", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
XposedBridge.log("Hook后...");
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
XposedBridge.log("Hook前...");
}
});
}
}
}
五、在assets
目錄下創建xposed_init
文件
內容填寫為上面的hook類的包名+類名
六、安裝程序
- 下載
XpseInstall
- 在
XpseInstall
安裝測試程序和被測試程序
七、測試Hook
將程序和被hook的程序裝入手機,勾選Xpose模塊,重啟手機,點擊被hook程序按鈕,查看代碼是否已被攔截