弗里达。在 class 方法中传递不同的参数类型。错误 "argument types do not match any of"

Frida. Pass different agrument type in class method. Error "argument types do not match any of"

我用frida挂钩class。在我的例子中是 HmacBuilder。 它有方法 hmacSha256Hex()

这里要什么方法..

hmacSha256Hex('java.lang.String', 'java.lang.String', 'java.lang.String', 'okhttp3.RequestBody', 'java.lang.String')

如果我调用它并为所有这些传递字符串..就像

instance.hmacSha256Hex("none","none","none","none","none"))

frida 报错

argument types do not match any of:\n\t.overload('java.lang.String', 'java.lang.String', 'java.lang.String', 'okhttp3.RequestBody', 'java.lang.String')"

请指教,我应该如何正确调用此方法?(最好将字符串作为 okhttp3.RequestBody 传递?

我满inject_code.js

   console.log("Script loaded successfully ");
Java.perform(function x() {

    //Find an instance of the class and call function.
    Java.choose("com.testapp.HmacBuilder", {
        onMatch: function (instance) {
            console.log("Found instance: " + instance);
           console.log("Result of HMAC func: " + instance.hmacSha256Hex("none","none","none","none","none"));
           
        },
        onComplete: function () { }
    });
});


    console.log("Script finished ");

如果没有采用 4 个字符串参数的重载方法,您必须创建一个 RequestBody 并将其作为第四个参数传递,这就是编程的工作方式。为什么不尝试使用 RequestBody.create(MediaType contentType, String content)? For the MediaType MediaType.get(String) 创建 RequestBody 应该是正确的方法。

翻译成代码应该是这样的代码(未经测试)代码:

let requestBodyText = "my text"; // <- define the request body text here

let requestBodyClass = Java.use("okhttp3.RequestBody");
let mediaTypeClass = Java.use("okhttp3.MediaType");
let mediaType = mediaTypeClass.get("text/plain");
let requestBody = requestBodyClass.create(mediaType, requestBodyText);

instance.hmacSha256Hex("none","none","none",requestBody,"none"))