引用
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. Shell学习笔记 - 条件判断式

    1. 判断格式 1) test 参数 文件 例: test -e /root/install.log 2) [ 参数 文件 ]  -- 推荐使用 例: [ -e /root/install.log ] ...

  2. [转]Android 应用的自动升级、更新模块的实现

    本文转自:http://www.oschina.net/question/163910_28462 我们看到很多Android应用都具有自动更新功能,用户一键就可以完成软件的升级更新.得益于Andro ...

  3. GSS7 spoj 6779. Can you answer these queries VII 树链剖分+线段树

    GSS7Can you answer these queries VII 给出一棵树,树的节点有权值,有两种操作: 1.询问节点x,y的路径上最大子段和,可以为空 2.把节点x,y的路径上所有节点的权 ...

  4. SQL跨服务器操作语句

    --简单的跨服务器查询语句 select * from opendatasource('SQLOLEDB', 'Data Source=192.168.0.1;User ID=sa;Password= ...

  5. HTML_创建易用的Web表单

    首先创建一个表单域集合fieldset fieldset元素允许Web开发者将主题相关的表单组合在一起 <fieldset></fieldset> 要说明的是本例子中每个表单都 ...

  6. ASP.NET MVC 教程

    http://msdn.microsoft.com/zh-cn/dd327597.aspx

  7. 安装包安装服务,点修复出现的错误”Error 1001:指定的服务已存在“ 解决办法

    安装项目下,右键视图->自定义操作,出现安装.提交.回滚.卸载四个文件夹,右键安装,添加自定义操作,选择安装的服务为输出文件 右键安装输出文件->在condition->Not (I ...

  8. JQuery 动态添加onclick事件

    $('#div_id').click(function(){ show(1,2,this); });

  9. 通信行业OSS支撑系统软件研发思考

    一般的,对所谓大型.通信行业.OSS支撑软件系统,我们可宏观定义以下几点: 以年计的研发周期 以几十人计的研发团队 以百计的业务菜单功能点 以千计的数据库表 以万计的业务术语指标 以亿计的数据表记录 ...

  10. Java 字符流实现文件读写操作(FileReader-FileWriter)

    Java 字符流实现文件读写操作(FileReader-FileWriter) 备注:字符流效率高,但是没有字节流底层 字节流地址:http://pengyan5945.iteye.com/blog/ ...