【iOS安全】Cydia Substrate(MobileSubstrate)介绍

简介

Cydia Substrate (以前叫做MobileSubstrate)是一个框架,运行在越狱iOS设备上,使开发人员可以编写和安装“插件”,以实现 hook并替换系统函数、将第三方动态链接库插入到指定的目标app中等目的。
Cydia Substrate可以实现修改应用程序的行为、自定义用户界面、增强系统功能等功能。
详细的文档:https://www.cydiasubstrate.com/id/264d6581-a762-4343-9605-729ef12ff0af/

组成部分

Cydia Substrate由三部分组成:

  • MobileHooker
  • MobileLoader
  • Safe mode

1) MobileHooker

MobileHooker用来hook并替换系统函数
有如下API可用:

IMP MSHookMessage(Class class, SEL selector, IMP replacement, const char* prefix); // prefix should be NULL.

void MSHookMessageEx(Class class, SEL selector, IMP replacement, IMP *result);

void MSHookFunction(void* function, void* replacement, void** p_original);

MSHookMessageEx用来hook Objective-C的函数,MSHookFunction用来hook C/C++函数。

参见:
https://www.cydiasubstrate.com/api/c/MSHookMessageEx/
https://www.cydiasubstrate.com/api/c/MSHookFunction/

2) MobileLoader

MobileLoader把第三方动态链接库注入运行的目标app中

  • MobileLoader首先会通过DYLD_INSERT_LIBRARIES把自己注入目标app
  • 然后它会在/Library/MobileSubstrate/DynamicLibraries/中找到需要注入的动态链接库并加载它们
  • 控制是否将加载到此目标app,加载规则是通过一个plist文件来控制的。如果动态库的名称叫做foo.dylib,那么这个plist文件就叫做foo.plist,这个里面有一个字段叫做filter,里面写明需要注入的目标app的BundleID
    比如,要把foo.dylib注入com.apple.springboard,那么foo.plist文件中的filter就应该这样写:
Filter = {
  Bundles = (com.apple.springboard);
};

3) Safe mode

当编写的扩展导致SpringBoard crash的时候,MobileLoader会捕获这个异常,然后让设备进入安全模式。在安全模式中,所有的第3方扩展都会被禁用。

下面这些signal会触发安全模式: SIGTRAP SIGABRT SIGILL SIGBUS SIGSEGV SIGSYS

参考

https://wizardforcel.gitbooks.io/ios-sec-wiki/content/chapter7/issue7-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值