IOS 5 拦截手机短信(需越狱)

本文介绍了一种在越狱的iOS设备上实现短信拦截的方法。通过使用Objective-C语言并导入CoreTelephony.framework框架,作者成功实现了短信拦截功能。该方法涉及对特定API的调用和回调函数的设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[quote]
1.手机要越狱,没有越狱的话,下面的可以不用看了!
2.IOS 要5.0以上,4.xx的同上
首先,声明下!由于公司移动开发的项目中,需要根据手机的内容进行逻辑处理,也就是要实现手机短信拦截,由于,本人一直搞的是JAVA,对OC 语言还是比较陌生的,这段辛酸路总算熬出个苗头!由于,公司中没有人搞这个,遂只能网爬了,郁闷的发现,网上的代码几乎不能运行,在朋友的帮助下,成功的对手机短信进行了拦截!下面贴下研究的心得,由于IT眼没有OC语言标签,下面贴的OC语言用C++代替!
[/quote]
[quote]
项目首先,导入CoreTelephony.framework,OK 不需要别的包了,仅此而已!
在AppleDelegate.m中写上如下代码:

//extern id allIncomingMessages;
//extern int incomingMessageCount;

extern NSString* const kCTSMSMessageReceivedNotification;
extern NSString* const kCTSMSMessageReplaceReceivedNotification;
extern NSString* const kCTSIMSupportSIMStatusNotInserted;
extern NSString* const kCTSIMSupportSIMStatusReady;


//typedef struct _CTCall CTCall;
extern NSString *CTCallCopyAddress(void*, CTCall *);
void* CTSMSMessageSend(id server,id msg);
typedef struct __CTSMSMessage CTSMSMessage;
NSString *CTSMSMessageCopyAddress(void *, CTSMSMessage *);
NSString *CTSMSMessageCopyText(void *, CTSMSMessage *);

int CTSMSMessageGetRecordIdentifier(void * msg);
NSString * CTSIMSupportGetSIMStatus();
NSString * CTSIMSupportCopyMobileSubscriberIdentity();
id CTSMSMessageCreate(void* unknow/*always 0*/,NSString* number,NSString* text);
void * CTSMSMessageCreateReply(void* unknow/*always 0*/,void * forwardTo,NSString* text);

id CTTelephonyCenterGetDefault(void);
void CTTelephonyCenterAddObserver(id,id,CFNotificationCallback,NSString*,void*,int);
void CTTelephonyCenterRemoveObserver(id,id,NSString*,void*);
int CTSMSMessageGetUnreadCount(void);

[quote]
回调函数:

static void callback(CFNotificationCenterRef center,void *observer,CFStringRef name,const void *object, CFDictionaryRef userInfo){

// NSLog(@"%@",name);

NSString *strNotficationName=(NSString*)name;


if ([strNotficationName isEqualToString:@"kCTMessageReceivedNotification"]) {
int a=0;
}

// NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
@synchronized(nil) {
if (!userInfo) return;
if ([[(NSDictionary *)userInfo allKeys]
containsObject:@"kCTMessageIdKey"]) // SMS Message
{


NSDictionary *info = (NSDictionary *)userInfo;
CFNumberRef msgID = (CFNumberRef)[info objectForKey:@"kCTMessageTypeKey"];
int result;
CFNumberGetValue((CFNumberRef)msgID, kCFNumberSInt32Type, &result);
Class CTTelephonyCenter=NSClassFromString(@"CTTelephonyCenter");

Class CTMessageCenter = NSClassFromString(@"CTMessageCenter");
id mc = [CTMessageCenter sharedMessageCenter];
int count=[mc incomingMessageCount];
id mcarr=[mc allIncomingMessages];
// id incMsg =[mc incomingMessageWithId:result];
// if (count==0) {
// return;
// }
id incMsg = [[mc allIncomingMessages] objectAtIndex:0];

int msgType = (int)[incMsg messageType];

if (msgType == 1) //experimentally detected number
{
id phonenumber = [incMsg sender];

NSString *senderNumber = (NSString *)[phonenumber canonicalFormat];
id incMsgPart = [[[[incMsg items] objectAtIndex:0] retain] retain];
NSData *smsData = [[[incMsgPart data] retain] retain];
// NSString *smsText = (NSString*)[[NSString alloc] initWithData:smsData encoding:NSASCIIStringEncoding] ;
NSString *smsText = [NSString stringWithUTF8String:[smsData bytes]];

NSLog(@"senderNumber = %@,text =%@",senderNumber,smsText);
}

}

}

// [pool release];



}

[quote]
注入监听:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
id ct = CTTelephonyCenterGetDefault();
CTTelephonyCenterAddObserver(ct, NULL, callback, NULL, NULL, CFNotificationSuspensionBehaviorDrop);
}

[/quote]
[/quote]
[/quote]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值