我想将connect
函数挂接到套接字上。
首先,我需要找到它的地址。
我列举了以下模块:
modules = Process.enumerateModules()
奇怪的是
addr = modules[i].findExportByName('connect')
返回任何libsystem_kernel.dylib
的预期地址(根据Process.findModuleByAddress(addr)
属于i
)。
除了与包含导出模块的模块相对应的值外,我不了解它如何适用于i
的不同值,如果它确实适用于所有模块,为什么{{1 }}是findModuleByAddress
的功能吗?
我注意到了
Process
也可以,但是我不知道有什么区别。
答案 0 :(得分:0)
您的问题尚不清楚,我无法重现您描述的行为,它可以在我的手机上使用最新的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.attch(Module.findExportByName(null, 'connect'), {
onEnter: onEnterCallback, onLeave: onLeaveCallback
})
答案 1 :(得分: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
。
您可以将它们缩短为@i.e. 的命令。显示。他给了你一个很好的答案。
您问:“为什么 findModuleByAddress 不是 Process 的函数?”我使用的是 Frida "version": "12.11.18"
,它是 Process
的一部分。