最近需要用到Android so hook,于是分析了一下比较流行的Cydia Substrate框架
CydiaSubstrate框架的核心函数是MSHOOKFunction,官方使用说明如下:
现在Android 默认编译出来的都是thumb指令集的,就分析一下这个模式下的HOOK吧。
在使用MSHOOKFunction HOOK前,先用IDA attach到进程先看下准备HOOK的函数,前面18个字节的二进制指令如下:
52ABF480 30 B5 PUSH {R4,R5,LR}
52ABF482 8D B0 SUB SP, SP, #0x34
52ABF484 05 1E SUBS R5, R0, #0
52ABF486 10 D1 BNE loc_52ABF4AA
52ABF488 0C 1E SUBS R4, R1, #0
52ABF48A 28 D0 BEQ loc_52ABF4DE
52ABF48C 15 49 LDR R1, =(aSign - 0x52ABF496)
52ABF48E 02 23 MOVS R3, #2
52ABF490 5B 42 NEGS R3, R3
HOOK后的指令如下:
52ABF480 78 47 BX PC
52ABF480 ;---------------------------------------------------------------------------
52ABF482 C0 DCB 0xC0 ;
52ABF483 46 DCB 0x46 ; F
52ABF484 ; ---------------------------------------------------------------------------
52ABF484 CODE32
52ABF484
52ABF484 loc_52ABF484 ; CODE XREF:_F14700dj
52ABF484 04 F0 1F E5 LDR PC, =(sub_58F7C000+1)

本文深入分析了Cydia Substrate框架在Android上的so钩子机制,特别是MSHOOKFunction函数。通过对比hook前后的指令,揭示了如何在thumb指令集下正确实现跳转,以及hook过程中遇到的问题和解决办法。该框架在多线程并发场景下表现稳定,但受限于thumb指令集,对于太短的函数无法进行inline hook,并且存在潜在的回跳异常风险。
最低0.47元/天 解锁文章
1561

被折叠的 条评论
为什么被折叠?



