基于电信定制机,关于Android中彩信信息采集的一些想法

首先必须说明的,之前做的Android彩信信息的采集,是基于电信手机的,其日志的输出已经被定制修改过(测试手机为三星I901、I902)。


第一,读取Android日志,注意的问题是:
1.权限问题;
2.设置为后台线程服务;
3.挑选有用的日志信息,这就需要熟悉Android中Logcat的一些命令与场景,如 logcat -v time -b radio:显示时间及只记录无线类信息。

while(true)
    {
    try 
    {
    osw = new OutputStreamWriter(fos);
        bw = new BufferedWriter(osw);
       
    Process logPro = Runtime.getRuntime().exec("logcat -v time -b radio");
    BufferedReader reader = new BufferedReader(new InputStreamReader(logPro.getInputStream()), 1024);
   
    String line;
   
   
    while(true)
    {
    line = reader.readLine();
   
    if(line != null)
    {
   
    }
    }
    }
    catch (Exception e)
    {
// TODO: handle exception
}

   }


ps:上述设计在异常出现时会有”多线程“的情况出现,这个代价所带有的好处是,日志信息的完整记录。


   

    一般,彩信中心发出(MT),即彩信信息接收流程,设计的两个点是:首先发送短信通知接收方,短信携带内容下载地址;接收方通过WAP网取得彩信内容(没3G或GPRS上网业务的手机不可下载。开WiFi是下载不了的!详情请对比WAP网与互联网的区别。)如下,

1) 首先,当彩信中心需要向手机发送彩信时,会将彩信内容保存到自己的存储器中,并且准备一个URI,通过这个URI,手机能够读取到存储器中的彩信的内容;

2) 彩信中心会向手机发起一个m-notification-ind指示消息(SMS,即短信);

3) 手机收到这个指示消息后,便会向根据m-notification-ind指示消息中的URI(在Content-Location参数中指示),向彩信发服务器发起一个HTTP GET(或WSP GET,从跟踪到的消息来看,就是HTTP GET的格式)请求,来获取彩信的内容;

4) 彩信服务器会应答HTTP/WSP GET请求,返回内容,内容的格式是:application/vnd.wap.mms-message,X-Mms-Message-Type头域的值是m-retrieve-conf,以通知手机,这是彩信的内容。


彩信中心接收(MO),即彩信信息发送流程,WAP PUSH的方式 ,中心接收完成发回相关信令。

   


   电信定制机下能采集的信息可以说是十分有限的,但还是可以检测和区分出来,否则还真的做不下去了。
   
    测试彩信,在adb logcat -v time -b radio 命令下,Logcat日志中采集到的信息输出为,
发送如下:    
08-08 22:50:51.625 D/RILC    ( 2378): Inside responseCdmaSms
08-08 22:50:51.628 D/RILC    ( 2378): [UNSL]< UNSOL_NEW_CDMA_SMS {uTeleserviceID=65002, bIsServicePresent=0, uServicecategory=0,            sAddress.digit_mode=0, sAddress.number_mode=0, sAddress.number_type=0, }
08-08 22:50:51.628 D/RILC    ( 2378): [UNSL]< UNSOL_NEW_CDMA_SMS {uTeleserviceID=65002, bIsServicePresent=0, uServicecategory=0,            sAddress.digit_mode=0, sAddress.number_mode=0, sAddress.number_type=0, }
08-08 22:50:51.640 D/RILC    ( 2378): sendUnsolicitedResponses: multi client index=0, fd=18
08-08 22:50:51.640 D/RILC    ( 2378): [UNSL]< UNSOL_NEW_CDMA_SMS {uTeleserviceID=65002, bIsServicePresent=0, uServicecategory=0,            sAddress.digit_mode=0, sAddress.number_mode=0, sAddress.number_type=0, }
08-08 22:50:51.652 D/RILJ    ( 2586): [UNSL]< UNSOL_RESPONSE_CDMA_NEW_SMS
08-08 22:50:51.671 D/SMS     ( 2586): decode(byte) dump data -----------------------------------------------
08-08 22:50:51.765 D/SMS     ( 2586): 
08-08 22:50:51.765 D/SMS     ( 2586): 0x00000000 00 03 17 31 20 03 06 12 08 08 22 50 33 01 69 03 ...1......"P3.i.
08-08 22:50:51.765 D/SMS     ( 2586): 0x00000010 38 00 03 17 1C 50 01 60 02 F0 00 08 01 1F 80 5C 8....P.`.......\
08-08 22:50:51.765 D/SMS     ( 2586): 0x00000020 26 28 31 23 0B 83 83 63 4B 1B 0B A3 4B 7B 71 7B &(1#...cK...K{q{
08-08 22:50:51.765 D/SMS     ( 2586): 0x00000030 B3 73 21 73 BB 0B 81 73 6B 6B 99 6B 6B 2B 9B 9B .s!s...skk.kk+..
08-08 22:50:51.765 D/SMS     ( 2586): 0x00000040 0B 3B 28 05 A4 3D 7C 24 64 34 6C 84 28 22 81 13 .;(..=|$d4l.("..
08-08 22:50:51.765 D/SMS     ( 2586): 0x00000050 E4 F4 59 81 C1 81 C1 91 91 A1 C9 A9 81 81 A1 91 ..Y.............
08-08 22:50:51.765 D/SMS     ( 2586): 0x00000060 81 81 89 81 89 99 89 A8 04 AC 0C B9 89 99 B9 89 ................
08-08 22:50:51.765 D/SMS     ( 2586): 0x00000070 C9 A1 A9 C1 89 89 A0 00                         ........
08-08 22:50:51.765 D/SMS     ( 2586): userData.numFields = 103, userData.payload.length = 104, copyLen = 103
08-08 22:50:51.765 D/SMS     ( 2586): userData.numFields = 103, userData.payload.length = 104, copyLen = 103
08-08 22:50:51.773 E/SMS     ( 2586): decodeUserDataPayload payloadSkip decode failed: com.android.internal.util.BitwiseInputStream$AccessException:BitwiseInputStream access failed: illegal read (pos 819, end 824, bits 8)
08-08 22:50:51.773 D/CDMA    ( 2586): SMS SC timestamp: 1344466233000
08-08 22:50:51.781 D/CDMA    ( 2586): processCdmaWapPdu pdu dump
08-08 22:50:51.823 D/CDMA    ( 2586): 
08-08 22:50:51.823 D/CDMA    ( 2586): 0x00000000 00 00 62 E3 8A 00 2C 00 5E 00 01 00 23 F0 0B 84 ..b...,.^...#...
08-08 22:50:51.823 D/CDMA    ( 2586): 0x00000010 C5 06 24 61 70 70 6C 69 63 61 74 69 6F 6E 2F 76 ..$application/v
08-08 22:50:51.823 D/CDMA    ( 2586): 0x00000020 6E 64 2E 77 61 70 2E 6D 6D 73 2D 6D 65 73 73 61 nd.wap.mms-messa
08-08 22:50:51.823 D/CDMA    ( 2586): 0x00000030 67 65 00 B4 87 AF 84 8C 86 8D 90 85 04 50 22 7C ge...........P"|
08-08 22:50:51.823 D/CDMA    ( 2586): 0x00000040 9E 8B 30 38 30 38 32 32 34 39 35 30 30 34 32 30 ..08082249500420
08-08 22:50:51.823 D/CDMA    ( 2586): 0x00000050 30 31 30 31 33 31 35 00 95 81 97 31 33 37 31 39 0101315....13719
08-08 22:50:51.823 D/CDMA    ( 2586): 0x00000060 34 35 38 31 31 34 00                            458114.
08-08 22:50:51.823 I/CDMA    ( 2586): Received WAP PDU. Type = 0, originator = 10659821, ID = 58250, segment# = 0/1
08-08 22:50:51.827 I/CDMA    ( 2586): Received WAP PDU. Type = 0, originator = 10659821, src-port = 9200, dst-port = 2948, ID = 58250, segment# = 0/1
08-08 22:50:51.874 D/RILJ    ( 2586): [0223]> RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE true 0
08-08 22:50:51.874 D/RILC    ( 2378): [0223]> CDMA_SMS_ACKNOWLEDGE (uErrorClass=0, uTLStatus=0, )
08-08 22:50:51.874 D/RILC    ( 2378): [0223]< CDMA_SMS_ACKNOWLEDGE
08-08 22:50:51.874 D/RILJ    ( 2586): [0223]< RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE


接受如下:
08-07 09:03:52.015 D/RILC    ( 2377): Inside responseCdmaSms
08-07 09:03:52.015 D/RILC    ( 2377): [UNSL]< UNSOL_NEW_CDMA_SMS {uTeleserviceID=65002, bIsServicePresent=0, uServicecategory=0,            sAddress.digit_mode=0, sAddress.number_mode=0, sAddress.number_type=0, }
08-07 09:03:52.015 D/RILC    ( 2377): sendUnsolicitedResponses: multi client index=0, fd=18
08-07 09:03:52.015 D/RILC    ( 2377): [UNSL]< UNSOL_NEW_CDMA_SMS {uTeleserviceID=65002, bIsServicePresent=0, uServicecategory=0,            sAddress.digit_mode=0, sAddress.number_mode=0, sAddress.number_type=0, }
08-07 09:03:52.015 D/RILC    ( 2377): sendUnsolicitedResponses: multi client index=1, fd=26
08-07 09:03:52.015 D/RILC    ( 2377): [UNSL]< UNSOL_NEW_CDMA_SMS {uTeleserviceID=65002, bIsServicePresent=0, uServicecategory=0,            sAddress.digit_mode=0, sAddress.number_mode=0, sAddress.number_type=0, }
08-07 09:03:52.015 D/RILC    ( 2377): sendUnsolicitedResponses: multi client index=2, fd=27
08-07 09:03:52.015 D/RILC    ( 2377): [UNSL]< UNSOL_NEW_CDMA_SMS {uTeleserviceID=65002, bIsServicePresent=0, uServicecategory=0,            sAddress.digit_mode=0, sAddress.number_mode=0, sAddress.number_type=0, }
08-07 09:03:52.019 D/RILJ    ( 2580): [UNSL]< UNSOL_RESPONSE_CDMA_NEW_SMS
08-07 09:03:52.019 D/SMS     ( 2580): decode(byte) dump data -----------------------------------------------
08-07 09:03:52.046 D/SMS     ( 2580): 
08-07 09:03:52.046 D/SMS     ( 2580): 0x00000000 00 03 1B B0 20 03 06 12 08 07 09 03 47 01 8A 04 ............G...
08-07 09:03:52.046 D/SMS     ( 2580): 0x00000010 40 00 03 1B 57 E0 01 81 03 F8 00 08 01 1F 80 5C @...W..........\
08-07 09:03:52.046 D/SMS     ( 2580): 0x00000020 23 F0 31 23 0B 83 83 63 4B 1B 0B A3 4B 7B 71 7B #.1#...cK...K{q{
08-07 09:03:52.046 D/SMS     ( 2580): 0x00000030 B3 73 21 73 BB 0B 81 73 6B 6B 99 6B 6B 2B 9B 9B .s!s...skk.kk+..
08-07 09:03:52.046 D/SMS     ( 2580): 0x00000040 0B 3B 28 05 A4 3D 7C 24 64 14 C2 42 52 23 B3 C2 .;(..=|$d..BR#..
08-07 09:03:52.046 D/SMS     ( 2580): 0x00000050 F9 A2 CB 3B 12 AA 18 04 6C 84 1B 43 A3 A3 81 D1 ...;....l..C....
08-07 09:03:52.046 D/SMS     ( 2580): 0x00000060 79 79 89 81 71 91 99 A1 71 89 99 B9 71 89 89 7A yy..q...q...q..z
08-07 09:03:52.046 D/SMS     ( 2580): 0x00000070 42 52 23 B3 C2 F9 A2 CB 3B 12 AA 18 04 40 2C 08 BR#.....;....@,.
08-07 09:03:52.046 D/SMS     ( 2580): 0x00000080 18 1F A4 04 48 6C 01 89 99 B9 89 C9 A1 A9 C1 89 ....Hl..........
08-07 09:03:52.046 D/SMS     ( 2580): 0x00000090 89 A0 04 54 04 70 13 62 40                      ...T.p.b@
08-07 09:03:52.050 D/SMS     ( 2580): userData.numFields = 136, userData.payload.length = 137, copyLen = 136
08-07 09:03:52.191 E/SMS     ( 2580): decodeUserDataPayload payloadSkip decode failed: com.android.internal.util.BitwiseInputStream$AccessException:BitwiseInputStream access failed: illegal read (pos 1083, end 1088, bits 8)
08-07 09:03:52.191 D/CDMA    ( 2580): SMS SC timestamp: 1344330227000
08-07 09:03:52.194 D/CDMA    ( 2580): processCdmaWapPdu pdu dump
08-07 09:03:52.218 D/CDMA    ( 2580): 
08-07 09:03:52.218 D/CDMA    ( 2580): 0x00000000 00 00 63 6A FC 00 30 20 7F 00 01 00 23 F0 0B 84 ..cj..0.....#...
08-07 09:03:52.218 D/CDMA    ( 2580): 0x00000010 7E 06 24 61 70 70 6C 69 63 61 74 69 6F 6E 2F 76 ..$application/v
08-07 09:03:52.218 D/CDMA    ( 2580): 0x00000020 6E 64 2E 77 61 70 2E 6D 6D 73 2D 6D 65 73 73 61 nd.wap.mms-messa
08-07 09:03:52.218 D/CDMA    ( 2580): 0x00000030 67 65 00 B4 87 AF 84 8C 82 98 48 4A 44 76 78 5F ge........HJDvx_
08-07 09:03:52.218 D/CDMA    ( 2580): 0x00000040 34 59 67 62 55 43 00 8D 90 83 68 74 74 70 3A 2F 4YgbUC....http:/
08-07 09:03:52.218 D/CDMA    ( 2580): 0x00000050 2F 31 30 2E 32 33 34 2E 31 33 37 2E 31 31 2F 48 /10.234.137.11/H
08-07 09:03:52.218 D/CDMA    ( 2580): 0x00000060 4A 44 76 78 5F 34 59 67 62 55 43 00 88 05 81 03 JDvx_4YgbUC.....
08-07 09:03:52.218 D/CDMA    ( 2580): 0x00000070 03 F4 80 89 0D 80 31 33 37 31 39 34 35 38 31 31 ......1371945811
08-07 09:03:52.218 D/CDMA    ( 2580): 0x00000080 34 00 8A 80 8E 02 6C 48                         4.....lH
08-07 09:03:52.218 I/CDMA    ( 2580): Received WAP PDU. Type = 0, originator = 10659821, ID = 27388, segment# = 0/1
08-07 09:03:52.218 I/CDMA    ( 2580): Received WAP PDU. Type = 0, originator = 10659821, src-port = 9200, dst-port = 2948, ID = 27388, segment# = 0/1
08-07 09:03:52.319 D/RILJ    ( 2580): [1089]> RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE true 0
08-07 09:03:52.319 D/RILC    ( 2377): [1089]> CDMA_SMS_ACKNOWLEDGE (uErrorClass=0, uTLStatus=0, )
08-07 09:03:52.319 D/RILC    ( 2377): [1089]< CDMA_SMS_ACKNOWLEDGE
08-07 09:03:52.319 D/RILJ    ( 2580): [1089]< RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE 
08-07 09:03:52.601 D/RILC    ( 2377): [UNSL]< UNSOL_RESPONSE_NETWORK_STATE_CHANGED 
08-07 09:03:52.601 D/RILC    ( 2377): sendUnsolicitedResponses: multi client index=0, fd=18
08-07 09:03:52.601 D/RILC    ( 2377): [UNSL]< UNSOL_RESPONSE_NETWORK_STATE_CHANGED 
08-07 09:03:52.605 D/RILJ    ( 2580): [UNSL]< UNSOL_RESPONSE_NETWORK_STATE_CHANGED




流程分析与说明:
(1).“uTeleserviceID=65002”:彩信的标志
(2).“SMS SC timestamp: 1344466233000”:发送时间
(另外数据包中的提示:
08-08 22:50:51.823 D/CDMA    ( 2586): 0x00000010 C5 06 24 61 70 70 6C 69 63 61 74 69 6F 6E 2F 76 ..$application/v
08-08 22:50:51.823 D/CDMA    ( 2586): 0x00000020 6E 64 2E 77 61 70 2E 6D 6D 73 2D 6D 65 73 73 61 nd.wap.mms-messa
08-08 22:50:51.823 D/CDMA    ( 2586): 0x00000030 67 65 00 B4 87 AF 84 8C 86 8D 90 85 04 50 22 7C ge...........P"|)
(3).“processCdmaWapPdu pdu dump”:下的数据解析中,是否包含有HTTP头的标志,这是收和发的区分。因为发送解析出来的是时间戳,接收解析出来的是下载地址(HTTP...),至于为什么“其然”,那多想想吧,顺便对比上面的流程分析。
(4).“CDMA_SMS_ACKNOWLEDGE (uErrorClass=0, uTLStatus=0, )”:这里是正确接收与是否出现异常的区分处。会有什么样的场景、出现什么样的异常,这里大家测试吧。
当然,还可以挖出一些其他有价值的信息...

需要说明的是,只有接收方把彩信内容下载到其本地,才有上述记录日志产生!


后记:
1.其实这样基于Logcat日志对彩信信息进行采集并不是怎么好。最重要的,不具有通用性!
2.另外,本来Logcat中,数据包中的信息流包含的信息是非常有用的(可参考:http://blog.lytsing.org/archives/203.html),可是在定制机中,信令流的可参考价值很低。

3.信息的采集还可以在广播上做,不过为什么没有在广播上做采集,更多的应该是考虑到窃取的问题吧!Logcat的好处在于,有,就一定有!


参考:《彩信收发流程分析方法.pdf》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值