首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Frida“调用-虚拟”方法重载失败,“错误:预期的指针”

Frida“调用-虚拟”方法重载失败,“错误:预期的指针”
EN

Stack Overflow用户
提问于 2021-01-30 14:12:36
回答 2查看 769关注 0票数 0

我想通过用apktool解压缩Android应用程序来重载我找到的方法

代码语言:javascript
复制
invoke-virtual {v0, v4, v3}, Lokhttp3/aa$a;->b(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/aa$a;

这是我的弗里达剧本:

代码语言:javascript
复制
Java.perform(function() {
    var targetClass = Java.use("okhttp3.aa$a");
    targetClass.b.overload("java.lang.String", "java.lang.String").implementation = function(a, b) {
        console.log("str1:" + a);
        console.log("str2:" + b);
        return this.b(a, b);
    }
});

钩子失败:

代码语言:javascript
复制
[ERROR] Error: expected a pointer
    at value (frida/runtime/core.js:170)
    at At (frida/node_modules/frida-java-bridge/lib/android.js:879)
    at activate (frida/node_modules/frida-java-bridge/lib/android.js:960)
    at <anonymous> (frida/node_modules/frida-java-bridge/lib/android.js:740)
    at forEach (native)
    at St (frida/node_modules/frida-java-bridge/lib/android.js:741)
    at kt (frida/node_modules/frida-java-bridge/lib/android.js:732)
    at vt (frida/node_modules/frida-java-bridge/lib/android.js:696)
    at replace (frida/node_modules/frida-java-bridge/lib/android.js:1011)
    at set (frida/node_modules/frida-java-bridge/lib/class-factory.js:1010)
    at <anonymous> (/script2.js:3)
    at <anonymous> (frida/node_modules/frida-java-bridge/lib/vm.js:16)
    at _performPendingVmOps (frida/node_modules/frida-java-bridge/index.js:238)
    at <anonymous> (frida/node_modules/frida-java-bridge/index.js:213)
    at <anonymous> (frida/node_modules/frida-java-bridge/lib/vm.js:16)
    at _performPendingVmOpsWhenReady (frida/node_modules/frida-java-bridge/index.js:232)
    at perform (frida/node_modules/frida-java-bridge/index.js:192)
    at <eval> (/script2.js:8)

如何正确过载那个方法?

更新

我发现了这个错误,因为我试图一次加载多个脚本。有可能吗?

代码语言:javascript
复制
import frida
import sys

package_name = "com.test.com"


def hook_okhttp_url():
    hook_code = open('hook_okhttp_url.js').read()
    return hook_code


def hook_cronet_header():
    hook_code = open('hook_cronet_header.js').read()
    return hook_code


def on_message(message, data):
    if message['type'] == 'error':
        print("[ERROR] " + message['stack'])
    elif message['type'] == 'send':
        print("[INFO] " + message['payload'])
    else:
        print(message)

device = frida.get_usb_device()
process = device.attach(package_name)

okhttp_script = process.create_script(hook_okhttp_url())
cronet_script = process.create_script(hook_cronet_header())

okhttp_script.on('message', on_message)
cronet_script.on('message', on_message)

print('[*] Running Hook Test ...')

okhttp_script.load()
cronet_script.load()

sys.stdin.read()

我发现了这个错误,因为我试图一次加载多个脚本。有可能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-01 23:43:40

最后将所有js文件与我的钩子连接在一起。

票数 0
EN

Stack Overflow用户

发布于 2021-01-30 15:12:33

当涉及到重载方法时,我更喜欢用这种方式挂钩和调用方法(因为这样做的问题较少):

代码语言:javascript
复制
Java.perform(function() {
    const targetClass = Java.use("okhttp3.aa$a");
    const targetMethod = targetClass.b.overload("java.lang.String", "java.lang.String");
    targetMethod.implementation = function(a, b) {
        console.log("str1:" + a);
        console.log("str2:" + b);
        return targetMethod.call(this, a, b);
    }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65968935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档