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

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

2023-4-24 02:38
13258

jadx二次开发

前言

1
2
3
4
- 最近需要分析Android Java层混淆后的代码,看的欲仙欲死.
- jadx 目前支持对单个字段或方法生成frida hook脚本.
- 在实际工作中,往往连蒙带猜的去分析,通过frida,xposed,objection等工具去验证猜测.
- 实在是有点麻了,在使用时发现只能一个方法生成脚本很不方便,而objection对类进行watch时又不能看到参数返回值,也没有扩展性,从而产生了今天这篇文章以及修改
  • jadx的项目不管是架构还是代码风格看的是那么的赏心悦目.

上代码

  • 其实代码很简单主要是jadx的代码封装的太好了,几句代码就实现了.
  • 通过修改生成类的hook脚本,遍历所有方法和字段调用封装好的直接生成拼接完事儿,原本只有一句use class
1
2
3
4
5
6
7
8
9
10
11
12
13
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"));
}
1
2
3
4
5
6
7
8
9
10
11
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;
}

看一下效果

生成的脚本
github地址 jadx for iyue文件有点大就不上传了.


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞11
打赏
分享
最新回复 (14)
雪    币: 18590
活跃值: (27811)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秋狝 2023-4-24 09:16
2
1
感谢分享
雪    币: 219
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
Skyart 2023-4-24 09:30
3
0
mark
雪    币: 75
活跃值: (212972)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
shinratensei 1 2023-4-24 09:44
4
0
tql
雪    币: 885
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
clz3216 2023-4-24 11:50
5
0
好东西好东西
雪    币: 1173
活跃值: (2002)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
vay 2023-4-24 12:18
6
0
谢谢分享,你发布的Release版本能否兼容一下jdk8呢?
雪    币: 1153
活跃值: (2560)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
iyue_t 2023-4-27 22:11
7
0
vay 谢谢分享,[em_78]你发布的Release版本能否兼容一下jdk8呢?
你要不要下载下来自己编译一下,不需要任何额外的配置.
雪    币: 1173
活跃值: (2002)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
vay 2023-4-30 07:19
8
0
iyue_t 你要不要下载下来自己编译一下,不需要任何额外的配置.
功能可以的,已经在用了
雪    币: 19
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_倾尽天下 2023-5-2 10:46
9
0
感谢分享~
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
手酸哥 2023-5-5 11:29
10
0
感谢分享~
雪    币: 50
活跃值: (464)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2023-5-7 00:22
11
0
不太明白hook字段是什么意思 能看到程序在什么时间什么地点引用了哪个类的哪个字段吗?
雪    币: 1153
活跃值: (2560)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
iyue_t 2023-5-8 23:47
12
0
万里星河 不太明白hook字段是什么意思 能看到程序在什么时间什么地点引用了哪个类的哪个字段吗?[em_14]
就是获取字段值,有些类有执行线程,而线程可能执行不同任务,这些任务是通过这个类的某一个字段控制的,此时获取字段值就有用了.
雪    币: 336
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_higyywgo 2023-6-1 23:15
13
0
mark
雪    币: 435
活跃值: (118)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qqsunqiang 2天前
14
0

./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 ,对官方版替换就可以了。

最后于 2天前 被qqsunqiang编辑 ,原因:
雪    币: 1359
活跃值: (2053)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xdnice 2天前
15
0
谢谢分享
游客
登录 | 注册 方可回帖
返回