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/

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

被折叠的 条评论
为什么被折叠?



