как я могу использовать свой собственный ввод, так что по frida, когда есть строковый тип? - PullRequest
0 голосов
/ 10 июля 2020

Я подключил встроенную функцию dlopen в lib c .so, и я хочу ее использовать. Я обнаружил, что мне нужно создать новую встроенную функцию и установить тип аргументов следующим образом:

  1. new NativeFunction (адрес, тип возврата, [..., abi]) и встроенная функция, например:
  2. void * dlopen (const char *, int) Я не знаю, как выбрать тип для соответствия const char * , я пишу это:
  3. var fun = new NativeFunction (_dlopen, 'pointer', ['pointer', 'int']), а мой путь so - '/ data / local / tmp / ***. так что я напишу это:
  4. var str = '/ data / local / tmp / ***. so'
  5. fun (str, 1)

но консоль выдает ошибку:

недопустимое значение аргумента в / [5] что мне делать? может кто-нибудь мне помочь?

1 Ответ

1 голос
/ 11 июля 2020

Вы можете использовать Module.load https://frida.re/docs/javascript-api/#module -load

Если вы хотите внедрить модуль вместо другого модуля, вы можете сделать что-то вроде этого

        Interceptor.attach(Module.findExportByName(null, "dlopen"), {
            onEnter: function(args) {
                if ( args[0].readUtf8String().includes(excludeModuleName) ) {
                  Module.load('/data/local/tmp/custom.so');
                  // now we need to fail the original dlopen
                  // we can do something like this.. or replace the return value..
                  // maybe later i'll edit with a better solution ;)
                  args[0].writeUtf8String('...');
                }
            }
        });

Чтобы ответить на ваш вопрос в комментарии

как мне запустить свою функцию в так введенном frida? Есть ли какие-то методы?

Module.load('/data/local/tmp/a');
var func_ptr = Module.findExportByName('a', 'function_name');
// wrap with NativeFunction(pointer, return_value, [list_of_arguments])
// lets assume your function gets a string and an int
// function_name(string a1, int a2)
var f = new NativeFunction(func_ptr, 'pointer', ['pointer', 'int']);
// invoking the fuction
f(Memory.allocUtf8String("abcd"), 3);
...