Xposed框架動態調試第三方APP—實戰演示

關於Xposed是什麼及原理,這裏不多說,網上一搜一大把。這裏只講乾貨。
下面講的適用於有一定Android開發經驗的開發人員。
僅用於開發學習用,嚴禁挪作他用!

注:後附demo apk安裝包。

素材準備:
1、root後的Android機一臺;
2、下載XposedInstaller.apk,安裝到root後的手機,用於作爲動態調試容器。之後開發出來的xposed hook插件要添加進這個容器後才能hook第三方應用。下載地址:鏈接:https://pan.baidu.com/s/1EAGoAbJo8nRFJZwXqsip3A 密碼:gszz
3、準備XposedBridgeApi.jar包,可以從官網下載:
[XposedBridgeApi-54官方下載地址]https://forum.xda-developers.com/attachment.php?s=5903ce1b3edb1032faba7292b21e1801&attachmentid=2748878&d=1400342298
或在下面自己寫的XposedDemo工程中的build.gradle文件中引入xposed依賴包,如下圖:
4、Android開發環境及工具。這裏使用Android studio。provided 'de.robv.android.xposed:api:82'
創建自己的XposeDemo框架工程,步驟如下:
1、創建空項目,名叫XposedDemo
2、在build.gradle中添加核心依賴包:provided ‘de.robv.android.xposed:api:82’
3、編寫hook類,hook第三方應用的功能方法,更該請求參數、響應值等實現動態調試。前提是事先確定好第三方應用的包名——類名——方法名,例如:我的要hook的第三方應用代碼如下:
在這裏插入圖片描述
下面進入重點——編寫動態調試代碼,實現對goLogin的篡改,不管輸入pwd爲何止,使goLogin永遠返回true,從而越過第三方應用的登錄密碼校驗。
4、hook代碼類如下:

public class HookLogin implements IXposedHookLoadPackage {
    private static final String PACKAGE_NAME = "com.mscf.finance";

    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
        Log.i(Contants.TAG, "xposeddemo--進入我的hook-----~~");

        if (lpparam.packageName.equals(PACKAGE_NAME)) {
            Log.i(Contants.TAG, "包名存在!");
        } else {
            Log.i(Contants.TAG, "com.mscf.finance--包名不存在!");
            return;
        }
        //固定格式
        findAndHookMethod(
                "com.mscf.finance.activity.Aty_Login",  //要hook的包名+類名
                lpparam.classLoader,                   //classLoader固定
                "goLogin",                         //要hook的方法名
//                int.class,//方法參數 沒有就不填
                new XC_MethodHook() {
                    @Override
                    //此函數在執行被hook函數前調用,用來修改入參
                    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                        Log.i(Contants.TAG, "進入beforeHookedMethod---");
                    }

                    //方法執行後執行,改方法的返回值一定要在方法執行完畢後更改
                    protected void afterHookedMethod(MethodHookParam param)
                            throws Throwable {
                        Log.i(Contants.TAG, "進入afterHookedMethod---");

                        //修改返回值爲true,越過登錄密碼驗證
                        param.setResult(true);
                        String result = param.getResult() + "";
                        Log.i(Contants.TAG, "afterHood輸出結果---" + result);
                    }
                }
        );

    }
}

5、配置hook啓動入口:在工程目錄的main/assets/下新建文件xposed_init 複製以下內容到文件:

com.zp.xposeddemo.HookLogin

注意該目錄即自己的包名+hook類名。

6、運行功能XposedDemo到root後的手機上,桌面多了一個名叫MyXposeDemo的應用。如此一個動態調試登錄事件的hook插件開發出來了。
7、將MyXposeDemo添加進XposedInstaller容器中。

  • 打開XposedInstaller容器,先進行激活。網上搜 xposedInstaller激活教程一大把。這裏不做重點講。
  • 激活後如下圖:
  • 在這裏插入圖片描述
  • 點擊左側菜單,選擇模塊,勾選我們的XposedDemo,然後重啓手機設備。
    在這裏插入圖片描述
  • 重啓後後,點擊被hook的第三方APP,執行登錄,輸入任何值,都提示“登錄成功”。完活!

總結:
最後回顧整個流程,其實主要就是基於Xposed依賴包開發了一個篡改登錄功能的插件。在afterHookedMethod方法中修改被hook住的方法名,篡改其返回值,實現登錄功能越過。
在這裏插入圖片描述
附上實戰體驗demo:下載鏈接:https://pan.baidu.com/s/1-fdOgNQfTSPJ8hLVIjMcRA 密碼:9fcb
切記:手機需要root後再安裝上述demo,體驗。

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