GSM Sniffing入门之软件篇:GSMTAP抓取与SMS(Short Message Service)
发布日期:2022-07-14 浏览:0
研究GSM Sniffing纯属个人兴趣,能抓SMS报文只是捡了个明文传输的漏子,切勿用于非法用途。就像sylvain说的,osmocomBB并不是为抓包而实现的,如果没有足够的GSM相关知识,想实现还原语音通话内容根本就无从下手。
【第二部分-软件篇:GSMTAP抓取与SMS(Short Message Service)还原】
之前介绍了OsmocomBB的硬件与刷机,这里重点介绍下其附带软件的使用。
参考官方wiki可以知道osmocomBB的代码可以分为两种:一种是在手机基带芯片上跑的layer1(物理传输层);另一种是在PC上跑的与layer1通信,提供上层服务的程序:
代码:
[root@ArchDev ~]# cd osmocom-bb/src/
[root@ArchDev src]# ls
Makefile README.building README.development host shared target target_dsp wireshark
target下就是针对各手机的固件,bin位于target/firmware/board/compal_e88下。Baseband firmware一节介绍了不同固件的功能和对应程序,*.compalram是软刷用的,断电后需要重新刷机。*.e88flash/*.e88loader是配合loader使用的,刷入前需要参考 http://bb.osmocom.org/trac/wiki/flashing_new 把loader写到手机中,然后在手机上用loader运行。
后面cell_log和ccch_scan都是对应layer1的,因为直接写入有一定危险性,本文只演示软刷(layer1.compalram)的使用方法。
回到src目录下,接着看PC侧的工具:
代码:
[root@ArchDev ~]# cd ~/osmocom-bb/src/
[root@ArchDev host]# ls
calypso_pll fb_tools gsmmap layer23 osmocon rita_pll
osmocon是刷入固件,并与固件通信的程序,使用方法(注意C118选compal_e88/layer1.compalram.bin这个固件):
代码:
$ cd host/osmocon/
$ ./osmocon -p /dev/ttyUSB0 -m c123xor ../../target/firmware/board/compal_e88/layer1.compalram.bin
将C118关机后,短按电源键就开始运行了。刷机过程和常见问题硬件篇都已经提过,这里不再详述。
layer23下,有实现不同功能的数据链路层/网络层程序,比如模拟手机功能的mobile(接入网络需要SIM卡),以及抓取相关信息的杂项程序。直接进入misc目录:
代码:
cd layer23/src/misc/
cell_log是一个扫描有效运营商频率,并收集BCCH上基本信息的工具,我们先用它来获取运营商的ARFCN、MNC和MCC等信息。这里不需要gprs数据,直接使用这个参数:
代码:

-O --only-scan Do a scan and show available ARFCNs, no data logging
./cell_log --only-scan
...
<000e> cell_log.c:248 Cell: ARFCN=56 PWR=-67dB M
例如这里选取信号最强的ARFCN=56 (China Mobile),有了这个就可以开始抓取Common Control Channel (CCCH)了:
代码:
./ccch_scan -a 56 -i 127.0.0.1
看到ccch_scan开始输出burst内容后,就可以
代码:
sudo wireshark -k -i lo -f 'port 4729'
打开Wireshark来抓GSMTAP,设置 gsm_sms 过滤器即可看到SMS报文内容:
为了加深对SMS传输的理解,我写了个Python脚本来重组短信的PDU。
下面部分需要些GSM网络相关的知识,推荐 GSM network and services 2G1723 2006
从协议图中得知,移动设备(MS)和基站(BTS)间使用Um接口,最底层就是刷入手机的layer1物理传输层,之上分别是layer2数据链路层和layer3网络层。
位于图中layer2的LAPDm,是一种保证数据传输不会出错的协议。一个LAPDm帧共有23个字节(184个比特),提供分片管理控制等功能:
GSMTAP Header之后是 Link Access Procedure, Channel Dm,即LAPDm。参考TS 04.06有3个关键字段: Address Field,Control Field,Length Field
Address Field除了上面说的SAPI外都可以不关注。
Control Field比较关键,里面记录了该LAPDm的分片信息。Frame type: Information frame说明当前是I帧(I frame),其余bit为N(S)和N(R)。Send sequence number N(S)标记该分片的顺序,从0开始递增。看Wireshark源码说实际有些N(S)可能不是从0开始的,这里组包就不判断N(S)是否为0直接按顺序附加。N(R)是Receive sequence number,看文档上I帧传输时N(R)的状态没看明白,直接默认同时间只有1个下行短信了,这样收到的N(R)基本是一样的(事实上大部分时候都是如此)