1. Java.perform(function () {
    2. console.log("start hooking...");
    3. function showstack() {
    4. var log = Java.use("android.util.Log");
    5. var Throwable = Java.use("java.lang.Throwable");
    6. console.log(log.getStackTraceString(Throwable.$new()))
    7. }
    8. // 1. HashMap的put方法
    9. var HashMap = Java.use("java.util.HashMap");
    10. HashMap.put.implementation = function (a, b) {
    11. if (a.equals("username")) {//条件判断
    12. console.log(a, " ", b)
    13. showstack()
    14. }
    15. return this.put(a, b)
    16. }
    17. })
    18. //额外说明:当我们最开始hook时,不能使用showstack()进行堆栈打印,因为输出量过大,会使APP崩溃。
    19. //当我们第一次通过HashMap打印出关键字段,然后通过“equals”或者“==”进行判断继而打印

    image.png

    frida -U -F -l .\test.js -o stack.txt

    “-o stack.txt” 即创建一个输出的文本,把日志放入其中,以方便我们查看;
    hook过程中不会写入,只有当我们执行exit退出Frida hook时才会写入文本内。