首页
社区
课程
招聘
[原创] frida-trace 指令追踪&监控寄存器变化 反Ollvm 及SVC HOOK 思路
2022-6-30 16:14 36217

[原创] frida-trace 指令追踪&监控寄存器变化 反Ollvm 及SVC HOOK 思路

2022-6-30 16:14
36217

首先介绍一下工具, 这个是基于frida Stalker 编写的指令追踪工具。目前仅支持arm64

关于Stalker 这里不多做介绍,具体可以查看frida官方文档

stalker介绍链接

 

工具参考了网上的一些实现。在此感谢frida sktrace

 

图片描述

关于OLLVM

反ollvm的核心在与确定分发器 次分发器 逻辑块的关系
如图所示不同的颜色代表的是不同的指令块。这对于ollvm的执行流程分析会很有帮助,但目前对于patch脚本这块并没有去完善, 原因是基于平坦流的混淆,对patch的要求非常复杂。还不如直接看执行流程。但如果是函数体较短的平坦流,推荐分析出流程后直接手动patch。

 

工具对于寄存器里出现的字符串也可以直接显示。 对大部分的指令都做了解析

关于SVC HOOK

目前SVC 的HOOK 方案非常多 有 ptrace 、ptrace +seccomp 、 frida+seccomp 、 内存扫描hook、
现在应该有一个新的方案了 指令SVC HOOK。如图所示 能完整的监控到寄存器的变化。 stalker 也是支持指令的修改的。在此期待一个大佬能出一个方案,
但目前感觉可能在效率上会有所限制。如果监控整个so,所带来的性能问题,可能不好解决。

使用说明

图片描述
传递size0 则代表监控所有SO里的指令执行, 推荐追踪单函数,免的产生过量的信息。
图片描述

结束语

在看雪混迹了好几年 都是潜水,第一篇文章可能写的不好,多多见谅。

 

补上github链接
frida-trace


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

最后于 2022-7-2 16:12 被IIImmmyyy编辑 ,原因:
收藏
点赞7
打赏
分享
最新回复 (35)
雪    币: 325
活跃值: (1863)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mb_ckfmrnqa 2022-6-30 16:53
2
0
老哥已经有个工具叫frida-trace了,另外你这个怎么用啊,没看明白
雪    币: 208
活跃值: (550)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
IIImmmyyy 2022-6-30 17:00
3
0
mb_ckfmrnqa 老哥已经有个工具叫frida-trace了,另外你这个怎么用啊,没看明白
原版的frida-trace 主要是对函数的追踪、 对于寄存器的变化 没有显示, 这个版本是完善了寄存器的变化。后续有时间的话可能会完善流程cfg图
雪    币: 18
活跃值: (881)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bullyxy 2022-6-30 17:37
4
0
transform trace 出来的代码都是有一段没一段的,不好用。
雪    币: 208
活跃值: (550)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
IIImmmyyy 2022-6-30 17:42
5
0
bullyxy transform trace 出来的代码都是有一段没一段的,不好用。
目前分析 和IDA 进行了对比 没发现这种情况
雪    币: 1154
活跃值: (3404)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
王麻子本人 2022-6-30 18:33
6
0

淦,我是发还是不发呢

雪    币: 208
活跃值: (550)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
IIImmmyyy 2022-6-30 19:09
7
0
王麻子本人 淦,我是发还是不发呢
哈哈  发  我就是没找到适合的工具只好自己手撸
雪    币: 18
活跃值: (881)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bullyxy 2022-7-1 18:17
8
0
IIImmmyyy 目前分析 和IDA 进行了对比 没发现这种情况
这个代码 trace 出来又正常了,奇怪。我之前在 transform 就有 bug,都是在 process 里处理的。
雪    币: 208
活跃值: (1475)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
falconnnn 2022-7-2 19:08
9
0
和sktrace有什么区别?
雪    币: 208
活跃值: (1475)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
falconnnn 2022-7-3 10:41
10
0
想问下楼主你输出的log是终端吗,有没有办法带颜色保存到文件中?
雪    币: 208
活跃值: (550)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
IIImmmyyy 2022-7-3 14:53
11
0
falconnnn 想问下楼主你输出的log是终端吗,有没有办法带颜色保存到文件中?
带颜色输出到文件应该是不支持。 输出成XML带颜色应该是可以 但那得自己写了
雪    币: 208
活跃值: (550)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
IIImmmyyy 2022-7-3 14:55
12
0
falconnnn 和sktrace有什么区别?
sktrace 不支持spawned 还有一些小问题。 另外是基于python的, 在某些使用场景下不是非常方便。所以我全改成js的
雪    币: 198
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
天会晴心会暖 2022-7-5 15:22
13
0
没看明白怎么用的... frida直接跑你的index.ts么?
雪    币: 208
活跃值: (1475)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
falconnnn 2022-7-5 16:40
14
0
天会晴心会暖 没看明白怎么用的... frida直接跑你的index.ts么?
npm install编译完跑_agent.js
雪    币: 249
活跃值: (459)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chenxia0 2022-7-5 16:57
15
0
我感觉思路应该跟这个差不多:https://bbs.pediy.com/thread-272839.htm,慢慢,这些技术就会普及了,只是时间问题
雪    币: 198
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
天会晴心会暖 2022-7-5 17:24
16
0
falconnnn npm install编译完跑_agent.js

感谢

最后于 2022-7-5 17:46 被天会晴心会暖编辑 ,原因:
雪    币: 2944
活跃值: (3921)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
0xEA 2022-7-6 14:59
17
0
没看懂怎么用
雪    币: 198
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
天会晴心会暖 2022-7-6 17:15
18
0
VNRKDOEA 没看懂怎么用[em_85]
clone下来后npm install   然后修改straceInject.js 里的 soName 和 要hook的函数和方法大小 然后npm run build 生成新的_agent.js 最后直接Frida -I 跑就行了 就跟你平时跑Frida脚本一样
雪    币: 8
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_yqoccwgm 2022-7-6 17:28
19
0
各方面都不如sktrace意义在哪里呢
雪    币: 226
活跃值: (105)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
happysamuel 2022-7-7 00:47
20
0
很好,学习教程,感谢分享!
雪    币: 2944
活跃值: (3921)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
0xEA 2022-7-7 11:11
21
0
天会晴心会暖 clone下来后npm install 然后修改straceInject.js 里的 soName 和 要hook的函数和方法大小 然后npm run build 生成新的_agent.js 最后 ...
谢谢大佬
雪    币: 208
活跃值: (550)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
IIImmmyyy 2022-7-7 22:20
22
0
mb_yqoccwgm 各方面都不如sktrace意义在哪里呢
你觉的哪个好用就用哪个 没强迫你,另外不使用sktrace的原因也写了。 奇了怪了,咋总有杠精
雪    币: 8
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_yqoccwgm 2022-7-8 10:49
23
0
sktrace完全可以不用python也支持spawn
雪    币: 208
活跃值: (550)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
IIImmmyyy 2022-7-8 15:04
24
0
mb_yqoccwgm sktrace完全可以不用python也支持spawn
嗯 那你就用sktrace 
雪    币: 208
活跃值: (550)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
IIImmmyyy 2022-7-8 15:06
25
0
chenxia0 我感觉思路应该跟这个差不多:https://bbs.pediy.com/thread-272839.htm,慢慢,这些技术就会普及了,只是时间问题
是的 stalker 可以得到执行块的信息。 用来反ollvm也是不错的选择, 但目前面对复杂的平坦流 patch 难度颇高
游客
登录 | 注册 方可回帖
返回