美文网首页
hook技术(采用反射)

hook技术(采用反射)

作者: Android刘东 | 来源:发表于2020-09-09 12:03 被阅读0次

1)比如普通的startActivity
InstrumentationProxy.java

      
public class InstrumentationProxy extends Instrumentation {
    Instrumentation instrumentation;
    Method execStartActivityMethod = null;
    ActivityResult result = null;

    //持有真正启动Activity的Instrumentation引用
    public InstrumentationProxy(Instrumentation instrumentation) {
        this.instrumentation = instrumentation;
    }
    public ActivityResult execStartActivity(
            Context who, IBinder contextThread, IBinder token, Activity target,
            Intent intent, int requestCode, Bundle options) {
        try {
            // 查找当前方法
            execStartActivityMethod = Instrumentation.class.getDeclaredMethod("execStartActivity",
                    Context.class, IBinder.class, IBinder.class, Activity.class, Intent.class, int.class, Bundle.class);
            execStartActivityMethod.setAccessible(true);
            //可在此修改判断是否登录 然后intent.setClassName(who,"study.hank.com.androidhookdemo2.LoginActivity");
//            intent.setClassName(who, "study.hank.com.androidhookdemo2.LoginActivity");
            // 执行activity启动
            result = (ActivityResult) execStartActivityMethod.invoke(instrumentation, who,
                    contextThread, token, target, intent, requestCode, options);
            return result;
        } catch (Throwable t) {
            t.printStackTrace();
        }
        return null;
    }


    public static void replace(Activity activity) {
        //通过反射获取Activity的class对象
        Class<? extends Activity> aClass = Activity.class;
        try {
            //获取Activity的mInstrumentation属性
            Field field = aClass.getDeclaredField("mInstrumentation");
            //取消权限检查
            field.setAccessible(true);
            //获取传入的activity的mInstrumentation字段
            Instrumentation mInstrumentation = (Instrumentation) field.get(activity);
            //构造InstrumentationProxy,并将获取到的Activity字段传入
            InstrumentationProxy instrumentationProxy = new InstrumentationProxy(mInstrumentation);
            //用构造InstrumentationProxy替换掉当前Activity的mInstrumentation。
            field.set(activity, instrumentationProxy);

        } catch (Exception e) {
        }

    }
}

测试类

    static class MainActivity  {
         InstrumentationProxy.replace(this);
        startActivity(new Intent(MainActivity.this, TestActivity.class));
    }

相关文章

  • hook技术(采用反射)

    1)比如普通的startActivityInstrumentationProxy.java 测试类

  • Android Hook 技术——动态代理

    我们在上一篇 Android Hook 技术——反射技术 对反射技术做了详细讲解,我们这篇对动态代理做详细讲解. ...

  • Android Hook 技术——反射技术

    概要 我们在之前的一篇Android-Framework-Plugin插件话框架-Hook Activity过程 ...

  • Android hook检测(安全方向)

    什么是hook 所谓hook技术,就是通过一段代码(反射、代理)侵入到App启动过程中,在原本执行的代码前插入其它...

  • Dagger2源码分析(二):Java无所不能的反射在Andro

    提起hook概念,相信大家都听说过,然后hook就是将反射和动态代理运用于Android平台源码之上的。可是,反射...

  • HOOK

    HOOK 一、HOOK概述 HOOK(钩子) 其实就是改变程序执行流程的一种技术的统称! 二、iOS中HOOK技术...

  • SSDT知识点

    0x00 Hook技术 hook技术分为两块: Ring3层的Hook,俗称应用层hook技术 Ring0层的Ho...

  • 005——HOOK原理

    HOOK概述 HOOK(钩子)其实就是改变程序执行流程的一种技术的统称!HOOK原理 IOS中HOOK技术的几种方...

  • 浅谈android hook技术

    安全博客 > 技术研究 > 浅谈android hook技术 浅谈android hook技术 您当前的位置:...

  • springIOC实现原理

    所使用的技术 ① dom4j解析xml文档; ② 工厂模式(在工厂中调用反射) ③ 采用反射设计模式创建对象 IO...

网友评论

      本文标题:hook技术(采用反射)

      本文链接:https://www.haomeiwen.com/subject/anreektx.html