首页
社区
课程
招聘
[原创]逆向角度分析 CydiaSubstrate Hook 原理
发表于: 2014-2-27 15:37 36082

[原创]逆向角度分析 CydiaSubstrate Hook 原理

2014-2-27 15:37
36082
FILE *(*old_fopen)(const char *path, const char *mode);
 
FILE *my_fopen(const char *path, const char *mode)
{
    // 这里什么都不干
    return old_fopen(path, mode);
}
 
void Initialize()
{
    MSHookFunction(&fopen, &my_fopen, (void **)&old_fopen);
}
0x3a043694 <fopen+0>: bx pc
0x3a043696 <fopen+2>: nop   (mov r8, r8)
0x3a043698 <fopen+4>: blx 0x3a4480d8
0x3a04369c <fopen+8>: ldr r1, [r1, #120]
0x3a04369e <fopen+10>: lsls r1, r1, #0
0x3a0436a0 <fopen+12>: mov r8, r0
0x3a0436a2 <fopen+14>: mov r0, r1
0x3a0436a4 <fopen+16>: mov r1, r2
0x3a0436a6 <fopen+18>: blx 0x3a0969ac <dyld_stub___sflags>
0x3a0436aa <fopen+22>: mov r5, r0
0x3a0436ac <fopen+24>: movs r6, #0
0x3a0436ae <fopen+26>: cmp r5, #0
0x3a0436b0 <fopen+28>: beq.n 0x3a04374e <fopen+186>
0x3a0436b2 <fopen+30>: movs r0, #1
0x3a0436b4 <fopen+32>: blx 0x3a09698c <dyld_stub___sfp>
0x3a043694 <fopen+0>: push {r4, r5, r6, r7, lr}
0x3a043696 <fopen+2>: add r7, sp, #12
0x3a043698 <fopen+4>: str.w r8, [sp, #-4]!
0x3a04369c <fopen+8>: sub sp, #4
0x3a04369e <fopen+10>: mov r2, sp
0x3a0436a0 <fopen+12>: mov r8, r0
0x3a0436a2 <fopen+14>: mov r0, r1
0x3a0436a4 <fopen+16>: mov r1, r2
0x3a0436a6 <fopen+18>: blx 0x3a0969ac <dyld_stub___sflags>
0x3a0436aa <fopen+22>: mov r5, r0
0x3a0436ac <fopen+24>: movs r6, #0
0x3a0436ae <fopen+26>: cmp r5, #0
0x3a0436b0 <fopen+28>: beq.n 0x3a04374e <fopen+186>
0x3a0436b2 <fopen+30>: movs r0, #1
0x3a0436b4 <fopen+32>: blx 0x3a09698c <dyld_stub___sfp>
0x3a043694 <fopen+0>: bx pc 
0x3a043698 <fopen+4>: blx 0x3a4480d8
0x3a4480d8: andeq r0, r0, r4
0x3a4480dc: bcc 0x3b592594
0x3a4480e0: subcc r8, r7, r10, asr #1
0x3a4480e4: subcc r3, r9, r7, lsl #14
0x3a4480e8: andeq r0, r0, r2
0x3a043694 <fopen+0>: bx pc 
0x0002c000 <_mh_execute_header+0>: ldr pc, [pc, #-4] ; 0x2c004 <_mh_execute_header+4>
0x0002c004 <_mh_execute_header+4>: andeq r3, r8, r9, lsl #31
0x0002c000 <_mh_execute_header+0>: ldr pc, [pc, #-4] ; 0x2c004 <_mh_execute_header+4>

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 5
支持
分享
最新回复 (10)
雪    币: 0
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
沙发支持!!!!!
2014-2-27 15:44
0
雪    币: 14
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
虽然以前知道MobileSubstrate是通过更改汇编代码的方式来进行hook,但从没读过MS的源码,更没有通过逆向工程来一探究竟。学习了!
2014-2-28 08:21
0
雪    币: 435
活跃值: (172)
能力值: ( LV13,RANK:280 )
在线值:
发帖
回帖
粉丝
4
不错,之前能下到cydia substrate源码,现在好像不可以了
2014-3-4 10:28
0
雪    币: 546
活跃值: (1667)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
5
好文,感谢分享。
2014-3-6 16:54
0
雪    币: 623
活跃值: (40)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
mask
2014-3-21 17:58
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
7
刚好要写个PPT,就以楼主文章为模板,画了张原理图,应该比较直观了。

上传的附件:
2014-4-3 11:44
0
雪    币: 174
活跃值: (265)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
8
[QUOTE=riusksk;1272637]刚好要写个PPT,就以楼主文章为模板,画了张原理图,应该比较直观了。

[/QUOTE]

很直观,期待你的PPT。
2014-4-4 11:44
0
雪    币: 92
活跃值: (209)
能力值: ( LV6,RANK:95 )
在线值:
发帖
回帖
粉丝
9
楼主,如果被hook函数的前面被修改的指令存在相对寻址的话要怎么办呢?
2014-6-24 20:54
0
雪    币: 174
活跃值: (265)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
10
需要反汇编前面的指令,如果有寻址指令的话重新计算偏移量并写入。
我扫了一眼substrate的代码,好像有类似的处理(具体忘了有没有),你可以参考一下。
2014-7-1 10:40
0
雪    币: 92
活跃值: (209)
能力值: ( LV6,RANK:95 )
在线值:
发帖
回帖
粉丝
11
求楼主给我一份substrate的代码
2014-7-10 20:41
0
游客
登录 | 注册 方可回帖
返回
//