gpt4 book ai didi

ios - 在iOS 7中阻止传入的短信

转载 作者:行者123 更新时间:2023-12-01 16:42:31 25 4
gpt4 key购买 nike

我想为越狱设备编写一项调整措施,以阻止来自电话号码的消息(在iOS 7中)。首先,我使用this link中的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编写,但问题是在iOS6。如果问题是这样,您能告诉我该怎么办吗?

我还有一个问题是 loadServiceBundle方法。如您在书面代码中所见,我不完全知道应该过滤哪个捆绑包标识符。请告诉我我是否选择了正确的捆绑包标识符。

我很高兴告诉我代码中是否还有其他问题。

最佳答案

  • 我的解决方案适用于iOS 7
  • 您的捆绑包ID错误,应为com.apple.imservice.sms。我已经发布了SMS服务目录路径(/System/Library/Messages/PlugIns/SMS.imservice/)。在这里,您可以找到Info.plist,其中包含插件的捆绑包ID-com.apple.imservice.sms
  • 您迷上了错误的方法。这是IMDService -(void)loadServiceBundle,没有参数。然后,您可以使用[[self bundle] bundleIdentifier]获取捆绑包ID。另外,在挂接loadServiceBundle甚至检查包ID之前,请不要忘记调用_processReceivedMessage:的原始实现。原始实现实际上会加载该插件,因此调用它应该是您要做的第一件事。
  • 关于ios - 在iOS 7中阻止传入的短信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22989967/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com