当有字符串类型时,我如何使用frida注入我自己的so



我在libc.so中钩住了本机函数dlopen,我想使用它。我发现我需要新建一个本机函数,并设置如下参数类型:

  1. 新的NativeFunction(address,returntype,[…,abi](和本机功能如下:
  2. void*dlopen(const char*,int(我不知道如何选择与const char**匹配的类型,我写了这样的:
  3. var fun=new NativeFunction(_dlopen,'pointer',['pointer],'t'](我的so的路径是'/data/local/tmp/***.so',所以我写下:
  4. var str='/data/local/tmp/***.so'
  5. 乐趣(str,1(

但控制台给我一个错误:

无效的参数值在/[5]我该怎么办?有人能帮我吗?

您可以使用Module.loadhttps://frida.re/docs/javascript-api/#module-加载

如果你想注入一个模块而不是另一个模块,你可以做这样的

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注入的so中启动我的函数?有一些吗方法?

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);

相关内容

  • 没有找到相关文章

最新更新