2

我正在通过使用这种方法和这种方法在 genymotion x86 上测试一个颤振的 android 应用程序以绕过 sslpinning ,但是我的函数地址在运行 Frida 时返回 null。

首先,通过Ghidra找到了函数的地址,即 (0x773c52),这里是该函数早期行的字节: (\x55\x41\x57\x41\x56\x41\x55\x41\x54\x53\ x48\x81\xec\xf8\x00\x00\x00\xc6) 然后通过binwalk找到地址的正确偏移量:

C:\ >python binwalk -R " \x55\x41\x57\x41\x56\x41\x55\x41\x54\x53\x48\x81\xec\xf8\x00\x00\x00\xc6" <app_path>\lib\x86_64\libflutter.so

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
6761554       0x672C52        Raw signature (\x55\x41\x57\x41\x56\x41\x55\x41\x54\x53\x48\x81\xec\xf8\x00\x00\x00\xc6)

接下来我在 Frida 代码中使用了这个地址,如下所示:

function disablePinning(){
    var address = Module.findBaseAddress('lib/x86_64/libflutter.so').add(0x673c52)
    hook_ssl_verify_result(address);
}
setTimeout(disablePinning, 10000)

最后,当我运行 Frida 脚本时,我遇到了空地址异常。

TypeError:无法在(frida/runtime/core.js:45)的应用(本机)处的disablePinning(/hook_ssl.js:20)处读取null的属性“添加”

frida中的空地址错误

我还尝试了许多不同版本的 Frida。有人知道为什么会这样吗?

提前致谢。

4

1 回答 1

2

您的代码的问题是您将模块名称与文件名混淆了。

var address = Module.findBaseAddress('lib/x86_64/libflutter.so')返回 null 因为您指定的模块名称错误,因此未找到该模块。

如果您执行以下代码片段,您将看到模块名称从未用路径表示。模块名称是库的内部名称,通常与文件名相同(但据我所知,它可以不同)。

Process.enumerateModules({
        onMatch: function(module){
            console.log('Module name: ' + module.name + " - Base Address: " + module.base.toString());
        }, 
        onComplete: function(){}
    });

常规 Android 应用的代码片段的示例输出:

Module name: app_process64 - Base Address: 0x763b8e3000
Module name: libandroid_runtime.so - Base Address: 0x7637b04000
Module name: libbinder.so - Base Address: 0x763a365000
Module name: libcutils.so - Base Address: 0x763a7df000
Module name: libdl.so - Base Address: 0x763a20d000
Module name: libhwbinder.so - Base Address: 0x7637183000
Module name: liblog.so - Base Address: 0x763a9dd000
Module name: libnativeloader.so - Base Address: 0x7639fcc000
Module name: libutils.so - Base Address: 0x7636f92000
Module name: libwilhelm.so - Base Address: 0x7637e86000
Module name: libc++.so - Base Address: 0x7639bdb000
Module name: libc.so - Base Address: 0x7638d5e000
...

考虑到这一点,如果您在'libflutter.so'没有路径名的情况下使用,您的代码应该可以工作。如果仍然无法正常工作,请使用提供的代码片段获取应用程序的模块列表,并确定 Flutter 库的正确模块名称。

function disablePinning(){
    var address = Module.findBaseAddress('libflutter.so').add(0x673c52)
    hook_ssl_verify_result(address);
}
于 2021-08-15T10:16:29.323 回答