iphone4 短信截获

所谓的短信截获,可以被法度提前接管到,经过过滤以及响应的处理惩罚,然后发送到手机的收件箱中。

 

ios3上的短信截获经由过程可以经由过程一些私有的api即可完成,网上的教程也较多,这里不在反复。

 

前段时候在调研的ios4上的短信截获,在网上也很难找到响应的,较完全的材料,正好前段时候进修了hook,

 

故周末抽了点时候应用hook从头调研了下,这里做个记录,以防止后期遗忘.


测试景象: iphone4 ios4.3.2 已逃狱

 

1. 搭建hook demo开辟景象,可以参照我的另一篇文章,这里不再反复。对接管短信的函数进行hook,并进行响应处理惩罚与过滤,在经由过程到手机上。

 

2. class-dump SMSCTServer.framework, ChatKit.framework, CoreTelephony.framework等framework

 

此中SMSCTServer.framework中首要包含一些短信发送与接管相干的Api, ChatKit较错杂,此中CKSMSService.h包含很多响应的操纵,

 

例如markAllMessagesInConversationAsRead则是当第一次浏览短信时设置标记位为浏览状况。

 

CoreTelephony.framework已在ios4上方开放,然则依然有很多的私有api没有被apple开放出来,须要本身测试。

 

将上方三个库倒出来的头文件参加XCode的编译搜刮路径傍边,当应用某个类的时辰,就可以直接进行#import,此时当然会碰到一些编译错误,

 

此时须要推敲相对路径与绝对路径,对framework内部的一些#import进行处理惩罚。不过益处在于只有你#import某个头文件时,才会去搜检这个

 

头文件内部的语法布局,这就不须要去手动处理惩罚所有的framework中的头文件。

 

3. 景象都搭建好了,接下来就须要去查询可能涉及到的函数,并对其进行hook。

 

在这里我推荐应用号令grep进行查询,例如查找sendMessage函数,应用grep sendMessage . -r就可以列出所有的包含有这个单词的相干内容。

 

便于高效快速的去获取到须要的信息。

 

4. 经由过程第3步,信赖会对一些函数的感化产生思疑,这个函数到底是不是接管短信的api呢?验证真谛最好的办法就是测试。对这些函数进行hook,

 

并在此中加上一些打印,便可以实验出这些函数的可能功能。

 

5. 最后得出当接管短信时,因为framework中的函数浩繁,我只是hook了项目组值得思疑的函数。

 

- (void)_processReceivedMessageWithInfo:(struct __CFDictionary *)arg1;

 

- (void)_ingestIncomingCTMessage:(id)arg1;

 

- (void)_receivedMessage:(struct __CKSMSRecord *)arg1 replace:(BOOL)arg2; 

 

当短信到来时,会至上而下的履行这些函数。在_ingestIncomingCTMessage可以对短信是否发送到手机长进行把握。若是在_processReceivedMessageWithInfo

 

函数中进行过滤的话,短信在当前确切不会到来,然则重启手机之后,短信其实已经达到收件箱了,只是没有收到通知罢了,显然我们想要的不仅仅这么多。

 

hook的代码如下:

 


extern "C" void replaced_SMSCTServer_ingestIncomingCTMessage(SMSCTServer *self, SEL cmd, id arg1)

{
NSLog(@"--------------------------------replaced_SMSCTServer_ingestIncomingCTMessage enter, arg1 =%@", arg1);


NSLog(@"===================replaced_SMSCTServer_ingestIncomingCTMessage==============NSStringFromClass([arg1 class]) = %@", NSStringFromClass([arg1 class]));

CTMessage *message = (CTMessage *)arg1;

CTPhoneNumber *sender = (CTPhoneNumber *)message.sender;
NSString *digits = sender.digits; // 德律风号码
NSString *countryCode = sender.countryCode;
NSDate *date = message.date;

NSArray *items = message.items;

for(CTMessagePart *part in items)
{
NSData *data = part.data;
NSLog(@"=====================data = %@", data);
// NSLog(@"====================smsData = %@", [CTMmsEncoder decodeMessageFromData:data]);

}

NSLog(@"=============countryCode = %@, digits = %@, date = %@", countryCode, digits, date);
NSLog(@"-----------------------------message = %@, sender = %@", message, sender);

// 在此处可以进行短信的成功截获,哄骗arg1包含的一些短信信息确认是否应当接管该信息
if([@"1065583393" isEqualToString:digits])
{
NSLog(@"---------------------------------------------不容许接管该德律风号码的短信.");

   // 对新短信的到来赐与提示

  UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"垃圾短信(%@)", digits] message:[NSString stringWithFormat:@"短信发送日期:%@", date] delegate:self cancelButtonTitle:@"断定" otherButtonTitles:nil, nil];
  [alertView show];
  [alertView release];

        return;

}

original_SMSCTServer_ingestIncomingCTMessage(self, cmd, arg1);
}

 

  这这个处所进行一些短信内容的解析工作,如上,1065583393这个号码进行骚扰我,每隔一两天就给我发垃圾短信,如此的话,这个号码再也不会给我发送短信啦。这里的号码就相当于黑名单,可以经由过程法度进行设置,然后在这里获取响应的号码,并进行过滤。

 

代码中的UIAlertView会对不筹算接管的垃圾短信的到来进行提示,然则不会去接管。(只是一个测试,别太介怀)

 

参数arg1是CTMessage类型的,包含短信的发送号码,日期,内容等等信息。不过在我应用CTMmsEncoder去对短信内容进行解析时辰,提示该类不存在,然则哪个NSData应当就是短信内容的data,对于每条短信的长短NSData的数据长短也不一致。


例如SMSCTServer 的playMessageSent会对发送短信成功的一些提示音进行把握, 不授与返回的话,短信发送出去也不会呈现声音

 


// 把握短信发送完成播放声音

extern "C" void replaced_SMSCTServer_playMessageSent(SMSCTServer *self, SEL cmd)
{
NSLog(@"--------------------------------replaced_SMSCTServer_playMessageSent enter ");

original_SMSCTServer_playMessageSent(self, cmd);
}



hook确切可以完成很多强大的功能,私有api,framework,hook,水够深呀!

 

临时先做这些吧,等有时候的时辰,把每次收到短信,那暴力的提示框给干掉,世界平静了!

http://www.byywee.com/page/M0/S612/612185.html

转载于:https://www.cnblogs.com/ligun123/archive/2011/12/28/2304530.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hql取满足条件最新一条记录_MySql 之一条查询sql的执行过程

每当我把一条查询sql语句写完了,并且执行完得到想要的结果。这时我就在想为什么我写这样的一条sql语句,就能给我查询出我想要的结果,为什么我写了update就能更新一条语句?它们的执行过程是什么样的?它们的原理是什么&a…

高糊马赛克秒变高清,表情帝:这还是我吗?

全世界有3.14 % 的人已经关注了爆炸吧知识来源:机器之心参与:魔王、杜伟有了这个工具,我们终于能够看到马赛克下的那张脸了。给出一张高糊人脸照片,你能用它做什么?杜克大学近期的一项研究可以将高糊人脸照片转换成清晰…

diy计算机组装注意事项,自己组装电脑要注意什么?DIY老司机教你装机注意事项...

相比品牌机,组装电脑的优势在于个性化的DIY硬件定制,让玩家可以自由选择适合自己的配置,可以说可玩度非常高。如今,电脑硬件设计已经十分人性化,网上还有很多直播教程,用视频的方式直观地教大家装机&#x…

Dapr + .NET Core实战(三)状态管理

状态管理解决了什么分布式应用程序中的状态可能很有挑战性。例如:应用程序可能需要不同类型的数据存储。访问和更新数据可能需要不同的一致性级别。多个用户可以同时更新数据,这需要解决冲突。服务必须重试 与数据存储交互 时发生的任何短期暂时性错误。…

Apache 2.0性能优化—MPM的选择与配置

Apache 2.0性能优化—MPM的选择与配置谈到Apache,大多数系统管理员对其稳定版1.3印象颇深。虽然Apache 2.0的系列开发版早已由Alpha、Beta发展到现在的GA(General Availability)版,但是一些人潜意识里还认为开发版并非可用于生产环…

emeditor正则表达式_掌握EmEditor正则表达式语法,大大提升工作效率

缙哥哥非常懒,当遇到重复的事情时,就喜欢通过批量处理来解决,而文本用的是 EmEditor 程序,EmEditor 正则表达式语言基于 Perl 正则表达式语法,所以通过掌握EmEditor正则表达式语法,大大提升工作效率。文字所…

Building JavaScript Games for Phones Tablets and Desktop(3)-创造一个游戏世界

2019独角兽企业重金招聘Python工程师标准>>> 创造一个游戏世界 这章教会你如何通过内存中储存的信息创造一个游戏世界。介绍了基本类型和变量并且这些变量是如何储存和改变信息的。接下来,你会看到如何用对象储存更复杂的信息,里面包含成员变…

IE6.0、IE7.0 、FireFox 在样式中的不同写法.doc

IE6.0、IE7.0 、FireFox 在样式中的不同写法 2009年3月26日 15:44:27 发布:hugo 或许你一直在抱怨为什么要专门为IE和FF写不同的CSS,为什么IE这样让人头疼,然后一边写css,一边咒骂那个可恶的M$ IE。其实对于css的标准支持方面,IE并…

我女朋友让我删前任,我明明删了她还是要分手...

1 人家都已经删了你还有什么不满意???▼2 高跟鞋翻车现场▼3 渣男总能渣出新花样▼4 现在的小朋友懂得也太多了吧!▼5 耍帅不可怕,谁失败谁尴尬▼6 朋友,你清醒一点!那个小手是鼠标&#…

计算机专业的双证在职研究生,计算机类在职研究生最终能获得双证吗难度是不是很大呢...

在职读研其实优势真的很多,不然也不会每年都有那么多在职者不辞工作的辛苦还有坚持报考,毕竟凭借这份经历可以学习到高端的知识,可以帮助学员提高相应的专业能力,而最终证书的获取也能相应地提升职员在职场的地位。那么&#xff0…

你知道哪些开源基金会?

从 RMS 创立 FSF 发起自由软件运动,再到 OSI 成立并明确开源软件定义,这种崇尚开放协作的软件开发模式迅速席卷全球。除 FSF 与 OSI 外,还陆续诞生了许多致力于推广和发展开源的基金会。开源基金会对于开源软件和开源社区的组织、发展、协同创…

软件项目送上门来了,还要学会说不,接了项目拿了定金噩梦才刚刚开始

今年前前后后也遇到了不少软件项目,想来想去还是拒绝了其中的大部分项目,当然也有一部分是客户拒绝我的,把这些经验教训分享给大家,一起探讨探讨,接了项目很容易深陷泥潭,累得死去活来不值得。拒绝软件项目…

bpmn如何查看代码 idea_提高程序员效率的IDEA插件推荐(五大神器)

1. SequenceDiagramSequenceDiagram 可以根据代码调用链路自动生成时序图,超级赞,超级推荐!这对研究源码,梳理工作中的业务代码有极大的帮助,堪称神器。安装完成后,在某个类的某个函数中,右键 -…

(笔记)堆和栈的区别-两种不同的数据结构

堆栈其实是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。 要点:堆:顺序随意. 栈:后进先出(Last-In/First-Out) 堆和栈的区别 一、预备知识—程序的内存分配一个由C/C编…

.net post提交后接收返回数据_Ajax提交表单的方式

和提交普通表单一样发送数据浏览器端代码$使用开发者工具查看请求体https://cdn.jsdelivr.net/gh/zhangfu1111/Blogimagemanager/images/springboot20200712150040.pngcontroller代码ResponseBody整个请求体是一个JSON数据浏览器端代码$使用开发者工具查看请求体![](https://cd…

javascript高程3 学习笔记(三)

执行环境 执行环境是什么? javascript的解释器每次开始执行一个函数时,都会为每个函数创建一个执行环境(execution context)。执行环境定义了变量或者函数有权访问的其他数据,决定了他们各自的行为。与执行环境相关的变…

一张纸还能上天能救命?理工男宁愿放弃NASA百万年薪,也要回家折纸?!

全世界有3.14 % 的人已经关注了爆炸吧知识一张纸能做什么?小时候,它可能默默记录着你天马行空的想象力:而到了艺术家手中,它们就会变幻成各种各样精妙绝伦的艺术品:可当一双文艺的手,遇上一颗聪明无比的“理…

【干货】单日10亿GMV的.NET5电商平台,是如何设计的?

自京东和唯品会转了Java,.NET就一直缺乏高并发电商案例,.NET5能做高并发电商吗?必须的,别停留在.NET Framework的旧印象了!这里为大家分享一家上市公司的项目案例,纯.NET5电商平台,轻松承接双11…

如何发送html email,如何发送HTML电子邮件?

我已经使用JMS在Web应用程序中成功发送了电子邮件,但是结果仅以纯文本显示。我希望内容能够显示html。我该怎么做?这大致就是我所拥有的:Message msg new MimeMessage(mailSession);try{msg.setSubject("Test Notification");msg.…

通过 Lotus Domino Java 代理消费 Web 服务

Web 服务是一种允许两台或更多的计算机在网络中交互的系统设计。这种服务的主要优点是,它是在多台不同操作系统的计算机和应用服务器之间发送对象的标准解决方法。例如,我们的公司使用 Web 服务从一台运行 Microsoft .NET Framework 的计算机向基于 IBM …