0x2.導入xposed庫文件XposedBridgeApi-XX.jar,將庫文件放在app/lib目錄下,本身建立一個lib目錄,別放在libs目錄下,不然會出錯,而後導入庫,修改 Scope 爲 Provided0x1.打開AS創建一個沒有界面的空工程,而後在清單文件中添加以下代碼android
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" > <!-- 使 xposed 模塊有效 --> <meta-data android:name="xposedmodule" android:value="true"/> <!-- xposed 模塊名稱 --> <meta-data android:name="xposeddescription" android:value="Xposed模塊示例"/> <!-- xposed 模塊最低版本 --> <meta-data android:name="xposedminversion" android:value="54"/> </application>
0x2.導入xposed庫文件XposedBridgeApi-XX.jar,將庫文件放在app/lib目錄下,本身建立一個lib目錄,別放在libs目錄下,不然會出錯,而後導入庫,修改 Scope 爲 Providedapp
0x3. 建立一個類Main,並在Main中實現 xposed 中的接口 IXposedHookLoadPackage 並重寫方法handleLoadPackageide
public class Main implements IXposedHookLoadPackage { @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable{ // 不是須要 Hook 的包直接返回 if (!loadPackageParam.packageName.equals("com.example.y0n.hookdemo")) return; XposedBridge.log("Loaded app: " + loadPackageParam.packageName); } }
0x4. 聲明主入口類路徑須要在 main 文件夾下創建 assets 文件夾中新建一個 xposed_init 的文件,並在其中聲明主入口類,com.example.y0n.hookdemo.MainActivity,以下圖所示:函數
0x5.在重載的函數中寫入想要hook的函數等工具
// 找到對應的方法,進行替換 // 參數 1 :類名 // 參數 2: 方法名 // 參數 3 :實現監聽,重寫方法 // replaceHookedMethod 替換方法 // beforeHookedMethod 方法前執行 // afterHookedMethod 方法後執行 XposedHelpers.findAndHookMethod(TelephonyManager.class, "getDeviceId", new XC_MethodReplacement() { @Override protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { return "this is y0n"; } }); XposedHelpers.findAndHookMethod(TelephonyManager.class, "getSubscriberId", new XC_MethodReplacement() { @Override protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { return "this is y0n"; } });
0x6.若是hook的是非系統類,而是第三方類,且含有參數,則第一個參數爲要hook的類名字符串,同時須要修改第二個參數的classloader 爲當前實例的classloader,第三個參數則爲hook的方法名,第四個參數爲hook函數的參數,具體根據實際hook的函數來寫,第5個參數爲hook的重寫,參考代碼以下:this
// 找到對應的方法,進行替換 // 參數 1 :類名 // 參數 2: 方法名 // 參數 3 :實現監聽,重寫方法 // replaceHookedMethod 替換方法 // beforeHookedMethod 方法前執行 // afterHookedMethod 方法後執行 XposedHelpers.findAndHookMethod("org.sugram.base.MainActivity", loadPackageParam.classLoader, "onCreate", Bundle.class, new XC_MethodReplacement() { @Override protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { XposedBridge.log("y0n log : onCreate() is hooked!"); return 0; } });
0x7.編譯爲apk,並安裝,重啓激活插件並重啓手機,插件便可生效,具體插件安裝及工具下載請參考:spa
https://www.xda-developers.com/xposed-framework-for-android-oreo-beta/插件
0x8.運行效果code