hook是怎么修改数据的?

来源:9-1 如何规避 Android P 对访问私有 API 的限制?

我爱向前看

2020-04-11

老师,你好:
咱们拿不到javaVM和runTime的对象(或指针),然后自己写了结构体javaVM和runTime。
最终咱们修改的是自己写的对象里的数据吗(因为系统的拿不到)?
1. 如果是,那怎么让系统调用了咱们写的javaVM和runTime对象。
2. 如果修改的是系统对象里的数据,那咱们为什么还要自己再创建对象

我感觉是第一种,具体咱们写的和系统怎么关联的不懂。之前没有接触过Hook,望老师指导。

写回答

1回答

bennyhuo

2020-04-12

哦其实这里的问题在于,系统自己的代码咱们是没法访问到的,但它的对象指针我们可以拿到。

换句话说,我们拿到了一个系统的一个对象,但是我们因为没有拿到它的类型说明,因此无法直接访问其中的成员,因此在 hook 的时候就自己写一个类型声明。

要明白这一点,需要同学对 C++ 的内存布局有一定的认识,也要了解到 C++ 是一门静态弱类型的语言,因而我们可以自己定义一个类型然后把系统的对象转成我们自己的类型去访问(其实这里没有创建对象),如果不熟悉 C++,可能理解起来会比较吃力哈。

2
1
我爱向前看
明白了,非常感谢老师指点。
2020-04-12
共1条回复

大厂资深面试官 带你破解Android高级面试

改变视野和思维 深度与广度兼备的 Android 进阶面试指导课程

1636 学习 · 222 问题

查看课程