android inline hook 学习笔记

本文详细介绍了Android内联hook的技术,包括ARM和Thumb模式的区别、跳转指令构造、ARM及Thumb模式下的hook实现、替换函数逻辑以及指令修正。讨论了在不同模式下选择合适的跳转指令和实现兼容性的策略。
摘要由CSDN通过智能技术生成

hook种类

  • GOT表hook,通过更改GOT表offset来实现hook
  • inline hook,即内部跳转hook,替换函数开始处的地址为跳转指令,跳转到hook函数

    比较而言,
    1.GOT表对于本so文件中不经过GOT表
    2.dlsym来调用的函数不经过GOT表

android inline hook

难点
- ARM模式和Thumb存在区别,不像x86,需要区分处理.
- 跳转指令如何构造
- 替换函数的逻辑
- 指令修改之后如何修正

ARM和thumb的区别

ARM在V4之前没有THUMB指令,V4时无法切换,到V5开始可通过BX和BLX进行切换,而V6版本增加了THUMB2指令. THUMB使用2个字节,而THUMB2指令使用4个字节,ARM指令也是使用4个字节.

跳转指令构造

  • 通过跳转指令进行跳转,比如有B,BL,BX和BLX
  • 通过改写PC寄存器进行跳转

ARM的B和BL指令格式

B格式:
31——–28|27——–24|23———————————-0
—-条件—–|1–0—1—-0|———— 24位立即数

BL格式:
31———28|27——–24|23———————————0
—-条件——|1–0—1—-0|———— 24位立即数

1.由于ARM指令4位对齐,低两位为0,再除去符号位,所以可表示的跳转地址为2^(24+2-1) = 土32M 范围.
2,imm24_offset = ((destAddr - (curAddr + 8) >> 2)) & 0x00ffffff

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值