文档章节

Cydia的基石:MobileSubstrate

H
 HeroHY
发布于 11/17 14:11
字数 926
阅读 5
收藏 0

在MAC与IOS平台上,动态库的后缀一般是dylid,而加载这些动态库的程序叫做dynamic linker(dyld)。这个程序有很多的环境变量来设置程序的一些行为,最为常用的一个环境变量叫做"DYLD_INSERT_LIBRARIES"。它是一个使用冒号分隔的动态库路径字符串,表示一个将要加载运行的动态库额外依赖的其它动态库。通过这个环境变量,我们就可以向应用中注入自己的动态库,进而改变应用运行时的特定行为。而这种方式,也正是mobileSubstrate所使用的最基本方法。

MobileSubstrate又叫Cydia Substrate,它是由Saurik开发的一个框架。第三方开发者调用其API,可以实现给IOS系统打补丁,改变系统或者应用的运行行为。随着时间的发展,Mobilesubstrate也不再仅仅局限于IOS平台,同样提供了对Android平台的支持,同时也支持了c/c++。Mobile Substrate由MobileHooker/MobileLoader/SafeMode三部分组成。

MobileHooker是对外的API部分,它们主要用来替换系统的函数实现。最主要的二个API见下图:

MSHookMessage是非线程安全的,用于替换原函数实现。而MSHookMessageEx则是线程安全,二者主要是在OC的Runtime机制上实现的。MSHookFunction功能与上面两个类似,但主要用于C/C++函数,与OC不同,它另有一套自己的实现方式,有兴趣的同学可以到其wiki上查阅。

MobileLoader的主要功能是将指定目录下的补丁文件(动态库文件)加载到指定的程序中。MobileLoader首先会将自己通过DYLD_INSERT_LIBRARIES加载到目录程序中,然后它会在/Library/MobileSubstrate/DynamicLibraries/目录下寻找需要加载的第三方补丁文件并使用dlopen加载它们。是否加载是通过一个plist文件来控制的,该文件中可以指定目标程序的bundle id等。如下图:

其中CoreFoundationVersion表示该库的版本,第一个值表示大于或等于,第二个值表示小于,具体的值见wiki。

Executables表示目标程序可执行文件的名称。Bundles表示目标程序的bundle id,Mode表示以上条件之间的逻辑关系,Any表示与运算。

SafeMode的主要功能是容错处理。第三方开发者通过MobileSubstrate向系统注入自定义代码时,如果考虑不周就可能导致终端设备处于崩溃的状态。MobileLoader会捕获这个崩溃异常,然后让设备进入SafeMode状态,在这个状态下,所有的第三方补丁都将被禁用,开发者可以比较从容的恢复设备。

MobileSubstrate是cydia实现的基础,现有的越狱开发环境一般使用的是THEOS或者iosopendev,这两者hook功能都是对MobileSubstrate API的封装。而MobileSubstrate又是基于DYLD_INSERT_LIBRARIES方式实现的,因此有些应用(如美团)为了阻止他人的破解,采用了一些措施阻止了DYLD_INSERT_LIBRARIES这种注入方式,基本原理参见链接

https://pewpewthespells.com/blog/blocking_code_injection_on_ios_and_os_x.html

方法是在应用编译时加入下图的编译参数:

参考资料:

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

2.http://www.cydiasubstrate.com/inject/darwin/

3.http://blog.timac.org/?p=761

4.https://pewpewthespells.com/blog/blocking_code_injection_on_ios_and_os_x.html

5.http://bbs.iosre.com/t/tweak-app-app-tweak/438

 



 

© 著作权归作者所有

共有 人打赏支持
上一篇: 防止Tweak
H
粉丝 3
博文 152
码字总数 77343
作品 0
海淀
私信 提问
iOS设备是否越狱的判断代码

苹果是非常看重产品的安全性的,所以给用户设计了一套复杂的安全机制。这让喜爱自由,崇尚一切开放的程序员们极度不爽,于是越狱就成了苹果和黑客们反复斗法的场所。总体来说,越狱可以让我们...

彭也没
2014/12/01
61
1
逆向第二课(Theos安装配置及Tweak工作原理)

Theos安装与配置 Theos是一个越狱开发工具包,使用它可以创建Tweak项目,动态Hook第三方程序。GitHub链接:https://github.com/theos/theos ,官网安装教程可以参考:https://github.com/theo...

LvesLi
2017/09/06
0
0
越狱iOS一点零碎知识---MobileSubstrate

MobileSubstrate实际上是一个框架,允许第三方的开发者在系统的方法里打一些运行时补丁以扩展一些方法,类似于OSX上的Application Enhancer。所以iOS系统越狱环境下安装绝大部分插件,必须首...

走向未来
2015/10/10
18
0
iOSOpenDev开发的dylib放到机器上时总是出错

如题,iOSOpenDev开发的dylib放到机器上时总是出错。打印出的log如下 SpringBoard[1235] : MS:Error: dlopen(/Library/MobileSubstrate/DynamicLibraries/libTestDy.dylib, 9): no suitable ......

evadezzx
2013/09/07
172
0
使用Reveal分析任意的界面结构

更新时间:2016.1.27 已支持直接在Cydia中下载插件Reveal Loader 来监控任意app的UI了 特别提醒,现已无需按下面的方式注入libReveal.dlib了,只需把libReveal.dylib上传到设备的/Library/Mo...

孙哲
2016/05/25
53
0

没有更多内容

加载失败,请刷新页面

加载更多

Git工作原理

git跟传统的代码管理器(如svn)不同, 主要区别在于git多了个本地仓库以及缓存区,所以即使无法联网也一样能提交代码。 术语解释: 工作区间: 即我们创建的工程文件, 在编辑器可直观显示;...

Lienson
8分钟前
1
0
MySQL驱动对应Server版本、JDK版本

昨日生产上线,临时升级MySQL版本,导致连接不上。 应用JDK版本1.5 测试环境MySQL版本5.7 驱动版本5.1.40.jar 正常 生产环境MySQL版本8.0 驱动版本5.1.40.jar 连接不上 生产环境MySQL版本8.0...

zcjlq
9分钟前
5
0
千万级规模【高性能、高并发】互联网架构经验分羹

架构以及我理解中架构的本质 在开始谈我对架构本质的理解之前,先谈谈对今天技术沙龙主题的个人见解,千万级规模的网站感觉数量级是非常大的,对这个数量级我们战略上 要重 视 它 , 战术上又...

java知识分子
10分钟前
0
0
重磅!阿里巴巴工程师获得 containerd 社区席位,与社区共建云时代容器标准

重磅!阿里巴巴工程师获得 containerd 社区席位,与社区共建云时代容器标准 11 月 29 日,CNCF containerd 社区正式宣布:两位阿里巴巴工程师正式获得 containerd 社区席位,成为 containerd...

阿里云官方博客
11分钟前
0
0
你会用哪些JavaScript循环遍历

总结JavaScript中的循环遍历 定义一个数组和对象 const arr = ['a', 'b', 'c', 'd', 'e', 'f'];const obj = { a: 1, b: 2, c: 3, d: 4} for() 经常用来遍历数组元素 遍历值为数组...

peakedness丶
12分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部