首页
社区
课程
招聘
未解决 [求助] frida要怎么打印native层的一个函数调用的所有函数地址? 50.00雪花
2021-11-14 20:55 11746

未解决 [求助] frida要怎么打印native层的一个函数调用的所有函数地址? 50.00雪花

2021-11-14 20:55
11746

比如我跟踪一个算法从java层跟踪到了一个so的普通函数地址. 我要怎么打印出来这个函数接下来都调用了哪些函数?

优先打印函数地址,当然要是能打印参数,返回值等相关信息就更好了.


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞0
打赏
分享
最新回复 (8)
雪    币: 3398
活跃值: (2263)
能力值: ( LV6,RANK:83 )
在线值:
发帖
回帖
粉丝
yegu 2021-11-15 00:59
2
0
先用IDA分析so函数,再用frida hook函数里的子函数来分析吧
雪    币: 161
活跃值: (797)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
threadroc 2021-11-15 18:30
3
0
yegu 先用IDA分析so函数,再用frida hook函数里的子函数来分析吧
就是因为挨个子函数分析麻烦,所以才要批量打印地址信息的
听人说frida有方法实现,不知道怎么实现~
雪    币: 174
活跃值: (3646)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
TUGOhost 2021-11-16 11:33
4
0
trace native?
雪    币: 161
活跃值: (797)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
threadroc 2021-11-16 13:49
5
0
TUGOhost trace native?
是的,不借助ida,去解析他的所有普通函数,frida本身不能解析so里的所有函数并进行hook吗
雪    币: 185
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_hgrbqfun 2021-11-16 16:34
6
0
“打印出来这个函数接下来都调用了哪些函数” 这个很难,除非你hook了所有函数。但是可以打印当前函数栈。
雪    币: 161
活跃值: (797)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
threadroc 2021-11-17 16:58
7
0
mb_hgrbqfun “打印出来这个函数接下来都调用了哪些函数” 这个很难,除非你hook了所有函数。但是可以打印当前函数栈。
keystone或者capstone是否能打印呢,我记得其中一个可以在程序执行的时候打印汇编指令,根据汇编指令,可以识别这条指令是否是一条函数调用指令,如果是,就打印其地址
雪    币: 1
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_水山 2023-3-28 10:01
8
0
threadroc keystone或者capstone是否能打印呢,我记得其中一个可以在程序执行的时候打印汇编指令,根据汇编指令,可以识别这条指令是否是一条函数调用指令,如果是,就打印其地址
我最近也有同样的需求,楼主你解决了么
雪    币: 2927
活跃值: (2530)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
caocaofff 2023-3-30 09:13
9
0

你可以使用Frida来完成这个任务。下面是大致的步骤:

1、连接到目标进程,获取相关的Module和函数的地址。

var targetModuleBase = Module.findBaseAddress("target_module.so");
var targetFunctionAddress = Module.findExportByName("target_module.so", "target_function");

2、使用Interceptor来hook住目标函数,获取目标函数的参数,然后打印出来。在回调函数中,你可以继续使用Interceptor来hook住目标函数调用的其他函数,这样就可以追踪到它们的调用了。

Interceptor.attach(targetFunctionAddress, {
  onEnter: function(args) {
    // 打印目标函数的参数
    console.log("Target function arguments: ", args[0], args[1]);

    // hook住目标函数调用的其他函数
    var otherFunctionAddress = Module.findExportByName("target_module.so", "other_function");
    Interceptor.attach(otherFunctionAddress, {
      onEnter: function(args) {
        console.log("Other function arguments: ", args[0], args[1]);
      }
    });
  }
});


需要注意的是,对于一些有参数的函数,参数的类型可能会是结构体或指针等,需要根据具体情况进行处理。同样的,返回值的类型也需要根据实际情况进行解析。


游客
登录 | 注册 方可回帖
返回