Tweak底层实现Cydia Substrate
cydia substrate
原来叫Mobile Substrate
他是越狱后插件和软件运行的基础依赖包, 提供动态注入的功能, Logos语法底层就是通过Cydia Substrate
实现
主要由三部分组成: MobileHooker, MoblieLoader, safe mode
1. MobileHooker
用于hook方法
主要用到两个函数:
- MSHookMessageEx
主要作用于Objective-C方法
- MSHookFunction
主要作用于c/c++函数
Logos语法 %hook就是对此函数做了一层封装, 方便编写
-
MSHookMessageEx
void MSHookMessageEx(Class _class, SEL message, IMP hook, IMP *old);
demo:
NSString *(*oldDescription)(id self, SEL _cmd); // implicit self and _cmd are explicit with IMP ABI NSString *newDescription(id self, SEL _cmd) { NSString *description = (*oldDescription)(self, _cmd); description = [description stringByAppendingString:@"!"]; return description; } MSHookMessageEx( [NSObject class], @selector(description), &newDescription, &oldDescription );
-
MSHookFunction
2.1. MSGetImageByName(== dlopen的功能)
获取操作对象
2.2. MSFindSymbol (== dlsym == nlist)
获取操作对象的方法
demo:
MSImageRef image; image = MSGetImageByName("/usr/lib/libSystem.B.dylib"); void *(*palloc)(size_t); palloc = (void *(*)(size_t)) MSFindSymbol(image, "_malloc"); void *data = (*palloc)(1024); free(data);
2.3. MSHookFunction
void MSHookFunction(void *symbol, void *hook, void **old);
demo:
void *(*oldConnect)(int, const sockaddr *, socklen_t); void *newConnect( int socket, const sockaddr *address, socklen_t length ) { if (address->sa_family == AF_INET) { sockaddr_in *address_in = address; if (address_in->sin_port == htons(6667)) { sockaddr_in copy = *address_in; address_in->sin_port = htons(7001); return oldConnect(socket, ©, length); } } return oldConnect(socket, address, length); } MSHookFunction(&connect, &newConnect, &oldConnect);
-
2. MoblieLoader
- 将tweak插件注入到第三方应用程序中(动态注入: ptrace)
-
启动时MoblieLoader会根据 /Library/MobileSubstrate/DynamicLibraries/ 目录中的plist文件制定的作用范围, 有选择的在第三方进程空间里通过dlopen函数加载同名的dylib
每一个.dylib, 都有一个同名的.plist,
.plist的作用就是用来指定tweak插件的作用范围
3. safe mode 安全模式
自己制作的tweak把系统搞崩溃
可以进入到safe mode可以fix tweak造成的崩溃
- ssh到 iPhone
- 执行:
dpkg -r 插件包名(com.app.zhz)
, 命令执行后其实是删除 /Library/MobileSubstrate/DynamicLibraries/ 目录下该app的tweak
cydia无法加载,教您cydia无法加载怎么解决
在苹果用户使用iphone的时候,不少用户为了方便安装一些好用的插件而对手机进行越狱,越狱后就会出现cydia的图标,看到这个图标的时候
Cydia一直闪退
首先确定闪退的原因是不是越狱掉了,如果是的话需要重新越狱. 本次涉及的设备为ios12已越狱系统 血的教训。。。不要去下载奇奇怪怪
iphone手机越狱后cydia必装软件大全推荐
iphone越狱后cydia必装软件大全现在就来介绍几款个人觉得满实用,也觉得一定要装的软体先来看看打开 Cydia 的介面(我的已经有中文化
文章回顾
大家看了本文Tweak底层实现Cydia Substrate的精彩教程资源内容,是不是对Tweak底层实现Cydia Substrate了解更多,真心希望Tweak底层实现Cydia Substrate能帮助到你, 小编会一直给你带来更多教程资源文章信息。
本文由第三方用户分享仅代表作者观点,不代表本网站立场,秉承互联网开放分享的精神,目的在于传递更多信息,加强各行业互通交流,但对内容不作任何保证或承诺,请读者自行参考斟酌。网站发布的信息(包含但不限于版式、图片、字体、文章等素材)由第三方用户分享,版权归原作者所有,本站不承担任何相关的版权纠纷等相关责任。如您认为本篇内容侵犯了您的权益,请与我们联系,我们会及时处理。
百科塔让百科知识为更多人带来价值。
转载请注明: 本文标题:Tweak底层实现Cydia Substrate 本文地址:https://www.bktl.cn/36445.html