首页
社区
课程
招聘
[原创] sktrace:基于 Frida Stalker 的 trace 工具
发表于: 2020-12-26 19:52 27554

[原创] sktrace:基于 Frida Stalker 的 trace 工具

2020-12-26 19:52
27554

我们常用 Frida hook天hook地,基于 Frida 的项目也遍地开花,是的 Frida 太好用了。其实 Frida 还有一些更为高级,强大的特性,例如 Stalker。
Stalker 是 Frida 中提供的代码跟踪引擎,可以在Native层方法级别,块级别,指令级别实现代码修改,代码跟踪。
其实 Stalker 很早就出现在 Frdia,但在 arm 上无法运行。最近 Frida 从 12.xx 版本直接跳到了 14.0,并且“Stalker ARM improvements” 几个大字在更新文档上赫然出现。欣喜的以为可以在 arm 上使用了,不幸的是试了一下却还是有问题,arm64 倒是还算正常。期待早日完美支持 arm。

Stalker 的目标是实现一个快速的,不被反调发现的,指令级别的代码追踪引擎,怎么能同时实现这些,答案是:动态编译。
官方的文档讲的很清楚,有兴趣的自己可以自己看看,会了解的比较透彻。
下面通俗的说意思自己的理解,有不对的地方还请大佬们指出哈。
Stalker 不像 Interceptor 一样直接在指令执行的地方做修改,Stalker 会重新开辟一块空间用于执行动态编译的代码,并且暴漏接口给用户来操纵动态编译的指令。Stalker 以基本块为基本的执行单元,从使用者的角度来说,需要了解下面几个 Stalker 中的概念:

每当执行到一个基本块,Stalker 都会做以下几件事:

下面手动写了一个动态编译的过程,可能不太准确,大概是这个意思:
图片描述

transform 函数配合 put_callout 使得我们可以对每一个基本块做任何想做事,对于运行过程中进行解密的代码,也可以通过修改 trustThreshold 来监视解密过程。

sktrace 是对 Stalker 最为简单的应用,实现了一个类似 IDA 指令 trace 的功能。另外对于每个寄存器的连续变化做了个统计,会更利于分析,如果出现连续四个可打印字符,会以字符串的形式打印出来。
暂时只是简单的写了一下,贴下地址:

https://github.com/bmax121/sktrace

拿大佬们玩的 ollvm9.apk 测试了一下:

软件页面:
图片描述

trace效果:
trace效果图

寄存器变化统计结果:
搜索页面上的字符串,就能够直接找到:
寄存器变化统计

 
 
python3 sktrace/sktrace.py -m attach -l libnative-lib.so -i Java_com_kanxue_ollvm_1ndk_MainActivity_UUIDCheckSum com.kanxue.ollvm_ndk_9
python3 sktrace/sktrace.py -m attach -l libnative-lib.so -i Java_com_kanxue_ollvm_1ndk_MainActivity_UUIDCheckSum com.kanxue.ollvm_ndk_9
 
 

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2021-1-14 16:24 被bmax编辑 ,原因:
收藏
免费 12
支持
分享
最新回复 (23)
雪    币: 477
活跃值: (1412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
强大
2020-12-26 21:45
0
雪    币: 443
活跃值: (1157)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
感谢楼主分享。最近也在研究stalker功能。ubuntu20支持的不太好。
2020-12-26 23:39
0
雪    币: 774
活跃值: (2065)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
无情剑客_bur 感谢楼主分享。最近也在研究stalker功能。ubuntu20支持的不太好。
是的,arm支持也不太好,x86-64 可以试试 qdbi
2020-12-27 09:52
0
雪    币: 498
活跃值: (4206)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
强大,啥时候支持上32
2020-12-28 09:58
0
雪    币: 236
活跃值: (1138)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
感谢分享,长见识了
2020-12-28 14:20
0
雪    币: 4440
活跃值: (3103)
能力值: ( LV10,RANK:175 )
在线值:
发帖
回帖
粉丝
7
已经发啦,来点个赞!
2020-12-29 11:55
0
雪    币: 1759
活跃值: (2334)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
8
不错
2020-12-30 14:13
0
雪    币:
活跃值: (854)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
感谢楼主分享,学习中
2020-12-30 16:25
0
雪    币: 1640
活跃值: (1719)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
大佬,trace后如何保存为文件呢
2020-12-31 16:52
0
雪    币: 774
活跃值: (2065)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
richor 大佬,trace后如何保存为文件呢
重定向或者改改代码
2021-1-1 19:22
0
雪    币: 237
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
不会用
2021-1-8 18:57
0
雪    币: 969
活跃值: (843)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
richor 大佬,trace后如何保存为文件呢


最后于 2021-1-11 14:55 被lrzhao编辑 ,原因:
2021-1-11 14:52
0
雪    币: 443
活跃值: (1157)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
bmax 是的,arm支持也不太好,x86-64 可以试试 qdbi
Stalker的trap功能可有研究?
2021-1-12 09:00
0
雪    币: 774
活跃值: (2065)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
无情剑客_bur Stalker的trap功能可有研究?
没有.
2021-1-14 16:27
0
雪    币: 986
活跃值: (6167)
能力值: ( LV7,RANK:115 )
在线值:
发帖
回帖
粉丝
16
支持
2021-2-5 23:12
0
雪    币: 36
活跃值: (1061)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
17
mark
2021-9-15 17:14
0
雪    币: 219
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
18
Error: compilation failed: module.c:51: error: cast between pointer and integer of different size', 'stack': 'Error: compilation failed: module.c:51: error: cast between pointer and integer of different size\n    at <eval> (/script1.js:98)', 'fileName': '/script1.js', 'lineNumber': 98, 'columnNumber'
是因为不支持32位吗?
2021-12-30 14:44
0
雪    币: 0
活跃值: (227)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
LDAXR STLXR如何处理,一直卡在这个位置
2023-3-30 20:15
0
雪    币: 116
活跃值: (1012)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
支持一下
2023-3-31 16:34
0
雪    币: 73
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
支持
2023-12-12 17:52
0
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
22
请问这个如何保存为log呢
2023-12-16 10:02
0
雪    币: 717
活跃值: (1552)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
大佬,请问这个如果是动态注册的函数怎么hook呢,-i后面的函数参数怎么写
2024-8-28 11:49
0
雪    币: 98
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
24
mark
2024-9-7 11:29
0
游客
登录 | 注册 方可回帖
返回
//