jmpews / Dobby

a lightweight, multi-platform, multi-architecture hook framework.
Apache License 2.0
3.89k stars 798 forks source link

thumb 跳转到 arm32 的 stub #125

Closed noopoo closed 3 years ago

noopoo commented 3 years ago

测试环境, nexus 6, lineageos android 9 应用 whatsapp,目标被 hook 的函数 sub_909858B4 为 thumb 被hook的函数跳转时是 thumb 环境

libwhatsapp.so:9096884C 02 21       MOVS            R1, #2
libwhatsapp.so:9096884E 2A 46       MOV             R2, R5
libwhatsapp.so:90968850 1D F0 30 F8 BL              sub_909858B4  ** 下钩子处,明显 thumb 指令
libwhatsapp.so:90968854 04 46       MOV             R4, R0

sub_909858B4 是被 hook 的函数,这里插入的 stub 是arm32的

libwhatsapp.so:909858B4             sub_909858B4                            ;
libwhatsapp.so:909858B4 04 F0 1F E5 LDR             PC, =(new_hook_function+1) ** 插入的是 arm32 stub
libwhatsapp.so:909858B4             ; End of function sub_909858B4

BL 到 sub_909858B4 时,由于 T 寄存器仍然是 1,导致把 sub_909858B4 的 arm32 当作 thumb 执行,SIGILL 4 非法指令crash

jmpews commented 3 years ago

你如果 hook thumb 的函数, 需要手动给地址 +1.

noopoo commented 3 years ago

你如果 hook thumb 的函数, 需要手动给地址 +1.

懂了,谢谢指点