Frida Hook方法2

补充前面的知识

Hook学习常见问题

  1. Java基础不够的问题
  2. 搜索不太靠谱,需要更精准更通用的方式来定位关键代码Java:hook系统函数、沙盒、自吐
  3. Frida功能强大,但对其API的使用还需要进一步熟悉
  4. Frida代码比较简洁、容易上手,但还是太繁琐,是否有更简单的方式
    Java:Objection、沙盒、自吐
    so:目前没有太好用的工具,只能自己对Frida APl做一些简单封装,或者开发和使用一些简单的工具
  5. 如果app存在root检测等,Frida是否有其他执行的方式
    frida-server(CLIPython方t)、 frida-inject、 frida-gadget
  6. 算法加密经常用到一些标准算法,对于Java和C的标准算法的实现都还不熟悉
  7. 算法还原通常选用一个自己熟悉的语言去复现
    比如选择avaScript,但该语言的加解密也还不熟悉
  8. 当app有限制的时候如何处理
    dex加固、so加固、抓包检测、Hook检测、root检测

关键代码快速定位

  1. HashMap的put、get方法
  2. Java和Frida代码的互相翻译
  3. ArrayList的add、addAll、set方法等
  4. TextUtils的isEmpty方法
  5. Log
  6. Collections的sort方法

获取函数调用栈

1
2
# 安卓的 Java开发中,使用如下方式打印调用栈:
System.out.println(Log.getStackTraceString(new Throwable()));

在frida的js中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Java.perform(function () {

function showStacks() {
// Log.getStackTraceString(new Throwable()) 相当于下面的
// Log Java.use("android.util.Log")
// new $new
// Throwable Java.use("java.lang.Throwable")

console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));

}

var hashMap = Java.use('java.util.HashMap');
});

APP在系统调用的时候会调用非常多的函数,所以要用判断进行过滤,比如

1
2
3
4
5
6
7
8
hashMap.put.implementation = function (a, b){
if(a.equals("username")){
showStacks(); // 调用上面的过滤
console.log(a, b);
}
}


作者

纹云

发布于

2026-11-08

更新于

2026-11-08

许可协议

豫ICP备2023004969号-2 | 公安备案 川公网安备51010702042859号