MobileSubstrate
网络框架
MobileSubstrate实际上是一个框架,允许第三方的开发者在系统的方法里打一些运行时补丁以扩展一些方法,类似于OS X上的Application Enhancer。所以iOS系统越狱环境下安装绝大部分插件,必须首先安装MobileSubstrate。
组成部分
MobileSubstrate主要由3部分组成:MobileHooker,MobileLoader和safe mode。
组件功能
MobileHooker
MobileHooker用于替换覆盖系统的方法,这个过程被称为Hooking(挂钩)。将使用到2个API:
IMP MSHookMessage(Class class, SEL selector, IMP replacement,constchar* prefix);// prefix should be NULL.
void MSHookMessageEx(Class class, SEL selector, IMP replacement, IMP *result);
void MSHookFunction(void*function,void* replacement,void** p_original);
MSHookMessage()在Objective-C中替换implementation。[class Selector] 通过替换并返回原来的执行。挂钩一个类的方法,在MSHookemessage(EX)中调用Objc_getMetaClass得到提供的元数据和类检索,例如下面的注释。这种动态替换是Objective-C的一个功能,使用method_setImplementation。MSHookMmessage()是线程不安全的,不赞成使用,建议使用MSHookMessageEx函数。
MSHookFunction() 很像 MSHookMessage() 但是 适合于c/c++ 的函数。MSHookFunctin() 将写入指令调入指定替换函数,并且会分配一些字节在内存地址,相当于原始切出指令并且跳入原始的挂钩方法。由于iPhone系统默认的内存页不能同时写和执行,一个内核补丁必须申请MSHookFunction() 工作.
截止MobileSubstrate的最新版本,MSHookMessage() 也需要一个内核补丁调用关闭的挂钩的所有正确方法。
MobileLoader
MobileLoader加载第三方补丁代码在运行的应用程序中。
MobileLoader先加载它自己在运行的应用程序中时使用DYLD_INSERT_LIBRARIES环境变量。然后查看所有动态库在目录/Library/MobileSubstrate/DynamicLibraries/
并且 Dlopen 他们(Dlopen是供用户直接访问(存取)动态链接库的一类函数中的一个)。一个扩展将要使用构造函数代码去完成一些工作.
...
// The attribute forces this function to be called on load.
__attribute__((constructor))
staticvoid initialize(){
MSHookFunction(CFShow, replaced_CFShow, &original_CFShow);
}
safe mode
当一个扩展在SpringBoard崩溃,MobileLoader 会进入设备的安全模式捕捉并且处理。在安全模式下,所有的第三放扩展将失效。
下列信号将调用的安全模式:
SIGTRAP
SIGABRT
SIGILL
SIGBUS
SIGSEGV
SIGSYS
参考资料
MobileSubstrate.MobileSubstrate.
最新修订时间:2024-01-22 20:26
目录
概述
组成部分
组件功能
参考资料