輕鬆搭建Xposed Hook

 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

相關文章
相關標籤/搜索