你们应该都据说过HTTP协议,又据说WEB服务,每个服务的背后都有一个协议在工做着。所谓的没有规矩不成方圆,说的就是这个道理,每个细小的部分,都已经规定好,只要按照协议执行,就不会出现问题。一样,GSM手机能够拨打电话,也就离不开相关协议的支持,这里就来介绍GSM协议。全球移动通讯系统Global System for Mobile Communication就是众所周知的GSM,是当前应用最为普遍的移动电话标准。全球超过200个国家和地区超过10亿人正在使用GSM电话。css
GSM是一个蜂窝网络,蜂窝网络的缘由,是由于一个数学结论,即以相同半径的圆形覆盖平面, 当圆心处于正六边形网格的各正六边形中心,也就是当圆心处于正三角网格的格点时所用圆的数量最少。做为运营商,为了考虑成本,不会建设大量多余的基站,那么采用蜂窝网络便可覆盖区域又能够减小基站数量,这不是很好么?是的,这很好。下面我们就一块聊聊基站。git
首先,看一张图片,这就是基站。你们确定都见过,可是有没有注意过,铁塔的下面总会有一间小房子,那房子里面是什么呢?请看图。其实就是一堆机器。里面究竟有哪些东西呢?组要组成有基站子系统(简称基站BS)由基站收发台(BTS)和基站控制器(BSC)组成;网络子系 统由移动交换中心(MSC)和操做维护中心(OMC)以及原地位置寄存器(HLR)、访问 位置寄存器(VLR)、鉴权中心(AUC)和设备标志寄存器(EIR)等组成。vim
这个话题,我们就在一块儿聊一聊基站与手机是如何通讯的,这里只做一个大概的介绍,由于这里面的水很深,本身认识也不是特别的清楚。bash
首先说明一些常见的状况,为何手机卡分属各地呢?为何市话便宜,长途贵?为何要收取漫游费?当手机开机搜索信号时都与基站交换了什么呢?手机关机的时候又与基站交换了什么呢?下面,我给你们揭开迷雾。网络
在基站小节中,我们分析基站了组成,其中有一个原地位置寄存器(HLR),HLR里面存放着本地的手机号信息,而访问 位置寄存器(VLR)存放着外地来的手机号信息。经过判断手机号的归属地,就能够区分本地和外地手机了,这就是区分归属地的缘由了。iphone
当你拨打电话的时候,首先会给基站请求,基站判断出这个手机号的所在的基站,而后与基站、目标手机创建链接,对于目标在本地,数据只在本地的基站系统中传输,至关于计算机中的局域网,故资费便宜,当目标手机不在本地时,就须要链接外地的基站,传输距离长,过程相对复杂,故资费较高。flex
当本身身处外地的时候,有没有想过,别人给本身打电话的时候,基站是如何寻找到本身的?其实,本身的手机时刻都链接的基站,当初在外地的时候,所连基站会在访问 位置寄存器(VLR)中注册一下,并向原籍基站进行请求相关信息,并告诉对方本身的位置,这样原籍的基站就知道本身的位置。此时,别人拨打本身的电话会先经过本地的基站-->当前基站--〉手机,故须要额外的漫游费。本身拨打当地的市话,与本地拨打并无太大的区别。ui
基站会不停的对外广播本身的信号及相关信息,手机只要搜索信号,选择相应的链接上去便可,在链接过程会作一些信息的注册,好比Imel,手机号等。当本身的手机正常关机时,也会给基站发送注销信息,这样别人拨打你的电话,就会提示已关机。假如本身的手机忽然断电,会意外的断开与基站的链接,基站那面没有完成正常的注销操做,这样别人拨打你的电话,就会提示暂时没法接通或者不在服务区。es5
说到这里,面对一个大基站,基站自己并不会对特定的方向的信号与你通讯,而是以向四周广播的形式,发送信号。那么就能够说,咱们的手机实际上也是能够接收到其余手机的信号,对的,就是这样,这就是无线,不像有线有一个专门的线路,只要把收到的信号给解密了,就能够嗅探别人的短信、语音通话。甚至能够假冒其余人的身份通话(固然,前提是能够突破目前的鉴权手段)。到这里,关于基站和手机的故事就到这里了。下面给你们介绍一下著名破解GSM的项目OsmocomBB。spa
以前说过神奇的OsmocomBB项目,这一节就作简要的介绍。
OsmocomBB是国外一个开源项目,是GSM协议栈(Protocols stack)的开源实现,全称是Open source mobile communication Baseband.目的是要实现手机端从物理层(layer1)到layer3的三层实现。
对于这一方面,国内的中文资料很好,而且是一个很敏感的话题,即便在乌云里面报告,运营商也是置之不理。短信内容的明文传输已经不是什么秘密了。
好了,尽管不是特别的了解这个项目,可是仍是能够从宏观的角度进行一个解释,前面说了,服务和协议都是相辅相成的。只要能够搞懂完整的GSM通讯协议,我们就能够从物理层捕获相关信号,经过对GSM的破解,能够对信号进行解密,从而得到原文。
如今,我们不须要深刻了解GSM的工做原理,利用这个开源项目,进行简单的配置,我们就能够嗅探了!下一节,我们具体谈一谈实验的配置。重点在后面。这里对于初学的我,先暂时不深究了。
一、须要一个兼容的平台(即硬件能够兼容交叉编译环境,主要为手机):
这里官方推荐了几个类型的手机
Designed + Manufactured by Compal, OEM by Motorola
MotorolaC115/C117 (E87)
MotorolaC123/C121/C118 (E88) -- our primary target
MotorolaC140/C139 (E86)
MotorolaC155 (E99) -- our secondary target
MotorolaV171 (E68/E69)
Designed by Pirelli/Foxconn?, manufactured by Foxconn
Designed by Openmoko, manufactured by FIC
Neo 1973 (GTA01)
OpenMoko - Neo Freerunner (GTA02)
A list of potential targets that may be worth adding support for in the future is available at PotentialCalypsoTargets.
MTK based
Information specific to Mediatek phones that we support.
Designed + Manufactured by Bluelans
SciphoneDreamG2 (MT6235 based)
这是官网的推荐,这里咱们采用的是MTC118,淘宝的价格也就几十块钱。
二、还须要USB串口转换模块
上图是官网的推荐型号,这里咱们采用FT232,尽管贵了点,可是比较稳定,效果好。
下面,上一图,就是所有硬件了。
环境:kali Linux(amd*64)系统
一、vim /etc/apt/sources.list 二、 deb http://mirrors.ustc.edu.cn/kali kali main non-free contrib deb-src http://mirrors.ustc.edu.cn/kali kali main non-free contrib deb http://mirrors.ustc.edu.cn/kali-security kali/updates main non-free //把这三行添加进去,wq保存 三、apt-get update 四、aptitude install libtool shtool autoconf git-core pkg-config make gcc 五、 apt-get install build-essential libgmp3-dev libmpfr-dev libx11-6 libx11-dev texinfo flex bison libncurses5 \libncurses5-dbg libncurses5-dev libncursesw5 libncursesw5-dbg libncursesw5-dev zlibc zlib1g-dev libmpfr4 libmpc-dev 六、wget -c 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 九、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 十一、cd .. 十二、./gnu-arm-build.2.sh 1三、echo "export PATH=\$PATH:/root/install/bin">>/root/.bashrc 1四、source /root/.bashrc 1五、cd ~ 1六、git clone git://git.osmocom.org/libosmocore.git 1七、cd libosmocore/ 1八、autoreconf -i 1九、./configure 20、make 2一、make install 2二、cd .. 2三、.ldconfig 2四、cd .. 2五、git clone git://git.osmocom.org/osmocom-bb.git 2六、cd ~/osmocom-bb 2七、git checkout --track origin/luca/gsmmap 28\cd src 29\make
在环境配置过程当中,总会碰见其余奇葩的问题,可是幸运的是,我一遍就成功了,你们必定要碰见问题,去解决问题。
假设咱们已经编译好环境了,下面要作的就是,
第一步:插上硬件,在kali终端输入lsmod | grep usb ,如图:
若是出现的话,证实硬件链接成功。
第二步:
刷固件,就是把程序烧写到手机里面,
输入命令:
./osmocon -m c123xor -p /dev/ttyUSB0 ../../target/firmware/board/compal_e88/layer1.compalram.bin
而后按一下开机键,就开始刷了,接下来会出现过程代码。
大概15秒后,完成,手机屏幕会出现以下提示,说明刷固件成功。
第三步:
新建一个终端,输入命令:
cd ~/osmocom-bb/src/host/layer23/src/misc./cell_log -O
这个命令是扫描可用信道,会列出相关信道的信息
其中出现的ARFCN就是信道编号。
第四步:
新建一个终端,输入命令:
./ccch_scan -i 127.0.0.1 -a 655
其中最后一个数字表明ARFCN号,就是根据上一个终端得出的结果。这个命令表明在信道655上嗅探。
第五步:
新开一个终端,输入命令:
wireshark -k -i lo -f 'port 4729'
而且wireshark的过滤器选择gsm_sms,就可静静的等待一下。结果如图:
今天的运气仍是比较好的,短短5分钟就嗅探到了6条短信。若是嗅探不到的话,就须要换个信道试一试。