最近需要用到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)
52ABF484 ; ---------------------------------------------------------------------------