xposed開發入門:記錄一次通過xposed模塊,hook了天府通,實現直接跳轉到掃碼界面的學習過程

git鏈接:https://github.com/TheKeyDU/XposedTianFuTongJustJumpToQcCodeActivity/blob/master/README.md

 

原始是啓動SplashActivity,然後彈出root警告,然後進入主頁頁面。然後點擊掃碼才啓動掃碼的界面:

hook之後:

下面實現過程和失敗過程。

首先使用apktool和dx2jar.jar反編譯安裝包,但是發現加固了的,打開dex文件找不到activity之內的任何信息。放棄反編譯這條路。

然後使用“開發者助手”之內的軟件動態獲取這個界面的activity名字

然後獲得activity名稱就可以開始搞xposed。

接下來跳過xposed的開發環境配置,直接進入hook流程

 XposedHelpers.findAndHookMethod(hook的類, hook的方法, 參數.class, new XC_MethodHook()

 

然後發現找不到這個類,然後又把MethodHookParam的所有的參數都輸出,發現還是找不到這個類。

最後發現現在一般的商業級apk都動態加載dex,然後找到了一種解決方法,hook 他的application。把application搞到之後,搞activity是輕而易舉,同時param.arg[0]就是context參數。有了context,hook方法也成功,現在就是無敵的了。可以對任意apk開始爲所欲爲

貼上全部hook代碼


import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;

/**
 * Created by Administrator on 2020/1/7 11:43
 */
public class TftHook implements IXposedHookLoadPackage {

    String 天府通app = "com.chinarainbow.tft";
    String 天府通啓動類 = "com.chinarainbow.tft.mvp.ui.activity.SplashActivity";
    String 天府通二維碼類 = "com.chinarainbow.tft.mvp.ui.activity.TFTQRActivity";
    String 天府通創建 = "onCreate";
    @Override
    public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {

        if (lpparam.packageName.equals(天府通app)) {
            XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() {
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    ClassLoader cl = ((Context) param.args[0]).getClassLoader();
                 final Context context= (Context) param.args[0];
                    Class<?> hookclass1 = null;
                    Class<?> hookclass2 = null;
                    hookclass1 = cl.loadClass(天府通啓動類);
                    hookclass2 = cl.loadClass(天府通二維碼類);
                    final Class<?> finalHookclass = hookclass2;
                    XposedHelpers.findAndHookMethod(hookclass1, 天府通創建, Bundle.class, new XC_MethodHook() {
                        @SuppressLint("WrongConstant")
                        @Override
                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                            super.beforeHookedMethod(param);
                        context.startActivity(new Intent(context, finalHookclass).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
                        Toast.makeText(context,"已直接跳轉到掃碼界面",1000).show();
                        ((Activity) context).finish();
                        }
                        @Override
                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                            super.afterHookedMethod(param);

                        }
                    });
                }
            });


        }
    }




}
  最後打包出來,apk居然還有1.6mb。這樣一個沒有界面的apk居然還要1.6mb,我覺得還可以壓縮一下。通過analyze zpk,發現主要是lib中有一些androidx的包。在這個沒有界面的apk中,完全可以刪掉。

去掉所有依賴,和打開混淆

  buildTypes {
        release {
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

dependencies {
    compileOnly 'de.robv.android.xposed:api:82'
    compileOnly 'de.robv.android.xposed:api:82:sources'

}

over,17kb。

發佈了12 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章