逆向角度分析 CydiaSubstrate Hook 原理

简介CydiaSubstrate,iOS7越狱之前名为 MobileSubstrate(下文简称为MS或MS框架),作者为大名鼎鼎的Jay Freeman(saurik).MS框架为越狱iDevice提供了一个稳定的代码修改平台。开发者可以很方便的利用它进行各种插件开发工作。可以说目前很多插件都是基于MS实现,比如activator、barrel、KuaiDial等等。目前
摘要由CSDN通过智能技术生成
简介

CydiaSubstrate,iOS7越狱之前名为 MobileSubstrate(下文简称为MS或MS框架),作者为大名鼎鼎的Jay Freeman(saurik).

MS框架为越狱iDevice提供了一个稳定的代码修改平台。开发者可以很方便的利用它进行各种插件开发工作。可以说目前很多插件都是基于MS实现,比如activator、barrel、KuaiDial等等。

目前大部分人对MS的认知也只停留在表面(API Hook 应用),却很少有人探究它的原理。今天笔者就以逆向分析的角度,去一探究竟。



准备工作

我们用Xcode创建一个空目标工程mssheep.app,并设定它的Bundle ID为com.rainyx.mssheep,再把他生成到iPhone上,这样我们就可以通过com.rainyx.mssheep这个Bundle ID对目标程序mssheep进行注入了,当然前提是要有MS的支持;p.

再创建一个动态库工程mswolf、用于Hook目标程序mssheep。在iOSOpenDev生成的模版中可以看到,按照MS的规则生成了两个文件,分别是/Library/MobileSubstrate/DynamicLibraries/xxx.dylib和/Library/MobileSubstrate/DynamicLibraries/xxx.plist,打开Plist在filters中加入com.rainyx.mssheep这个Bundle ID,然后同样生成到iPhone上。

在iOS桌面启动mssheep.app。然后SSH到iOS,GDB attach到目标进程,打info sh查看加载的库,在列表中有mswolf.dylib,说明我们的动态库成功被目标进程加载,这时候想干什么坏事就都可以干了/:阴险。


修改mswolf工程加入Hook部分代码,此次我们Hook fopen这个API。

代码:
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);
}

我们要让mswolf在目标程序加在后运行Initialize函数,需要在Build Settings的Other Link Flags中加入-init _Initialize选项.编译后生成到iPhone上,再次运行mssheep。



入口跳转分析

目标API fopen被Hook以后,会跳转到我们自己定义的函数入口,即my_fopen,在ARM体系中,由寄存器PC来控制程序的执行顺序,换句话说,寄存器PC保存了下一条要被执行的指令的地址。MS如何改变流程,看下反汇编代码便知。

SSH到iPhone,GDB附加到目标进程,打disassemble 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 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值