首页
社区
课程
招聘
jadx二次开发- 实现对类的所有字段和方法生成hook脚本
发表于: 2023-4-24 02:38 16087

jadx二次开发- 实现对类的所有字段和方法生成hook脚本

2023-4-24 02:38
16087

生成的脚本

- 最近需要分析Android Java层混淆后的代码,看的欲仙欲死.
- jadx 目前支持对单个字段或方法生成frida hook脚本.
- 在实际工作中,往往连蒙带猜的去分析,通过frida,xposed,objection等工具去验证猜测.
- 实在是有点麻了,在使用时发现只能一个方法生成脚本很不方便,而objection对类进行watch时又不能看到参数返回值,也没有扩展性,从而产生了今天这篇文章以及修改
- 最近需要分析Android Java层混淆后的代码,看的欲仙欲死.
- jadx 目前支持对单个字段或方法生成frida hook脚本.
- 在实际工作中,往往连蒙带猜的去分析,通过frida,xposed,objection等工具去验证猜测.
- 实在是有点麻了,在使用时发现只能一个方法生成脚本很不方便,而objection对类进行watch时又不能看到参数返回值,也没有扩展性,从而产生了今天这篇文章以及修改
private String generateFridaSnippet(JNode node) {
    if (node instanceof JMethod) {
        return generateMethodSnippet((JMethod) node,false);
    }
    // 主要修改生成class类的hook
    if (node instanceof JClass) {
        return generateClassSnippet((JClass) node,true);
    }
    if (node instanceof JField) {
        return generateFieldSnippet((JField) node,false);
    }
    throw new JadxRuntimeException("Unsupported node type: " + (node != null ? node.getClass() : "null"));
}
private String generateFridaSnippet(JNode node) {
    if (node instanceof JMethod) {
        return generateMethodSnippet((JMethod) node,false);
    }
    // 主要修改生成class类的hook
    if (node instanceof JClass) {
        return generateClassSnippet((JClass) node,true);
    }
    if (node instanceof JField) {
        return generateFieldSnippet((JField) node,false);
    }
    throw new JadxRuntimeException("Unsupported node type: " + (node != null ? node.getClass() : "null"));
}
private String generateClassSnippet(JClass jc,boolean isAll) {
    JavaClass javaClass = jc.getCls();
    String classSnippet = generateClassSnippet(jc);
    for (JavaField field : javaClass.getFields()) {
        classSnippet+="\n"+generateFieldSnippet(new JField(field,jc),true);
    }
    for (JavaMethod method : javaClass.getMethods()) {
        classSnippet+="\n"+generateMethodSnippet(new JMethod(method,jc),true);
    }
    return classSnippet;
}
private String generateClassSnippet(JClass jc,boolean isAll) {

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2024-4-22 22:31 被iyue_t编辑 ,原因: 添加patch
上传的附件:
收藏
免费 11
支持
分享
最新回复 (15)
雪    币: 3535
活跃值: (31011)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2023-4-24 09:16
1
雪    币: 219
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
mark
2023-4-24 09:30
0
雪    币: 1671
活跃值: (215852)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
tql
2023-4-24 09:44
0
雪    币: 1000
活跃值: (1042)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
好东西好东西
2023-4-24 11:50
0
雪    币: 2305
活跃值: (3701)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
vay
6
谢谢分享,你发布的Release版本能否兼容一下jdk8呢?
2023-4-24 12:18
0
雪    币: 1614
活跃值: (3433)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
vay 谢谢分享,[em_78]你发布的Release版本能否兼容一下jdk8呢?
你要不要下载下来自己编译一下,不需要任何额外的配置.
2023-4-27 22:11
0
雪    币: 2305
活跃值: (3701)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
vay
8
iyue_t 你要不要下载下来自己编译一下,不需要任何额外的配置.
功能可以的,已经在用了
2023-4-30 07:19
0
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
感谢分享~
2023-5-2 10:46
0
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
感谢分享~
2023-5-5 11:29
0
雪    币: 116
活跃值: (1012)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
不太明白hook字段是什么意思 能看到程序在什么时间什么地点引用了哪个类的哪个字段吗?
2023-5-7 00:22
0
雪    币: 1614
活跃值: (3433)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
万里星河 不太明白hook字段是什么意思 能看到程序在什么时间什么地点引用了哪个类的哪个字段吗?[em_14]
就是获取字段值,有些类有执行线程,而线程可能执行不同任务,这些任务是通过这个类的某一个字段控制的,此时获取字段值就有用了.
2023-5-8 23:47
0
雪    币: 548
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
mark
2023-6-1 23:15
0
雪    币: 465
活跃值: (398)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14

./jadx-gui/src/main/java/jadx/gui/ui/codearea/FridaAction.java
import jadx.api.JavaMethod;
generateClassSnippet((JClass) node);多加个参数true
在添加一个方法:如下
private String generateClassSnippet(JClass jc, boolean isAll) {
        JavaClass javaClass = jc.getCls();
        String classSnippet = generateClassSnippet(jc);
        for (JavaField field : javaClass.getFields()) {
            classSnippet = classSnippet + "\n" + generateFieldSnippet(new JField(field, jc));
        }
        for (JavaMethod method : javaClass.getMethods()) {
            classSnippet = classSnippet + "\n" + generateMethodSnippet(new JMethod(method, jc));
        }
        return classSnippet;
    }
对这一个文件修改,传个FridaAction.class ,对官方版替换就可以了。

最后于 2024-3-26 08:00 被qqsunqiang编辑 ,原因:
2024-3-26 07:58
0
雪    币: 1482
活跃值: (2568)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
谢谢分享
2024-3-26 08:42
0
雪    币: 31
活跃值: (3269)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
jadx , 和r0yuse 魔改媲美。 虽然没用过。
2024-7-3 00:22
0
游客
登录 | 注册 方可回帖
返回
//