Android Hook动态替换目标Activity(免AndroidManifest注册 )

本文详细介绍了在Android7.1系统下APP的启动流程,特别是Activity的启动过程,并展示了如何通过反射和动态代理技术实现Activity的Hook,以在不注册的情况下启动目标Activity。通过占坑Activity和替换Intent组件名称,骗过AMS,然后在ActivityThread的Handler中恢复真实Activity,成功启动未注册的目标Activity。

Android 7.1 APP 启动流程分析 里面讲解的有Activity的启动流程图,想要使用hook替换目标Activity需要先了解AMS如何创建的Activity。

总体流程

总体的思路就是通过反射,先使用占坑Activity创建activity,然后再替换成目标activity,大致流程如下:

由上图可知

1.通过反射 使用 如下代码设置 MyIActivityManagerHandler.java 到AMS中

        我们先使用占坑的activity替换成我们启动的activity,然后当activity创建完成之后再替换成我们目标的activity。

2.再使用反射获取 ActivityThread.java 设置 MyActivityThreadHandlerCallback,在MyActivityThreadHandlerCallback中替换成自己的目标Activity。

        hook的好处是可以不在AndroidManifest.xml注册我们Activity也能启动我们的Activity。

项目下载地址

 

项目详解

整体的项目目录

├── main
│   ├── AndroidManifest.xml
│   ├── java
│   │   └── com
│   │       └── ccl
│   │           └── demo
│   │               ├── GoalActivity.java   //目标类 ,未注册
│   │               ├── HookUtils.java    //hook工具
│   │               ├── MainActivity.java   //主函数
│   │               ├── MyActivityThreadHandlerCallback.java  //Handler.Callback子类
│   │               ├── MyIActivityManagerHandler.java  //InvocationHandler子类
│   │               └── PitActivity.java  //占坑类 

首先查看AndroidManifest.xml代码,PitActivity是用来天坑的Activity

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ccl.demo">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值