侦听GSM短信常用的是OsmocomBB + C118方案,主要是用luca/gsmmap分支。使用ccch_scan这个程序可以把通信封装成GSMTAP发给本机,然后用WireShark接收GSMTAP并作协议解析和短信解码。国内部分黑客写了Python或Perl脚本,替代WireShark解码,并打印输出或保存到MySQL数据库。还有人写了Web前端,来提高易用性。

针对OBB只支持PCH在TS0的情况,有人改了firmware,分别支持PCH在TS2,TS4和TS6,编译生成了4个firmware。然后又有人把这拿来做生意,用软件狗加密后做成LiveCD出售,这就是网上所谓3信道,4信道版本的由来。

这种泛泛的侦听所有短信的做法效率很低,用处也不大。

而且,ccch_scan只是一个演示程序,本身不是为了侦听所有短信而设计的,功能流程上有很明显的缺陷:程序守听PCH,收到任何的Immediate Assignment就会切换Timeslot跟随通信过程,如果是短信就继续侦听并输出,是话音等就返回PCH继续守听。问题在于离开PCH再到回来这期间可能丢失多个Imm Ass。这就是为什么总有人反映用ccch_scan会漏接短信的原因。

真正合理的设计,应该是master/slave结构,多个master对更多的slave,每个master固定守在一个PCH,收到Imm Ass就分配给一个slave去跟随,slave处理完毕就返回待命。

比如,一个典型的处于闹市的移动S333站型的基站的一个扇面,在ccch_conf=110的情况下,需要4个master和大约16个slave,就可以完整记录所有短信。

这个设计,我还没有看到国内有人实现出来。国外黑客有个半成品,我拿来改写了一部分,除了短信也想把语音通话全部记录下来,现在还没改写完。

相比于简单粗暴的无差别侦听,我个人对于侦听指定目标的短信更有兴趣。其实,ccch_scan有个-t参数可以指定特定的TMSI,基本满足需求,我就直接改写ccch_scan增加了短信解码输出,这样不用借助别的程序,自己就能解决问题

那么问题来了,已知特定目标的手机号码,怎么确定目标手机当前camping在哪个基站,以及TA的TMSI? 如果你确切知道TA在哪儿,只要到TA身边不远拿出Nokia Net Monitor看一下当前ARFCN以及相邻的ARFCN,通常跑不出这几个ARFCN,很容易拿下。

如果只知道大概位置,就需要先确定TA的TMSI,再穷举出TA所连接的基站。TMSI是在LAC范围内有效的,Paging也是在一个LAC里的所有基站同步广播的。而一个LAC覆盖的物理区域还是很大的,在一个城市里不需要切换太多LAC就应该能找到目标的TMSI。

发现目标TMSI比较好用的是Silent SMS。我修改过的mobile程序,可以按特定时序向目标手机发送Silent SMS,然后在PCH上侦听,按照时序和Paging的次数来排查,最终确定目标TMSI。

确定了TMSI之后,继续切换侦听不同基站的PCH,直到在有的基站侦听到了对应的Imm Ass和短信内容通信,就可以确定了。如果基站的ccch_conf不等于000,还需要用目标手机的IMSI算出paging group从而确定该手机所在的TS。

再说说上行短信的侦听。因为手机功率低,手机天线效率低,所以你通常要离目标很近才行,300米以内最好。你所处地势越高,越空旷,接收效果越好。一定要用外接天线,你既然都能忍受带着一台笔记本电脑,为什么不能带好一点的外接天线?天线应该尽量在室外,增益越高越好,最好用定向天线:八木或锅。没有定向天线,就要天线长度尽量长,能有2倍波长以上最好。馈线尽可能短,尽可能高品质。然后说接收设备,C118一定要去除滤波器和换巴伦,RTL-SDR和别的SDR效果也都不错。

然后,你想主动些,利用手机短信验证码重置TA的各个账户,登录进去偷取或修改资料,最好这些短信只有你能收到,TA收不到,这就要用到拦截短信的办法。

要了解短信拦截,先要谈谈鉴权。

通常运营商在Mobile Oriented业务上是要鉴权的,因为他们要计费。而Mobile Terminated业务因为是免费的,配置上就比较松,可能没有鉴权。

如果你运气比较好,还能发现一些基站在MO业务上只要求IMSI来鉴权。这就意味着你可以spoof任何手机号码。只需要去网上的HLR Lookup服务查一下该手机号对应的IMSI就可以了。

如果你通过特殊办法获得了TA的KI,只需要把TA从网络上detach了,你再attach就可以替代TA了。

收短信属于MT业务,一般情况下,联通大部分配置是不要鉴权的,或者简单鉴权比如IMEI。移动老的基站不少也是不要鉴权的,新基站大部分都要SRES鉴权。

一个LAC里不同的基站配置可能不一样,需要侦听来确定。

短信拦截的原理基于race condition,即把响应Paging及收短信的代码从Layer 23搬到Layer 1,这样你就在GSM协议栈上比TA快了一倍,所以你就能先于TA代替TA响应paging和收取短信。

这个功能国外黑客有演示代码,但是bug很多,连LAPDm协议流程都有问题,在国内运营商环境没法正确运行。当然,我已经做了必要的修改。

目前,我正在做的GSM的MITM的实验,即目标手机和基站之间插入一个自制基站和一部攻击手机,诱导目标手机接入自制基站,用攻击手机仿冒目标手机接入运营商网络,从而实现短信的拦截。这种方式不管运营商有没有鉴权,我们都能在不惊动目标的情况下实现短信拦截。

3G和4G短信的侦听是也是要以GSM为基础的,如何实现以后再单独发帖讲。

GSM短信侦听的便宜方案的更多相关文章

  1. Android 编程下短信监听在小米手机中失效的解决办法

    相信很多人写的短信监听应用在小米手机上是拦截不到短信的,这是因为小米对短信的处置权优先分给了系统.我们可以在短信的[设置]→[高级设置]→[系统短信优先]中发现短信的优先处理权默认是分给系统的,只要关 ...

  2. Android短信监听软件

    本案例是在android手机中运行,是一个没有界面的短信监听软件.主要是用BroadcastReceiver来接受短信广播,当接收到短信后就跳转到service中来转发短信.哈哈,不是用来干坏事的.这 ...

  3. Android短信监听(二)——利用ContentObserver实现短信监听

    MainActivity例如以下: package cc.testsmslistener; import cc.testsmslistener.SMSContentObserver.MessageLi ...

  4. wemall app商城源码Android短信监听接收器

    wemall doraemon是Android客户端程序,服务端采用wemall微信商城,不对原商城做任何修改,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可随意定制修改.本文分享其中 ...

  5. Android实战简易教程-第四十枪(窃听风云之短信监听)

    近期在做监听验证码短信自己主动填入的功能,无意间想到了一个短信监听的办法. 免责声明:短信监听本身是一种违法行为,这里仅仅是技术描写叙述.请大家学习技术就可以.(哈哈) 本实例是基于bmob提供的后台 ...

  6. Android 短信监听及用途分析

    监听系统短信这个只能作为一个技术点来研究下,读者可能在工作中可能不会哦涉及到,一般的应用软件也不会有这个需求 但是作为程序员呢,多了解一下也是好的. Android 监听系统短信有什么用? 1.对系统 ...

  7. Moto C118 基于 Osmocom-BB 和 OpenBTS 搭建小型GSM短信基站

    此文章PDF文档下载地址:点击下载 0x00 写在前面 大家应该都听说过摩托罗拉C118配合Osmocom-BB实现GSM网络下的短信拦截功能吧,在14年左右新出了一种玩法就是Osmocom-BB的s ...

  8. GSM 短信相关AT指令(转)

    // AT+CSMS 选择消息业务AT+CSMS=0 // SMS 的AT 命令兼容GSM 07.05 Phase 2AT+CSMS=1 // SMS 的AT 命令兼容GSM 07.05 Phase ...

  9. Android短信监听实现,及Android4.4之后短信机制变更

    前阵子公司有一个项目,简单的监听短信应用,功能只有如下两个: 1.监听短信并获取短信内容上传服务器: 2.从服务器获取短信内容,发送出去    按照传统的思路,监听短信我们有两种方式:第一种是使用广播 ...

随机推荐

  1. python 练习 9

    #!/usr/bin/python # -*- coding: UTF-8 -*- for i in range(1,5): for j in range(1,5): for k in range(1 ...

  2. Linux基础: 系统加载过程和运行级别含义

    BIOS 有固化代码指向mbr,mbr指向grub(/boot/grub/下有很多引导配置信息),grub里可以配置多种linux内核vmlinux文件. 启动内核以后就开始加载各种驱动模块并进行系统 ...

  3. PHP框架学习错误总结

    错误一: Fatal error: “Uncaught exception 'Zend_Controller_Response_Exception' with message 'Cannot send ...

  4. hdu 3948 Portal (kusral+离线)

    Portal Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  5. hdu--(1247)Hat’s Words(trie树)

    Hat’s Words Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  6. hdu----(3068)最长回文(manacher)

    最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  7. jsp 文件引入

    <!-- 清除浏览器中的缓存,它和其它几句合起来用,就可以使你再次进入曾经访问过的页面时,ie浏览器必须从服务端下载最新的内容,达到刷新的效果. --><meta http-equi ...

  8. formvalidator4.1.3 使用过程中一些问题的解决

    在使用formvalidator4.1.3 插件时  发现 正常情况调用时没有问题的,但是我们的项目中需要把css  .js 之类的静态资源用单独的域名加载. 那么问题就来了在 该插件中 有一段这样的 ...

  9. / etc / init.d / iptables: line 268: restorecon: command not found

    When I tried to restart iptables from vps , I got the following error. Iptables encountered such a p ...

  10. iOS --- 通过openURL实现APP之间跳转并传递数据

    在IOS中,实现一个应用启动另外一个应用,使用UIApplication的openURL:方法就可实现,这里以test跳到test02为例.(需要先创建这两个工程) 注册自定义URL协议(在test中 ...