xposed开发入门:记录一次通过xposed模块,hook了天府通,实现直接跳转到扫码界面的学习过程

2 篇文章 0 订阅
1 篇文章 0 订阅

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。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值