Блокировка входящих смс в ios 7
Я хочу написать твик для взломанных устройств, который блокирует сообщения с номера телефона (в iOS 7). Сначала я использовал второй ответ Creker в этой ссылке для написания твика. Вот мой код:
#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);
}
и мой файл plist:
<?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
метод. Как вы можете видеть из написанного кода, я точно не знаю, какой идентификатор пакета следует отфильтровать. Пожалуйста, скажите мне, если я выбрал правильный идентификатор пакета.
Я был бы рад сообщить мне, если у меня есть какие-либо другие проблемы в моем коде.
Благодарю.
1 ответ
- Мое решение работает на iOS 7
- Ваш идентификатор пакета неверен, он должен быть
com.apple.imservice.sms
, Я опубликовал путь к каталогу службы SMS (/System/Library/Messages/PlugIns/SMS.imservice/
). Там вы можете найтиInfo.plist
который содержит идентификатор пакета плагина -com.apple.imservice.sms
, - Вы подключаете неправильный метод. Это
IMDService -(void)loadServiceBundle
без аргументов. Тогда вы можете использовать[[self bundle] bundleIdentifier]
чтобы получить идентификатор пакета. Также не забудьте назвать оригинальную реализациюloadServiceBundle
прежде чем вы зацепите_processReceivedMessage:
или даже проверить идентификатор пакета. Исходная реализация фактически загружает плагин, поэтому первым делом нужно вызвать его.