符号 | 作用 |
---|---|
$init |
构造方法 Hook 的时候用 |
$new() |
实例化对象的时候用 |
Hook重载 | 语法 |
---|---|
int类型 | int |
float类型 | float |
boolean类型 | boolean |
string类型 | java.lang.String |
byte类型 | [B |
char类型 | [C |
list结构 | java.util.List |
安卓上下文结构 | android.content.Context |
APP 代码如下
道理和调用函数相同
有的情况下我们要hook一个类下所有的方法(不知道他的方法类型和数量),这个时候我们就要用到 java 的反射 getDeclaredMethods()
参数是一个自定义类
类是这样的
目前在app逆向中遇到interface搜索其实现还是一顿乱搜。
可以使用反射得到实现的接口数组,然后打印出来即可,这个问题终于可以解决了。
类的内部如下
解析:
$init
构造函数 和 python语法类似this.$init(a, b)
这里的 this 指代,原始app中的函数,$init() 表示该类的实例化有很多方法我这里直接用 gson.dex 方法,再肉丝的星球中下载
打印 CharArray 和 byteArray
生成数组替换结果
java代码和上面例子相同
例两个同名的函数。给多少个参数,调用有多少参数的对应方法 必须使用 overload()方法!!!
解决方法 overload()
指定
overload("int")
要指定参数与类型overload("java.lang.String")
全路径com.xxx.xxx.xxx.xxx$InnerClasses
利用符号 $
来操作
有的代码混淆,函数名已经是乱码符号
甚至有一些不可视, 所以可以先编码打印出来, 再用编码后的字符串去 hook.
方法2
先枚举到类, 然后利用Java.classFactory.loader = loader; 切换 classloader
我们要hook类似这种代码的时候,找不到引用包,我们可以通过查看 smali 代码来看到她的引用
dex 中变量名尽量取得特殊一点,防止重名。
使用案例 再上面《Hook 数组(char 和 byte)》 中就有引用肉丝的 dex 例子
frida 用
registerClass
自己构造一个类
原文:https://www.cnblogs.com/coffee520/p/14734353.html