阻止在ios中发送短信7

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

#import  #import  #import  #import  #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* 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); } 

和我的plist文件:

     Filter  Bundles  com.apple.imagent     

主要的问题是loadServiceBundle永远不会被钩住,我的函数永远不会被调用! 如果我在iPhone上安装调整,当移动设备有传入的短信和消息警报时,没有任何反应。 我自己认为问题是我正在为iOS 7编写,但问题是适用于iOS 6.如果问题是这样,你能告诉我该怎么办?

我的另一个问题是loadServiceBundle方法。 正如您在书面代码中看到的那样,我并不确切知道应该过滤哪个包标识符。 如果我选择了正确的捆绑标识符,请告诉我。

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

谢谢。

  1. 我的解决方案适用于iOS 7
  2. 您的包ID错误,应该是com.apple.imservice.sms 。 我发布了短信服务目录路径( /System/Library/Messages/PlugIns/SMS.imservice/ )。 在那里你可以找到Info.plist ,其中包含插件的包ID – com.apple.imservice.sms
  3. 你正在挂错方法。 这是IMDService -(void)loadServiceBundle ,没有参数。 然后你可以使用[[self bundle] bundleIdentifier]来获取bundle id。 另外,在挂钩_processReceivedMessage:之前,不要忘记调用loadServiceBundle原始实现_processReceivedMessage:甚至检查bundle id。 原始实现实际上加载了插件,所以调用它应该是你做的第一件事。