Hook技术之hookActivity(android 9.0)

本文探讨了在Android 9.0中如何hook Activity,由于启动流程的变化,hook点与之前版本有所不同。文章分析了Android 9.0在启动Activity时的handler消息标识变化,并详细介绍了如何通过反射在 AMS 的关键方法中找到新的hook点。作者提供了具体的代码示例,包括AMS动态代理类和类的设计,以及如何在HandlerMessage中还原Intent。文章最后指出,hookActivity主要是绕过AMS验证,允许在不同阶段进行intent替换和还原,并鼓励读者探索更多hook方法。
摘要由CSDN通过智能技术生成

1.前言

本文大部分内容来自于《android进阶解密》这本书,不同的是书中实现的是android9.0之前的hook,在android9.0中,activity的启动过程会有些不同,因此本文主要是讲解9.0的hook.

2.activiy启动流程的不同之处

1.简要分析不同之处

在android9.0中,采用handler机制启动activity时,消息标识变为了EXECUTE_TRANSACTION,和之前的LAUNCH_ACTIVITY不同,并且msg携带的内容也不同,从这里可以看到ClientTransaction transaction=msg.obj和之前msg携带的ActivityRecord参数不同,transaction里边并没有Intent这个类型的变量
那么我们能像书上一样在此hook吗?
答案是可以的,为什么没有intent也能hook呢?看下边分析

我们沿着调用链一直深入,mTransactionExecutor.execute(transaction)

接着调用executeCallbacks(transaction)方法

executeCallback方法中,调用item.execute方法,这个item为

 final List<ClientTransactionItem> callbacks = transaction.getCallbacks();
 ···
 final ClientTransactionItem item = callbacks.get(i);

那么这个item的类型为ClientTransactionItem,这是个抽象类,必须找到它的一个实现类,还记得这个callback吗?在activity的启动流程中,在ActivityStackSupeisor中的realStartActivityLocked()方法中

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值