Reverse engineering findExportByName查找不在模块中的名称

Reverse engineering findExportByName查找不在模块中的名称,reverse-engineering,frida,Reverse Engineering,Frida,我想挂接套接字的连接函数 首先,我需要找到它的地址 我列举了以下模块: modules = Process.enumerateModules() 奇怪的是 addr = modules[i].findExportByName('connect') 根据Process.findModuleByAddressaddr为任何i返回属于libsystem_kernel.dylib的预期地址 我不明白它如何适用于与包含导出的模块对应的I不同的值,如果它真的适用于所有模块,为什么findModuleBy

我想挂接套接字的连接函数

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

我列举了以下模块:

modules = Process.enumerateModules()
奇怪的是

addr = modules[i].findExportByName('connect')
根据Process.findModuleByAddressaddr为任何i返回属于libsystem_kernel.dylib的预期地址

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

我注意到

Module.findExportByName(null, 'connect')

同样有效,但我不知道区别是什么。

你的问题不清楚,我无法重现你描述的行为,它在我的手机上使用最新的Frida>就像你说的,它有效:

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

Process.findModuleByAddress("0x183d8ca94")
{
    "base": "0x183d88000",
    "name": "libsystem_kernel.dylib",
    "path": "/usr/lib/system/libsystem_kernel.dylib",
    "size": 163840
}
首先,您得到套接字的地址。然后使用该地址查找模块

您可以将它们缩短为@i.e.显示的命令。他给了你一个极好的回答

您问:为什么findModuleByAddress不是进程的函数?我使用的是Frida版本:12.11.18,这是过程的一部分

Interceptor.attch(Module.findExportByName(null, 'connect'), {
  onEnter: onEnterCallback, onLeave: onLeaveCallback
})
Module.getExportByName(null,'socket')
"0x183d8ca94"

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