首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阻止iOS 7中的短信输入

阻止iOS 7中的短信输入
EN

Stack Overflow用户
提问于 2014-04-10 13:49:11
回答 1查看 1.2K关注 0票数 2

我想为那些阻止来自电话号码的消息的越狱设备(在iOS 7中)编写一个调整。首先,我在this link中使用了creker的第二个答案来编写修改。这是我的代码:

代码语言:javascript
复制
#import <substrate.h>
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <libkern/OSAtomic.h>
#import "CTMessage.h"
#import "CTMessageCenter.h"

id(*_processReceivedMessage_orig)(id, SEL, CTMessage*) = NULL;
id _processReceivedMessage_hooked(id self, SEL _cmd, CTMessage* msg);
%hook IMDService
-(void)loadServiceBundle:(NSBundle*)bundle
{    
    if ([[bundle bundleIdentifier] isEqualToString:@"com.apple.SMSPlugin"] && [bundle isLoaded]) // not sure if the bundle identifier is correct!
    {  
        MSHookMessageEx(objc_getClass("SMSServiceSession"),
                        @selector(_processReceivedMessage:),
                        (IMP)_processReceivedMessage_hooked,
                        (IMP*)&_processReceivedMessage_orig);
    }
}
%end

id _processReceivedMessage_hooked(id self, SEL _cmd, CTMessage* msg)
{
    NSObject<CTMessageAddress>* phonenumber = [msg sender];
    NSString *senderNumber = (NSString*) [phonenumber canonicalFormat]; // sender number

    if ([senderNumber isEqualToString:@"+012345678910"])
        [[CTMessageCenter sharedMessageCenter] acknowledgeIncomingMessageWithId:[msg messageId]];
    else
         return _processReceivedMessage_orig(self, _cmd, msg);
}

还有我的卷宗:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Filter</key>
    <dict>
        <key>Bundles</key>
        <array>
            <string>com.apple.imagent</string>
        </array>
    </dict>
</dict>
</plist>

主要的问题是loadServiceBundle永远不会上钩,我的函数也不会被调用!如果我在iPhone上安装了微调,当手机收到短信并发出消息警报时,不会发生任何事情。我自己认为问题是我在为iOS 7写作,但问题是iOS 6。如果问题是这样的,你能告诉我该怎么做吗?

我遇到的另一个问题是loadServiceBundle方法。正如您在编写的代码中所看到的,我不知道应该筛选哪个包标识符。如果我选择了正确的包标识符,请告诉我。

如果我的代码中还有其他问题,我很乐意告诉我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-10 19:26:42

  1. 我的解决方案适用于iOS 7
  2. 您的包id是错误的,应该是com.apple.imservice.sms。我已经张贴短信服务目录路径(/System/Library/Messages/PlugIns/SMS.imservice/)。在这里,您可以找到Info.plist,它包含插件- com.apple.imservice.sms的包id。
  3. 你搞错方法了。这是IMDService -(void)loadServiceBundle,没有争论。然后,您可以使用[[self bundle] bundleIdentifier]获得包id。此外,不要忘记在挂起loadServiceBundle或甚至检查包id之前调用_processReceivedMessage:的原始实现。最初的实现实际上是加载插件,所以调用它应该是您做的第一件事。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22989967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档