Android插件化架构之Hook绕过manifest检测

在不安装插件apk的情况下,其Manifest不会生效,无法直接启动未注册的Activity。通过动态代理Hook AMS的startActivity方法,先启动已注册的假Activity,再在ActivityThread中替换真实Intent。但若目标Activity继承自AppcompatActivity,会因双重检查导致异常。问题关键在于Appcompat在启动时仍会检查Manifest。解决方案可能涉及反射、Hook修改Manifest或在运行时注册目标Activity。
摘要由CSDN通过智能技术生成

学习自

https://www.jianshu.com/p/e359fafe5c29


问题

我们插件apk是不会进行一个安装的,那么他的manifest就不会生效,所以我们直接启动肯定是行不通的。所以我们只能隔绝掉我们主apk的manifest的检测。


具体思路如下

只需要动态代理hook,先在AMS的startActivity的方法中的Intent中启动一个已注册的活动假扮,然后在ActivityThread.H.launchActivity的处理中替换我们真实的Intent即可!


具体代码不解释了,很简单!

package com.example.myapplication;

import android.app.Activity;
import android.app.Application;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.util.Log;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class App extends Application {

    private static final String TAG = "xbh";

    @Override
    public void onCreate() {
        super.onCreate();

        mContext = this;

        try {
            hookStartActivity();
            hookLaunchActivity();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private Context mContext;

    /**
     * hook
     */

    public void hookStartActivity() throws Exception{
        //ActivityManagerNative.gDefault
        Class<?> amnClazz = Class.forName("android.app.ActivityManagerNative");
        Field defaultField 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值