輕松搭建Xposed Hook


 0x2.導入xposed庫文件XposedBridgeApi-XX.jar,將庫文件放在app/lib目錄下,自己創建一個lib目錄,別放在libs目錄下,否則會出錯,然后導入庫,修改 Scope 為 Provided0x1.打開AS建立一個沒有界面的空工程,然后在清單文件中添加如下代碼

<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 為 Provided

0x3. 創建一個類Main,並在Main中實現 xposed 中的接口 IXposedHookLoadPackage 並重寫方法handleLoadPackage

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的重寫,參考代碼如下:

//  找到對應的方法,進行替換
//  參數 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,並安裝,重啟激活插件並重啟手機,插件即可生效,具體插件安裝及工具下載請參考:

https://www.xda-developers.com/xposed-framework-for-android-oreo-beta/

0x8.運行效果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM