您的位置:首页 > 移动开发 > IOS开发

Ios拦截手机短信程序

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

C++代码



//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);

引用
回调函数:

C++代码



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];

}

引用
注入监听:

C++代码



- (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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: