0

我想挂钩connect套接字的功能。

首先,我需要找到它的地址。

我用以下方法枚举模块:

modules = Process.enumerateModules()

奇怪的是

addr = modules[i].findExportByName('connect')

返回任何 的预期地址(libsystem_kernel.dylib根据属于Process.findModuleByAddress(addr)i

我不明白它如何适用于与i包含导出的模块对应的值不同的值,如果它真的适用于所有模块,为什么不是findModuleByAddressa 的函数Process

我注意到

Module.findExportByName(null, 'connect')

也可以,但我不知道有什么区别。

4

2 回答 2

1

您的问题不清楚,我无法重现您描述的行为,它可以在我的手机上使用最新的 Frida ><,不过,我会试一试并回答。

libsystem_kernel.dylib#connect是套接字连接。

如果您null作为第一个参数传递,Module.findExportByName它将在所有模块中搜索。

您可以DebugSymbol.fromAddress用于完整性检查。

DebugSymbol.fromAddress(Module.findExportByName(null, 'connect'))                                             
{
    "address": "0x185c5c370",
    "fileName": "",
    "lineNumber": 0,
    "moduleName": "libsystem_kernel.dylib",
    "name": "__connect"
}

要钩住它,您可以使用

$ frida-trace -Uf com.app -i connect

或者

Interceptor.attach(Module.findExportByName(null, 'connect'), {
  onEnter: onEnterCallback, onLeave: onLeaveCallback
})
于 2019-05-20T10:45:05.470 回答
0

就像你说的,这有效:

Module.getExportByName(null,'socket')
"0x183d8ca94"

Process.findModuleByAddress("0x183d8ca94")
{
    "base": "0x183d88000",
    "name": "libsystem_kernel.dylib",
    "path": "/usr/lib/system/libsystem_kernel.dylib",
    "size": 163840
}

首先,你address得到socket. 然后您使用该地址查找Module.

您可以将它们缩短为@ie 显示的命令。他给了你一个很好的答案。

您问:“为什么 findModuleByAddress 不是 Process 的函数?” 我正在使用 Frida "version": "12.11.18",它是Process.

于 2021-01-06T10:01:59.980 回答