findExportByName находит имя, которого нет в модуле - PullRequest
0 голосов
/ 17 мая 2019

Я хочу подключить функцию connect к сокетам.

Сначала мне нужно найти ее адрес.

Я перечисляю модули с помощью:

modules = Process.enumerateModules()

Странно то, что

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

возвращает предполагаемый адрес (который принадлежит libsystem_kernel.dylib согласно Process.findModuleByAddress(addr)) для любого i.

Я не понимаю, какон может работать для значений i, отличных от того, который соответствует модулю, содержащему экспорт, и если он действительно работает для всех модулей, почему findModuleByAddress не является функцией Process?

Я заметил, что

Module.findExportByName(null, 'connect')

тоже работает, но я понятия не имею, в чем разница.

1 Ответ

0 голосов
/ 20 мая 2019

Ваши вопросы не ясны, и я не могу воспроизвести описанное вами поведение, оно работает на моем телефоне с последней Frida> <, тем не менее, я сделаю снимок и отвечу. </p>

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
})
...