inlineHook

inlineHook

  • 所谓inlineHook就是直接修改目标函数的头部代码,让它跳转到我们自定义的函数里面,执行我们的代码。从而达到Hook的目的,这种Hook技术一般用在静态语言的Hook上。

inlineHook框架Dobby

  • Dobby Github,原名HookZz
  • OC里Runtime用 MethodSwizzle hook。(数据段)
  • c系统函数,用fishhook可以hook。(数据段)
  • dobby可以hook静态函数(swift,oc,c都可以),通过一个函数地址(代码段),修改汇编。一个方法汇编的前几行 一般都是对内存栈的操作,开辟内存,堆栈平衡。inlinehook把这几行强行替换掉,跳转到指定的函数内存中。如果不对头进行修改,可能造成寄存器污染,破坏栈平衡。
  • 总结:直接修改函数的前几条汇编指令。

origin:

sub sp, sp, #0x10
str wo, [sp, #0xc]
str w1, [sp, #0x8]

new:

# 定位到某一页
adrp x16, 0
add x16, x16, #0xe14
br x16

  • ADRP指令(adreess p: page)内存分页
    编译时,首先会计算出当前PC到exper的偏移量#offset_to_exper
    pc的低12位清零,然后加上偏移量,给register
    得到的地址,是含有label的4KB对齐内存区域的base地址;