Frida unhookable 函数

Function is unhookable by Frida

我有以下 Java 代码,我正在尝试挂钩 getTimeZone 函数:

package com.myapp.models;

public class User {

    private String timeZone;

    public void setTimeZone(String str) {
        this.timeZone = str;
    }

    public String getTimeZone() {
        return this.timeZone;
    }
}

这是我尝试使用的 frida 代码:

Java.perform(function () {

    var User = Java.use("com.myapp.models.User");
    User.getTimeZone.implementation = function() {
        console.log("timezone requested")
        return 12;
    };

});

但是,挂钩似乎并没有发生,因为应用程序在 getTimezone 上崩溃,没有返回 vlue:

10-21 12:17:23.013 26553 26553 E AndroidRuntime: Process: com.myapp.android, PID: 26553
10-21 12:17:23.013 26553 26553 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.myapp.models.User.getTimeZone()' on a null object reference
10-21 12:17:23.013 26553 26553 E AndroidRuntime:        at com.myapp.features.home.logs.updateChart(Presenter.java:370)
10-21 12:17:23.013 26553 26553 E AndroidRuntime:        at com.myapp.features.home.logs.loadGraph(Presenter.java:217)
10-21 12:17:23.013 26553 26553 E AndroidRuntime:        at com.myapp.features.home.logs.onResume(Fragment.java:313)

我知道这个函数没有错别字,我运行在frida:

就识别成功了
[Redmi Note 7::myapp]-> Java.use("com.myapp.models.User").getTimeZone
function
[Redmi Note 7::myapp]-> Java.use("com.myapp.models.User").getTimeZone.implementation
"0x7e3682a128"

你的 Frida 代码有一个主要问题:

getTimeZone 的定义是 String getTimeZone() 因此你必须 return 一个 String.

但是你的 Frida 代码 return 一个 int 值:return 12;

将其更改为 return "12";,您的 Frida 代码应该可以工作。

定义 User class 的 Android 应用程序可能存在第二个问题(在其中一种方法 com.myapp.features.home.logs.updateChart 中,您没有包含在问题中) .基于异常

java.lang.NullPointerException: Attempt to invoke virtual method java.lang.String com.myapp.models.User.getTimeZone()' on a null object reference

应用程序似乎调用了 getTimeZone() 而没有先构建 User() 实例。除非你更正 Frida 挂钩代码无法正常工作。