Frida Stalker代码追踪:反混淆和调用链分析利器
Frida Stalker 是 Frida 的高级功能,用来追踪 CPU 指令执行路径。跟 hook 不同,Stalker 不改代码,只记录执行路径。一、Stalker 原理
Stalker 在运行时动态重写代码块,在每个基本块前后插入回调。这样能看到 CPU 实际执行了哪些指令,按什么顺序执行的。适合分析混淆代码的实际执行路径。
二、基本用法
var Stalker = require('frida-stalker');
// 追踪某个线程的执行
Stalker.follow(Process.getCurrentThreadId(), {
events: {
call: true, // 记录函数调用
ret: false, // 记录返回
exec: false, // 记录每条指令(量大)
block: true // 记录基本块
},
onCallSummary: function(summary) {
// summary 是函数地址到调用次数的映射
for (var addr in summary) {
console.log("call: " + addr + " count: " + summary);
}
}
});
三、追踪特定函数范围
只在目标函数执行期间追踪,避免数据量太大:
var targetAddr = ptr("0x12345678");
Stalker.follow(Process.getCurrentThreadId(), {
events: { block: true },
onReceive: function(events) {
var blocks = Stalker.parse(events);
blocks.forEach(function(b) {
console.log("block: " + b + " -> " + b);
});
}
});
// 到函数返回时停止
setTimeout(function() {
Stalker.unfollow();
}, 5000);
四、实战场景
[*]反混淆:追踪实际执行的基本块序列,还原被混淆的控制流
[*]调用链分析:看目标函数调用了哪些子函数,构建调用图
[*]死代码识别:Stalker 没追踪到的代码块可能是死代码或混淆噪音
[*]性能分析:统计每个函数的执行时间
五、注意事项
[*]Stalker 性能开销大。追踪全线程会让 App 慢 10 倍以上
[*]只追踪目标函数范围,用 Stalker.follow + Stalker.unfollow 配合
[*]exec 级别追踪数据量巨大,只在精确定位时用
[*]ARM64 和 x64 的 Stalker 行为略有差异,注意平台适配
https://www.metk.cn/img/posts/frida_stalker.jpg 嘘,低调。 传说中的沙发???哇卡卡 之前分析过类似的,混淆还原完逻辑其实不复杂。 实际项目里最实用的往往是最朴素的抓包手段。 加固方案升级挺快的,去年那套方法今年可能就失效了。 加固厂商之间差异挺大,同一套思路不一定通用。 建议把分析过程记录下来,下次遇到类似的能省一半时间。 这类技术更新的频率很高,老教程参考价值有限。 做这类分析一定要有授权,边界要清楚。