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

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

2020-12-26 19:52
29940

我们常用 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编辑 ,原因:
收藏
免费 17
支持
分享
赞赏记录
参与人
雪币
留言
时间
一路南寻
为你点赞!
2025-4-5 06:50
sinker_
感谢你分享这么好的资源!
2025-4-3 23:36
崛起者
期待更多优质内容的分享,论坛有你更精彩!
2025-3-9 23:54
心游尘世外
为你点赞!
2025-3-4 06:05
飘零丶
感谢你的贡献,论坛因你而更加精彩!
2025-2-28 01:01
华达州
为你点赞~
2023-12-12 17:51
你瞒我瞒
为你点赞~
2023-8-23 16:27
huangjw
为你点赞~
2023-6-16 15:43
nevinhappy
为你点赞~
2023-3-31 22:35
PLEBFE
为你点赞~
2022-7-30 09:26
imwhite
为你点赞~
2022-3-17 16:31
mb_cwlqrkbj
为你点赞~
2021-7-13 23:10
Ssssone
为你点赞~
2021-2-5 23:12
MsScotch
为你点赞~
2021-1-12 09:49
无情剑客_bur
为你点赞~
2021-1-12 00:04
ghostrong
为你点赞~
2020-12-30 16:08
DMemory
为你点赞~
2020-12-29 11:53
最新回复 (23)
雪    币: 477
活跃值: (1412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
强大
2020-12-26 21:45
0
雪    币: 443
活跃值: (1187)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
感谢楼主分享。最近也在研究stalker功能。ubuntu20支持的不太好。
2020-12-26 23:39
0
雪    币: 964
活跃值: (2390)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
无情剑客_bur 感谢楼主分享。最近也在研究stalker功能。ubuntu20支持的不太好。
是的,arm支持也不太好,x86-64 可以试试 qdbi
2020-12-27 09:52
0
雪    币: 498
活跃值: (4556)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
强大,啥时候支持上32
2020-12-28 09:58
0
雪    币: 236
活跃值: (1138)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
感谢分享,长见识了
2020-12-28 14:20
0
雪    币: 5523
活跃值: (3293)
能力值: ( LV10,RANK:175 )
在线值:
发帖
回帖
粉丝
7
已经发啦,来点个赞!
2020-12-29 11:55
0
雪    币: 1795
活跃值: (2539)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
8
不错
2020-12-30 14:13
0
雪    币:
活跃值: (859)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
感谢楼主分享,学习中
2020-12-30 16:25
0
雪    币: 1189
活跃值: (2040)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
大佬,trace后如何保存为文件呢
2020-12-31 16:52
0
雪    币: 964
活跃值: (2390)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
richor 大佬,trace后如何保存为文件呢
重定向或者改改代码
2021-1-1 19:22
0
雪    币: 237
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
不会用
2021-1-8 18:57
0
雪    币: 969
活跃值: (999)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
richor 大佬,trace后如何保存为文件呢


最后于 2021-1-11 14:55 被lrzhao编辑 ,原因:
2021-1-11 14:52
0
雪    币: 443
活跃值: (1187)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
bmax 是的,arm支持也不太好,x86-64 可以试试 qdbi
Stalker的trap功能可有研究?
2021-1-12 09:00
0
雪    币: 964
活跃值: (2390)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
无情剑客_bur Stalker的trap功能可有研究?
没有.
2021-1-14 16:27
0
雪    币: 986
活跃值: (6237)
能力值: ( LV7,RANK:115 )
在线值:
发帖
回帖
粉丝
16
支持
2021-2-5 23:12
0
雪    币: 36
活跃值: (1156)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
17
mark
2021-9-15 17:14
0
雪    币: 225
能力值: ( 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
活跃值: (252)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
LDAXR STLXR如何处理,一直卡在这个位置
2023-3-30 20:15
0
雪    币: 136
活跃值: (1227)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
支持一下
2023-3-31 16:34
0
雪    币: 83
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
支持
2023-12-12 17:52
0
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
22
请问这个如何保存为log呢
2023-12-16 10:02
0
雪    币: 757
活跃值: (1842)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
大佬,请问这个如果是动态注册的函数怎么hook呢,-i后面的函数参数怎么写
2024-8-28 11:49
0
雪    币: 98
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
24
mark
2024-9-7 11:29
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册