type
status
date
slug
summary
tags
category
icon
password
Frida Interceptor
实现Hook
总结为一张图就是下面这样的,当然是最主流的情况,一些其他情况并没有囊括,如有错误请指正。大概分为四级跳板,首先通过最简单InlineHook的一级跳板跳入on_enter_trampoline
位置,此位置为二级跳板,在on_enter_trampoline
中通过BR x16
进入第三级跳板enter_trunk
,在其内部会对现场进行保存(完成后恢复),然后通过调用对应的invocation进入四级跳板,执行on_enter代码。在完成on_enter处注册的代码后根据函数是否被替换分为两种情况执行:- 如果函数没有被替换(no replace),将会走到
on_invoke_trampoline
,这里的代码将执行原本的函数代码(origin code)
- 如果函数被替换,将会直接执行到replacement code,而不进入
on_invoke_trampoline
在函数原本的代码或者被替换(replace)后的代码执行完成后,根据是否设置
on_leave
走不同的代码路径:- 如果设置了on_leave则跳回到二级跳板执行leave_chunk,和enter_trunk执行过程类似,在结束后返回
- 如果没有设置on_leave则直接返回,没有后续的步骤
最终三种情况都会返回到真正的调用者的位置继续执行,完成一次完整的Hook
- 作者:LLeaves
- 链接:https://lleavesg.top//article/Frida%20Interceptor%20Hook%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86%E5%9B%BE
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章