本帖最后由 iyue 于 2024-4-23 15:31 编辑
jadx二次开发
前言
- 最近需要分析Android Java层混淆后的代码,看的欲仙欲死.
- jadx 目前支持对单个字段或方法生成frida hook脚本.
- 在实际工作中,往往连蒙带猜的去分析,通过frida,xposed,objection等工具去验证猜测.
- 实在是有点麻了,在使用时发现只能一个方法生成脚本很不方便,而objection对类进行watch时又不能看到参数返回值,也没有扩展性,从而产生了今天这篇文章以及修改
- jadx的项目不管是架构还是代码风格看的是那么的赏心悦目.
上代码
- 其实代码很简单主要是jadx的代码封装的太好了,几句代码就实现了.
- 通过修改生成类的hook脚本,遍历所有方法和字段调用封装好的直接生成拼接完事儿,原本只有一句use class
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;
}
看一下效果
|