MobileSubstrate是iOS越狱开发者最为常用的工具之一,它能够在iOS系统上实现类似Windows操作系统上的hook机制。通过修改系统内核,MobileSubstrate能够截获应用程序的系统调用,并将其重定向到自定义的函数上。这样,开发者就可以在不侵入原始代码的情况下,加入额外的功能或修改应用程序的行为。
使用MobileSubstrate之前,需要先确认iOS设备已经越狱。使用MobileSubstrate开发的插件必须存放在/usr/lib/TweakInject文件夹下,并且必须以“.dylib”文件格式呈现。
接下来,我们来了解一下MobileSubstrate的使用方法。
1. 安装Theos
Theos是一个强大的iOS应用程序逆向工程工具集合,能够简化开发MobileSubstrate插件的过程。安装Theos需要使用Cydia安装命令行工具并升级系统。步骤如下:
a. 打开Cydia并选择“管理”选项卡。
b. 选择“源”管理器并点击“编辑”按钮。
c. 点击“添加”按钮并输入“https://coolstar.org/publicrepo”源地址。
d. 返回到Cydia主界面并搜索“theos”。
e. 安装“Theos”包并等待安装完成。
2. 创建MobileSubstrate插件
创建MobileSubstrate插件需要使用Theos的模板功能,仅需执行以下命令:
$NIC
可以依据提示选择模板类型和插件名称,指定输出目录,并选择iPhone指令集等选项。在插件工程目录下,可以看到Tweak.xm文件,其中包含了可用的MobileSubstrate函数hook。开发者可以在其中定义自己的函数,实现对应用程序的修改。
3. 编译并安装插件
开发完成MobileSubstrate插件后,可以使用以下命令进行编译并安装插件:
$make
$make package install
前者编译插件代码,后者将编译后的.deb文件打包同时安装在越狱设备中。
现在看一下MobileSubstrate的应用案例,以微信“防撤回”功能开发为例。具体步骤如下:
1. 在插件入口函数中载入substrate动态库。
2. 在窗口加载的时候替换系统原有的函数。针对微信,需要hook以下函数:DBCToCancelMsg, DBCCancelMsg, WCRedEnvelopesNetworkEventReceiver。
3. 针对防止撤回的情况,需要创建hook函数,并对传递的参数进行过滤和处理。以针对撤回消息的函数为例,代码如下:
%hook BaseMsgContentViewController
-(void)onDeleteMsg{
MessageData *data = self.m_data;
if(data.m_nsRealChatUsr != nil && data.m_nsRealChatUsr.length > 0){
WeChatRedEnvelop *wcRed = [self.jn objectForKey:data.m_nsRealChatUsr];
NSDictionary *msgDict = [[NSDictionary alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@/Documents/deleteMsg.plist",homePath]];
NSString *msg = [msgDict objectForKey:data.m_nsContent];
if(msg != nil){
[data setM_nsContent:msg];
[super onViewDidLoad];
return;
}
if(wcRed.isEnableRevokeAssistant){
[remoteServers DBCToCancelMsg:data completed:^(id responseObject, NSError *error){}];
}
}
%end
上述代码中,hook函数是BaseMsgContentViewController,它会在删除消息时调用。首先,我们需要获取到当前窗口的聊天对象wxid,然后检查是否启用了“防撤回”功能。如果是,我们需要调用remoteServers中的取消撤回接口,防止被撤回的消息被对方删除。最后,如果用户定义了需要替换的消息内容,我们需要将其返回。
MobileSubstrate提供了强大的hook机制,让开发者能够轻松扩展iOS应用程序的功能和行为。当然,在使用MobileSubstrate过程中,我们需要对系统进行了解和理解,以避免对系统造成不必要的影响。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/
最好的生活不过就是:一个人,安静而丰盛;两个人,温暖而踏实。