引用
1.手机要越狱,没有越狱的话,下面的可以不用看了!
class="Apple-converted-space">  2.IOS 要5.0以上,4.xx的同上  首先,声明下!由于公司移动开发的项目中,需要根据手机的内容进行逻辑处理,也就是要实现手机短信拦截,由于,本人一直搞的是JAVA,对OC 语言还是比较陌生的,这段辛酸路总算熬出个苗头!由于,公司中没有人搞这个,遂只能网爬了,郁闷的发现,网上的代码几乎不能运行,在朋友的帮助下,成功的对手机短信进行了拦截!下面贴下研究的心得,由于IT眼没有OC语言标签,下面贴的OC语言用C++代替! 
引用
项目首先,导入CoreTelephony.framework,OK 不需要别的包了,仅此而已!
  在AppleDelegate.m中写上如下代码: 
C++代码
   
-   
- extern NSString* const kCTSMSMessageReceivedNotification;  
- extern NSString* const kCTSMSMessageReplaceReceivedNotification;  
- extern NSString* const kCTSIMSupportSIMStatusNotInserted;  
- extern NSString* const kCTSIMSupportSIMStatusReady;  
-   
-   
- 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
- void * CTSMSMessageCreateReply(void* unknow
-   
- 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){  
-       
-      
-     NSString *strNotficationName=(NSString*)name;  
-       
-       
-     if ([strNotficationName isEqualToString:@"kCTMessageReceivedNotification"]) {  
-         int a=0;      
-     }  
-       
-      @synchronized(nil) {  
-         if (!userInfo) return;  
-         if ([[(NSDictionary *)userInfo allKeys]  
-              containsObject:@"kCTMessageIdKey"]) 
-         {  
-   
-               
-             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 allIncomingMessages] objectAtIndex:0];  
-               
-             int msgType = (int)[incMsg messageType];  
-               
-             if (msgType == 1) 
-             {  
-                 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 stringWithUTF8String:[smsData bytes]];  
-   
-                 NSLog(@"senderNumber = %@,text =%@",senderNumber,smsText);  
-             }  
-           
-         }  
-           
-     }  
-   
-       
-       
-   
- }  
引用
注入
监听:
 
C++代码
   
- - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
- {  
-     self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];  
-     
-     self.window.backgroundColor = [UIColor whiteColor];  
-     [self.window makeKeyAndVisible];  
-     id ct = CTTelephonyCenterGetDefault();   
-     CTTelephonyCenterAddObserver(ct, NULL, callback, NULL, NULL, CFNotificationSuspensionBehaviorDrop);  
- }