简介
Stalker 是Frida的代码跟踪引擎。它允许跟踪线程,捕获每个函数、每个块,甚至是执行的每条指令。显然,Stalker底层实现在某种程度上是依赖于架构的,尽管它们之间有很多共同点。Stalker目前支持运行在常见的 AArch64 架构的Android 或iOS的手机和平板电脑上,以及常见的 Intel 64 和 IA-32 架构台式机和笔记本电脑上。对于ARM32位的支持相当有限,会出现一些BUG,建议使用ARM64位进行Trace
原理
核心原理
动态重编译(Dynamic Recompilation)
什么是动态重编译?简单来说,当一个线程即将执行其下一条指令时,通过复制所有指令,并且新增一些自定义指令到一块新的内存地址,然后执行新的内存指令副本。因此,原本的指令没有任何变化,反调试当然也不会起作用。举个例子,在每条指令之前新增一条Call指令,调用log_handler来记录一些即将执行的指令信息,包括寄存器等等(如下图)