《Android应用安全实战:Frida协议分析》
小结本章通过Frida框架对Android应用的Java层进行了Hook,并通过实战案例进行了巩固,但是对Java层的Hook仅仅是Frida框架中最简单的功能,熟练掌握本章节内容是后续进行逆向实战的基础。
第二章
Frida框架的Hook方法
Hook静态方法和实例方法
函数主题需要被包含在Java.perform方法中,参数是一个匿名函数,匿名函数内编写具体的hook代码。分静态和实例
如下源代码

对于静态方法setflag通过implementation直接覆写
对于非静态getinfo类似

自己实验 成功

构造方法
简单来讲就是hook如下这种 构造

只需要使用$init就可以了

自己试 成功

Hook重载方法
首先尝试让frida报错来知道有几种重载函数

可以看到不是很好看

在编写正确的hook 要加上overload

所有重载
感觉复杂了代码流程

对象参数构造
如图传递的参数是money类的money

hook它 打印出来需要调用a的getInfo方法
如果要构造一个money类 则需要用$new出一个类对象

主动调用Java函数
主动调用分静态与示例两种方法
对静态只需要如下

对实例方法的主动调用
第一种是创建新对象,第二种是获取已有对象。
第一种方法使用$new来创建实例,如主动调用Money类中的getInfo方法,先创建一个Money对象

第二种是获取已有对象 用java.choose 内存中搜索
拥有两个参数,第一个参数是想要找到的类,第二个参数是一个回调函数,包括onMatch和onComplete两个方法,后者是在所有对象搜索完毕后调用,前者是每找到一次就调用一次

Frida框架Hook类
包括获取和修改类的字段、Hook内部类和匿名类、枚举所有已加载的类、枚举类的所有方法和Hook类的所有方法。
获取和修改类的字段
静态字段只要拿到类就可以访问
实例字段需要得到对象才可以访问,分为创建新对象和获取已有的对象。
源码

需要这样

修改

对于类的实例字段的获取和修改,创建新对象的方法

如果获取已有对象 还是Java.choose方法

Hook内部类和匿名类
正确的方法是在类和内部类名之间加上$字符

匿名类的访问。匿名类是一个没有名字的类,是内部类的简化写法,它本质上是继承该类或者实现接口的子类匿名对象。
源码

需要smali来完成类定位

枚举所有已加载的类和枚举类的所有方法

对于方法 需要用到反射


如果还要获取构造放啊 还需额外处理

Hook类的所有方法
先把枚举类的所有方法和Hook类的所有重载写出来,用它来Hook测试应用中的Utils类:
