• 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

  • 相关阅读:
    阿里Java开发规约【摘录】
    JavaWeb【八、JSP指令与动作元素】
    JavaWeb【七、JSP状态管理】
    JavaWeb【六、JavaBean】
    JavaWeb【五、内置对象】
    JavaWeb【四、JSP基础语法】
    JavaWeb【三、Web程序编写】
    JavaWeb【二、Tomcat安装】
    Django 模板层
    Django auth模块
  • 原文地址:https://www.cnblogs.com/ligun123/p/2304530.html
Copyright © 2020-2023  润新知