3个月前,听朋友介绍得知OsmocomBB项目。此前一直以为GSM Sniffing需要价格昂贵的专用设备,但osmocomBB的上手成本:一个25元左右的手机,外加一根USB转TTL的串口线,着实让我吃了一惊(我自己前后买了3台手机和2种串口线以测试稳定性,总共花了100元不到)

OsmocomBB教程想必很多人都看过了。写这篇文章的目的,一则是把我所遇到的问题列出来,避免以后或者其他人像我一样,被“2.5mm耳机没插到位”这种低级问题纠缠大半个月
另外,如果大家还在用GSM的2G网络,还是找机会换了吧,SMS协议在国内是明文传输的

相关链接:

https://github.com/osmocom/osmocom-bb

http://bb.osmocom.org/trac/wiki/TitleIndex

---------------------------------------------------------------------------------------------------

【第一部分-硬件篇:OsmocomBB环境准备与刷机】

一、硬件准备

工欲善其事,必先利其器。在开始编译osmocomBB前,需要了解运行osmocomBB需要些什么东西:

1. Moto C118
   osmocomBB支持很多型号的手机,具体可以在官网查到:http://bb.osmocom.org/trac/wiki/Hardware/Phones
   我们的目标C118,也就是官网首推的E88系列:MotorolaC123/C121/C118 (E88) -- our primary target
   你问C118有啥优势?出了官方说的支持最好,这玩意另一个优势是便宜。机器没什么讲究,直接淘宝选最便宜的买就行了;国产系统为中文,测试一样可以正常刷机。我买的机器+电池+线充(或者直接用万能充)一起30元。另外如果只有1台不建议买裸机,这个的电池完全配不到,当时我是找人30做了块才点亮机器的...

2. USB转串口模块
   推荐带TX/RX LED的 FT232模块,虽然价格略贵(淘宝上最便宜的大概28),但有指示灯可以清楚看到是否有数据传输,方便定位问题。

FT232模块

CP2102模块 也可以,使用前需要参考这里调整波特率

代码:
sudo ./cp210x-program -p -F eeprom.hex -w --set-baudrate 812500:FFE2,FFF4,1 --set-baudrate 406250:FFC5,FFE9,1 --set-baudrate 203125:FF8A,FFD3,1

用cp210x-program工具看到输出里有 800000 Baud, 406780 Baud, 203390 Baud, 115385 Baud 这几个波特率就可以使用了

CP2102模块,只有电源指示

3. C118数据线 (2.5mm耳机头 转 杜邦线)
   注意一头是2.5mm耳机孔的,另一边是杜邦线连接串口模块。手边有2.5mm耳机插头的可以自己做一个。淘宝只有一家卖这个线的(10¥),如果你买的是这个,请拆下电池盖观察耳机插孔是否插到位,建议买回来第一件事就是拿小刀把插头的外框狠狠的削掉一圈:

二、ArchLinux下编译osmocomBB
(网上其他linux编译的教程很多,如果不是用的Arch可以跳过这个部分,参考其他教程完成osmocomBB编译)

0. 首先将texinfo替换成4.13a,源里面texinfo5会导致gcc的文档无法编译

cd ~
svn checkout --depth=empty svn://svn.archlinux.org/packages arch_packages
cd arch_packages
svn update texinfo -r176043
cd texinfo/repos/core-i686
makepkg

安装编译好的texinfo-4.13a:

代码:
sudo pacman -U texinfo-4.13a-7-i686.pkg.tar.xz

1. 安装libosmocore:http://bb.osmocom.org/trac/wiki/libosmocore

代码:
cd ~
git clone git://git.osmocom.org/libosmocore.git
cd libosmocore/
# autoreconf -i (not working)

Arch下autoreconf怎么都过不了,直接无视之继续编译,后面再修复libosmocore.so.4找不到的问题

代码:

sudo ldconfig
sudo cp -Rf /usr/local/lib/* /usr/lib/

2. 编译arm-toolchain:http://bb.osmocom.org/trac/wiki/GnuArmToolchain

代码:

cd ~
mkdir arm_toolchain
cd arm_toolchain
wget http://bb.osmocom.org/trac/raw-attachment/wiki/GnuArmToolchain/gnu-arm-build.2.sh
chmod +x gnu-arm-build.2.sh
mkdir build install src

这是官方推荐的gcc版本,速度太慢可以用迅雷拖下来放到src目录里:

代码:
cd src/
wget http://ftp.gnu.org/gnu/gcc/gcc-4.5.2/gcc-4.5.2.tar.bz2
wget http://ftp.gnu.org/gnu/binutils/binutils-2.21.1a.tar.bz2
wget ftp://sources.redhat.com/pub/newlib/newlib-1.19.0.tar.gz

开始编译arm的交叉编译工具:

代码:
cd ..
./gnu-arm-build.2.sh
I will build an arm-elf cross-compiler:Prefix: /root/arm_toolchain/installSources: /root/arm_toolchain/srcBuild files: /root/arm_toolchain/buildPress ^C now if you do NOT want to do this.

按回车继续,时间比较长可以先去喝杯咖啡

代码:
Build complete! Add /root/arm_toolchain/install/bin to your PATH to make arm-elf-gcc and friends
accessible directly.

编译完成,按照提示导出安装目录:

代码:
export PATH=$PATH:/root/arm_toolchain/install/bin

3. 编译osmocom-bb

代码:
git clone git://git.osmocom.org/osmocom-bb.git
cd osmocom-bb
git pull --rebase
git checkout -b gsmmap remotes/origin/luca/gsmmap

不建议用 remotes/origin/sylvain/testing 分支,这个分支不太稳定,刷机几次才能搜到1次信号

如果想插上SIM卡用mobile发短信,记得打开layer1的TX发送功能:

代码:
vi src/target/firmware/Makefile
# Uncomment this line if you want to enable Tx (Transmit) Support.
CFLAGS +=-DCONFIG_TX_ENABLE

最后编译osmocomBB:

代码:
cd src
make

编译成功后,参考osmocon的教程,就可以开始对C118进行软刷机了:
http://bb.osmocom.org/trac/wiki/osmocon

代码:

0. 准备配置文件目录
$ sudo mkdir /etc/osmocom/
$ sudo touch /etc/osmocom/osmocom.cfg1. Connect your phone
2. Choose firmware (../../target/firmware/board/compal_e88/layer1.compalram.bin)
3. Load firmware
$ cd host/osmocon/
$ ./osmocon -p /dev/ttyUSB0 -m c123xor ../../target/firmware/board/compal_e88/layer1.compalram.bin4. 运行mobile,开启新的终端
$ cd layer23/src/mobile
$ ./mobile -i 127.0.0.15. 用wireshark抓包
$ sudo wireshark -k -i lo -f 'port 4729'

mobile完成的是普通电话的交互操作;相对的,在host/layer23的misc文件夹里,还有cell_log,ccch_scan等工具可以帮助抓取GSMTAP。

注意:使用cell_log和ccch_scan时,有个 GSM ARFCN 参数,这个是用于选择小区中频道的。如果选错了频道,会提示 result = 255(这个按mail list的说法是频道中没有收到控制响应)
用bcch_scan可以得到当前位置信号较强的几个频道编号,当然也可以通过mobile的输出确定最强的ARFCN,然后使用 -a 参数传递给ccch_scan来捕捉其上的GSMTAP。

三、osmocomBB刷机及常见故障排除

为杜绝一切连接引起的疑难杂症,刷机前先确认USB转TTL模块没有问题。

用一根杜邦线,把模块的TX/RX两个pin脚短接。

把模块插到USB口上,此时模块的电源LED亮起,输入 lsusb 查看模块的连接情况:

代码:
[root@ArchDev ~]# lsusb
Bus 001 Device 004: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC

说明FT232模块已经被正确识别。dmesg也能看到类似的输出

代码:
[ 3939.433684] usb 1-1: Detected FT232RL
[ 3939.433691] usb 1-1: Number of endpoints 2
[ 3939.433697] usb 1-1: Endpoint 1 MaxPacketSize 64
[ 3939.433703] usb 1-1: Endpoint 2 MaxPacketSize 64
[ 3939.433708] usb 1-1: Setting MaxPacketSize 64
[ 3939.442346] usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB0

CP2102模块的话,输出稍有不同:

代码:
# lsusb
Bus 001 Device 003: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light# dmesg
[ 3421.303602] cp210x 1-1:1.0: cp210x converter detected
[ 3421.554407] usb 1-1: reset full-speed USB device number 3 using uhci_hcd
[ 3421.703370] usb 1-1: cp210x converter now attached to ttyUSB0

此时使用终端工具以115385波特率连接ttyUSB0设备(有些机器是ttyUSB1,可以通过上面dmesg输出确定)。连接后,任何键入字符,应该能正确显示在终端上。

下面以minicom为例:

代码:
sudo pacman -S minicom  (或者apt-get install minicom)
sudo minicom -D /dev/ttyUSB0 -b 115385 -s

在对话框中选择"Serial port setup",按F键关闭"Hardware Flow Control",最终配置如图所示:

按回车并选"Exit"进入minicom主界面(当然也可以保存下配置),键盘随便敲些字符。能够成功显示键入字符,说明模块的TX/RX均正常,可以连接机器了。按Ctrl-A接着按Z,按X退出minicom

拔下模块接上刷机线,黑线接GND,红色和白色分别接TXD和RXD。TX/RX经常会弄反,这里LED指示灯就能派上用场了

代码:
sudo minicom -D /dev/ttyUSB0 -b 115385 -s

像刚才一样关掉"Hardware Flow Control"进入,将C118关机并短按电源键,连接正常的话会显示下面的内容先显示ftmtool,接着大约1秒后输出error,看到这个说明连接无误。

已经成功了一半,下面祈祷C118的硬件没有故障。

参考osmocon的使用教程http://bb.osmocom.org/trac/wiki/osmocon

先为osmocom创建配置文件

代码:
sudo mkdir /etc/osmocom/
sudo touch /etc/osmocom/osmocom.cfg

接着确认机器型号,C118是compal_e88的固件,使用osmocon需要刷入layer1,位于
src/target/firmware/board/compal_e88/layer1.compalram.bin

代码:

cd ~/osmocom-bb/src/
cd host/osmocon/    # 一些在电脑上运行的工具都在host目录下

使用下面命令启动osmocon等待刷机:

代码:
sudo ./osmocon -p /dev/ttyUSB0 -m c123xor ../../target/firmware/board/compal_e88/layer1.compalram.bin

此时确保C118在关机状态,将刷机线插到底后,短按电源键:

代码:
got 1 bytes from modem, data looks like: 04  .
got 1 bytes from modem, data looks like: 81  .
got 4 bytes from modem, data looks like: 1b f6 02 00  ....
got 1 bytes from modem, data looks like: 41  A
got 1 bytes from modem, data looks like: 01  .
got 1 bytes from modem, data looks like: 40  @
Received PROMPT1 from phone, responding with CMD
read_file(../../target/firmware/board/compal_e88/layer1.compalram.bin): file_size=55940, hdr_len=4, dnload_len=55947
got 1 bytes from modem, data looks like: 1b  .
got 1 bytes from modem, data looks like: f6  .
got 1 bytes from modem, data looks like: 02  .
got 1 bytes from modem, data looks like: 00  .
got 1 bytes from modem, data looks like: 41  A
got 1 bytes from modem, data looks like: 02  .
got 1 bytes from modem, data looks like: 43  C
Received PROMPT2 from phone, starting download
handle_write(): 4096 bytes (4096/55947)
handle_write(): 4096 bytes (8192/55947)
handle_write(): 4096 bytes (12288/55947)
handle_write(): 4096 bytes (16384/55947)
handle_write(): 4096 bytes (20480/55947)
handle_write(): 4096 bytes (24576/55947)
handle_write(): 4096 bytes (28672/55947)
handle_write(): 4096 bytes (32768/55947)
handle_write(): 4096 bytes (36864/55947)
handle_write(): 4096 bytes (40960/55947)
handle_write(): 4096 bytes (45056/55947)
handle_write(): 4096 bytes (49152/55947)
handle_write(): 4096 bytes (53248/55947)
handle_write(): 2699 bytes (55947/55947)
handle_write(): finished

上面步骤一切正常的情况下,会看到DOWNLOAD ACK和OSMOCOM Layer 1的提示,此时C118屏幕上已经显示出layer1的界面了:

代码:

got 1 bytes from modem, data looks like: 1b  .
got 1 bytes from modem, data looks like: f6  .
got 1 bytes from modem, data looks like: 02  .
got 1 bytes from modem, data looks like: 00  .
got 1 bytes from modem, data looks like: 41  A
got 1 bytes from modem, data looks like: 03  .
got 1 bytes from modem, data looks like: 42  B
Received DOWNLOAD ACK from phone, your code is running now!
battery_compal_e88_init: starting upOSMOCOM Layer 1 (revision osmocon_v0.0.0-1351-g074c78a-modified)

因为是软刷,按电源键大约2秒会关机。关机后需要重新执行上面操作刷入layer1
如果想把固件烧入手机中,可以参考这里:http://bb.osmocom.org/trac/wiki/flashing_new
也许是版本问题,在我的机器上总是提示crc错误。想想刷完这个还不能用直充充电,还是每次用之前软刷好了。

----------------------------------------------------------------------------------------

然而,不是事事都那么顺利。我有幸买到一台有问题的C118,断电后第一次刷机,总是无法收到DOWNLOAD ACK,直接卡死在handle_write(): finished这里。此时屏幕不亮短按电源键也没有任何反应:

虽然不是Android系统,一样可以祭出Android三宝绝招——拔电池。重新插上电池后,短按电源重新刷入,正常看到OSMOCOM Layer 1的提示(建议遇到各种非线缆相关的疑难杂症,都先尝试下拔电池重刷,这个好像是osmocom不稳定导致的)

另外,这里说下我之前犯的一个低级错误:模块和连接都确认没问题,但按电源键确输出一堆乱码。

这个网上Google了好久都没有结果,甚至mail list里还有哥们说是手机的接收模块烧了。结果最后卖家发来张图片:(抱歉旺信丢消息了,图片找不到了大致就是红圈这里,没有插到位)

打开电池后盖才发现,如果不用小刀狠狠削掉一圈,这个数据线根本没法插到底。(微博上也看到2个同学遇到相同的问题,看来数据线都是同一家买的-_-b)

另外一种情况是只收到PROMPT1后,就出现ftmtool error了。网上有种说法是主机的时钟频率太慢(比如在虚拟机里跑osmocon),导致没有发完就超时了。但我专门用VMWARE测试,并没有遇到这样的问题。
个人理解是osmocomBB的刷机不稳定,遇到这种情况请先检查是否用了burst_ind分支(也就是sylvain/testing),我之前就因为用的这份老代码,导致刷一下午只有1-2次能成功。另外还可以把-m c123xor换成-m c123试试,有时候去掉xor方式后可以正常刷进去。
更新libosmocore并换成luca/gsmmap分支后,就再也没有遇到这个情况了。

我并非通信专业出身,GSM网络的各种概念在此之前一无所知,如果文章中有错误欢迎指正:)

本文转自 K1two2 博客园博客,原文链接:http://www.cnblogs.com/k1two2/p/4539653.html   ,如需转载请自行联系原作者

GSM Sniffing入门之硬件篇相关推荐

  1. linux usb3.0改2.0,TX1入门教程硬件篇-切换USB2.0与USB3.0

    TX1入门教程硬件篇-切换USB2.0与USB3.0 说明: 介绍如何切换TX1USB口的为2.0或3.0版本 步骤: 编辑extlinux.conf文件,修改usb_port_owner_info= ...

  2. zed相机拆机_TX2入门教程硬件篇-外接双目相机ZED

    TX2入门教程硬件篇-外接双目相机ZED 说明:介绍如何在TX2安装ZED双目相机 步骤:准备:接上显示屏,键盘和鼠标 刷机:TX2通过jetpack3.0需要采用full模式完成刷机 确保有CUDA ...

  3. zed相机拆机_TX1入门教程硬件篇-外接双目相机ZED

    TX2入门教程硬件篇-外接双目相机ZED 说明:介绍如何在TX2安装ZED双目相机 步骤:准备:接上显示屏,键盘和鼠标 刷机:通过jetpack3.0需要采用full模式完成刷机 确保有CUDA8.0 ...

  4. 使用计算机录音需要准被硬件和,电脑音乐入门装备(硬件篇)

    如果你想学习电脑音乐,想进入电脑音乐的世界,那么这次我们就来为初学者们介绍一些入门电脑音乐的基本装备,大家可以作为参考,为你进入这一新的世界做足准备!让我们来从最基础的开始.首先,你要下定决心,开始使 ...

  5. Jetson Nano入门教程:硬件篇+视频学习教程

    一.主要硬件 1.jetson nano板一块: 2.tf卡一块:官方推荐16GB起步: 3.读卡器:用于把系统烧进tf卡: 4.5V4A DC电源:推荐使用该电源.nano有多种电源供电方式,这种是 ...

  6. 微信公众号开发入门教程第一篇

    微信公众号开发入门教程第一篇 关键字:微信公众平台开发 作者:方倍工作室 在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯.及HTTP/XML/CSS/ ...

  7. 电脑基础知识精选(硬件篇)

    电脑基础知识精选(硬件篇) 电脑基础知识 一.处理器 CPU 二.内存 RAM 三 .硬盘 Disk 四.显卡 GPU 五.主板 Motherboard 六.电源和显示器 七.选配电脑常见问答 八.如 ...

  8. Python语言入门这一篇就够了-学习笔记(十二万字)

    Python语言入门这一篇就够了-学习笔记(十二万字) 友情提示:先关注收藏,再查看,12万字保姆级 Python语言从入门到精通教程. 文章目录 Python语言入门这一篇就够了-学习笔记(十二万字 ...

  9. (转载)H5 手机 App 开发入门:概念篇

    H5 手机 App 开发入门:概念篇 一.H5 的含义 二.原生应用 2.1 概念 2.2 优点 2.3 缺点 三.Web 应用 3.1 概念 3.2 优点和缺点 3.3 Web APP 的劣势 3. ...

最新文章

  1. 海思3559A上编译Valgrind源码操作步骤
  2. Windows Mobile使用Shared Memory(共享内存)进行IPC(进程间通信)的开发
  3. 浅析Android插件化
  4. leader选举的源码分析-QuorumPeer.start
  5. python公式_Python读取excel文件中带公式的值的实现
  6. 上拉电阻下拉电阻的总结
  7. 在Eclipse中运行JAVA代码远程操作HBase的示例
  8. HDFS集群常见异常及排查步骤
  9. CentOS配置history记录每个用户执行过的命令
  10. iOS 指令集架构Architectures armv6、armv7、armv7s、arm64、arm64e、x86_64、i386
  11. 算法入门 13.并查集
  12. 相关性分析和相似度计算
  13. 新来的妹纸 rm -rf 把公司整个数据库删没了!!!
  14. RFID电子耳标识别棒,牦牛身份识别管理专用设备
  15. android+ue设计原则,【岗位课】移动端UI/UE设计湿
  16. HTML5七夕情人节表白网页(抖音-流动爱心表白)HTML+CSS+JavaScript 求婚示爱代码 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码 爱心表白网页
  17. iframe防止页面套娃
  18. 2C4T与4C4T在计算密集型任务下的效率对比
  19. 如何培养你的数据分析思维?
  20. 关于密码学古典加密——仿射加密一些问题

热门文章

  1. 设值单元格字体和背景色的颜色-实例
  2. oracle 查询字符代码dump,字符集问题(Linux、oracle、终端等,导入导出数据)
  3. 使用LASSO进行全基因组关联分析
  4. AtCoder Beginner Contest 211
  5. 广东诚美计算机专修学院 概况,广州各大高校
  6. mos中Port-Specific的意思
  7. 装备制造业ERP软件如何帮助企业做好物料齐套管理?
  8. mysql-5.5.20-winx64_mysql-5.7.20-winx64命令安装
  9. 【老生谈算法】matlab实现Chan算法及其验证源码——Chan算法
  10. 餐厅设置套餐 html,餐厅如何设计爆款套餐?掌握这5个原则就够了