MobileSubstrate

MobileSubstrate實際上是一個框架,允許第三方的開發者在系統的方法裡打一些運行時補丁以擴展一些方法,類似於OS X上的Application Enhancer。所以iOS系統越獄環境下安裝絕大部分外掛程式,必須首先安裝MobileSubstrate。

基本介紹

  • 中文名: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(){
NSLog(@"MyExt: Loaded");
MSHookFunction(CFShow, replaced_CFShow, &original_CFShow);
}
safe mode
當一個擴展在SpringBoard崩潰,MobileLoader 會進入設備的安全模式捕捉並且處理。在安全模式下,所有的第三放擴展將失效。
下列信號將調用的安全模式:
SIGTRAP
SIGABRT
SIGILL
SIGBUS
SIGSEGV
SIGSYS

相關詞條

熱門詞條

聯絡我們