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

  1. //extern id allIncomingMessages;
  2. //extern int incomingMessageCount;
  3. extern NSString* const kCTSMSMessageReceivedNotification;
  4. extern NSString* const kCTSMSMessageReplaceReceivedNotification;
  5. extern NSString* const kCTSIMSupportSIMStatusNotInserted;
  6. extern NSString* const kCTSIMSupportSIMStatusReady;
  7. //typedef struct _CTCall CTCall;
  8. extern NSString *CTCallCopyAddress(void*, CTCall *);
  9. void* CTSMSMessageSend(id server,id msg);
  10. typedef struct __CTSMSMessage CTSMSMessage;
  11. NSString *CTSMSMessageCopyAddress(void *, CTSMSMessage *);
  12. NSString *CTSMSMessageCopyText(void *, CTSMSMessage *);
  13. int CTSMSMessageGetRecordIdentifier(void * msg);
  14. NSString * CTSIMSupportGetSIMStatus();
  15. NSString * CTSIMSupportCopyMobileSubscriberIdentity();
  16. id  CTSMSMessageCreate(void* unknow/*always 0*/,NSString* number,NSString* text);
  17. void * CTSMSMessageCreateReply(void* unknow/*always 0*/,void * forwardTo,NSString* text);
  18. id CTTelephonyCenterGetDefault(void);
  19. void CTTelephonyCenterAddObserver(id,id,CFNotificationCallback,NSString*,void*,int);
  20. void CTTelephonyCenterRemoveObserver(id,id,NSString*,void*);
  21. int CTSMSMessageGetUnreadCount(void);
引用
回调函数:

  1. static void callback(CFNotificationCenterRef center,void *observer,CFStringRef name,const void *object, CFDictionaryRef userInfo){
  2. //    NSLog(@"%@",name);
  3. NSString *strNotficationName=(NSString*)name;
  4. if ([strNotficationName isEqualToString:@"kCTMessageReceivedNotification"]) {
  5. int a=0;
  6. }
  7. //    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  8. @synchronized(nil) {
  9. if (!userInfo) return;
  10. if ([[(NSDictionary *)userInfo allKeys]
  11. containsObject:@"kCTMessageIdKey"]) // SMS Message
  12. {
  13. NSDictionary *info = (NSDictionary *)userInfo;
  14. CFNumberRef msgID = (CFNumberRef)[info objectForKey:@"kCTMessageTypeKey"];
  15. int result;
  16. CFNumberGetValue((CFNumberRef)msgID, kCFNumberSInt32Type, &result);
  17. Class CTTelephonyCenter=NSClassFromString(@"CTTelephonyCenter");
  18. Class CTMessageCenter = NSClassFromString(@"CTMessageCenter");
  19. id mc = [CTMessageCenter sharedMessageCenter];
  20. int count=[mc incomingMessageCount];
  21. id mcarr=[mc allIncomingMessages];
  22. //        id incMsg =[mc incomingMessageWithId:result];
  23. //        if (count==0) {
  24. //            return;
  25. //        }
  26. id incMsg = [[mc allIncomingMessages] objectAtIndex:0];
  27. int msgType = (int)[incMsg messageType];
  28. if (msgType == 1) //experimentally detected number
  29. {
  30. id phonenumber = [incMsg sender];
  31. NSString *senderNumber = (NSString *)[phonenumber canonicalFormat];
  32. id incMsgPart = [[[[incMsg items] objectAtIndex:0] retain] retain];
  33. NSData *smsData = [[[incMsgPart data] retain] retain];
  34. //            NSString *smsText = (NSString*)[[NSString alloc] initWithData:smsData encoding:NSASCIIStringEncoding] ;
  35. NSString *smsText =    [NSString stringWithUTF8String:[smsData bytes]];
  36. NSLog(@"senderNumber = %@,text =%@",senderNumber,smsText);
  37. }
  38. }
  39. }
  40. //    [pool release];
  41. }
引用
注入监听:

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

Ios拦截手机短信程序的更多相关文章

  1. Atitit. 破解  拦截 绕过 网站 手机 短信 验证码  方式 v2 attilax 总结

    Atitit. 破解  拦截 绕过 网站 手机 短信 验证码  方式 v2 attilax 总结 1. 验证码的前世今生11.1. 第一代验证码 图片验证码11.2. 第二代验证码  用户操作 ,比如 ...

  2. server宕机监控、检測、报警程序(139绑定手机短信报警)monitor_down.sh

    宕机监控报警程序 一.   需求来源 宕机对运维人员来说,最痛苦了.怎样检測一台server是否还在正常执行,假设该server宕机,怎样在第一时间监測到并通知一线运维人员进行维护,最大化降低损失. ...

  3. atitit.破解 拦截 绕过 网站 手机 短信 验证码 之自动获取手机短信方式 attilax 总结

    atitit.破解  拦截 绕过 网站 手机 短信 验证码 之自动获取手机短信方式 attilax 总结 1. 自动获取手机短信方式的原理 1 2. 调用api 1 3. ----核心代码 2 4.  ...

  4. SNF开发平台WinForm之十二-发送手机短信功能调用-金笛-SNF快速开发平台3.3-Spring.Net.Framework

    1.调用前组装参数 2.调用发送信息服务脚本   .调用前组装参数: BaseSendTaskEntity entity = new BaseSendTaskEntity(); entity.Mess ...

  5. 利用java实现的一个发送手机短信的小例子

    今天闲来无事,在微博上看到一个关于用java实现的一个发送手机短信的程序,看了看,写的不太相信,闲的没事,把他整理下来,以后可能用得着 JAVA发送手机短信,流传有几种方法:(1)使用webservi ...

  6. C#简单实现发送手机短信

    偶然想起,像编写一个从电脑向手机发送短信的程序,从网上查找到有三种方式:(1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册;(2) ...

  7. Android(java)学习笔记247:ContentProvider使用之利用ContentProvider备份和还原手机短信(掌握)

    1.通过阅读系统源码我们知道: 短信的内容提供者: content://sms/            系统短信的内容提供者的路径 2. 利用ContentProvider备份和还原手机短信: (1) ...

  8. JAVA发送手机短信

    <p><span>JAVA发送手机短信,流传有几种方法:(1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册 ...

  9. Android(java)学习笔记191:ContentProvider使用之利用ContentProvider备份和还原手机短信(掌握)

    1. 通过阅读系统源码我们知道: 短信的内容提供者: content://sms/            系统短信的内容提供者的路径 2. 利用ContentProvider备份和还原手机短信: (1 ...

随机推荐

  1. React Native学习-measure测量view的宽高值

    measure()测量是根据view标签中的ref属性,使用方法如下: measureWatermarkerImage(){ this.refs.watermarkerImage.measure((a ...

  2. 地图 ajax-数据库

    通过数据库和ajax方法写出地图 客户端部分:html.js.css代码部分: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transit ...

  3. Ubuntu 15.04 安装 Nvidia Quadro系列显卡驱动

    在这之前,我用的Ubuntu都是系统自带的驱动, 由于分辨率没有任何问题, 所以一直没有安装Nvidia官方的驱动; 近期更新到 15.04 之后, 在播放avi 格式的常规视频时却出现闪烁的现象, ...

  4. Oracle 学习笔记3:新建数据库没有scott用户解决办法

    新建一个数据库,若选择Oracle组件时,没有选择实例方案,完成后进行口令管理,默认列表中是找不到scott用户解锁的.若要解锁scott用户,可以进行如下操作: 使用system或者sys连接数据库 ...

  5. x64、x86_64、x64三者的区别

    x86是指intel的开发的一种32位指令集,从386开始时代开始的,一直沿用至今,是一种cisc指令集,所有intel早期的cpu,amd早期的cpu都支持这种指令集,ntel官方文档里面称为“IA ...

  6. Directadmin清空所有Tickets命令

    利用一条命令就快速实现了清空所有Tickets的方法,希望此例子对大家有帮助.     即可清空所有工单,包括系统提示 :> /usr/local/directadmin/data/admin/ ...

  7. PHP static静态局部变量和静态全局变量总结

    1.不会随着函数的调用和退出而发生变化,不过,尽管该变量还继续存在,但不能使用它.倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值 2.静态局部变量只会初始化一次 3.静态属 ...

  8. javascript遍历控件(实例详解)

    js遍历页面控件, 代码如下 复制代码  var inputArr = document.forms[0];   for( var i = 0; i < inputArr.length; i++ ...

  9. OC6_代理的基本概念

    // // Person.h // OC6_代理的基本概念 // // Created by zhangxueming on 15/6/24. // Copyright (c) 2015年 zhang ...

  10. C++ Strings(字符串)

    Constructors 构造函数,用于字符串初始化 Operators 操作符,用于字符串比较和赋值 append() 在字符串的末尾添加文本 assign() 为字符串赋新值 at() 按给定索引 ...