之前看過好多大牛玩osmocomBB項(xiàng)目,改個(gè)手機(jī),連電腦,然后編譯一堆東西,到最后都是開個(gè)console,滿屏紅紅綠綠的文字滾動(dòng),看著很吊。
但都不說最終能干啥,滾屏完了就沒了,大牛都太低調(diào)了,最近有朋友也在搞這個(gè),了解了一下,以下描述都是我最近查閱的大量鳥文資料及少量中文資料之后的理解,如有誤望指出。
    OsmocomBB是國(guó)外一個(gè)開源項(xiàng)目,是GSM協(xié)議棧(Protocols stack)的開源實(shí)現(xiàn),全稱是Open source mobile communication Baseband.目的是要實(shí)現(xiàn)手機(jī)端從物理層(layer1)到layer3的三層實(shí)現(xiàn)。

    這里記錄一下過程,以便備忘和其它有需要的童鞋少走彎路。

相關(guān)鏈接:

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


硬件部分


支持的手機(jī)

手機(jī)硬件修改

    國(guó)內(nèi)比較多的是C118,需要換兩個(gè)balun,不知道怎么翻譯,好像是接收數(shù)據(jù)過濾用的,不過手藝不好的就算了,不換也可以用,只是沒有uplink的數(shù)據(jù),只能抓到基站廣播的數(shù)據(jù)。
官方的教程http://bb.osmocom.org/trac/wiki/Hardware/FilterReplacement
以下貼幾個(gè)我改的圖,有熱風(fēng)槍應(yīng)該好改一些,反正沒有好的工具的話我這輩子是不會(huì)再改這個(gè)了。

一打開蓋子就看到兩個(gè)大鐵殼,傻眼了

還好我有小電機(jī)把上面那個(gè)屏蔽層磨掉了

這么小真是下不去手啊,有熱風(fēng)槍會(huì)好辦一點(diǎn),再來幾個(gè)改機(jī)的圖



以下刷的rssi固件,如果沒改硬件,uplink信號(hào)沒有的,圖中是downlink,uplink的圖沒截




刷機(jī)線

    自己買根T191線或者把帶的耳機(jī)線改改(下圖的紅白顏色說的是手機(jī)自帶的耳機(jī)線,別的耳機(jī)線可能顏色不同)


 


下圖參考


 


軟件部分

大家也可以上官網(wǎng)查看手冊(cè)及相關(guān)刷機(jī)、編譯步驟:
http://bb.osmocom.org/trac/wiki/GettingStarted

    不過我按照官網(wǎng)的步驟編譯的時(shí)候卡在開始下載交叉編譯環(huán)境上了,由于時(shí)間太久了,文中那個(gè)鏈接已經(jīng)失效,使用這里的地址:http://bb.osmocom.org/trac/wiki/GnuArmToolchain

下面是完整步驟,我的Ubuntu 12.10 內(nèi)核3.5.0-17 x86_64編譯測(cè)試通過,干凈的系統(tǒng)按照我下面的步驟一般都不會(huì)有什么問題:


-------------------------準(zhǔn)備交叉編譯環(huán)境--------------------------

cd ~
mkdir osmcombb
cd osmcombb
wget http:
//bb.osmocom.org/trac/raw-attachment/wiki/GnuArmToolchain/gnu-arm-build.2.sh
chmod +x gnu-arm-build.2.sh
sudo 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
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
export PATH
=$PATH:<YOURPATH>/install/bin

 

--------------------------準(zhǔn)備libosmocore----------------------

git clone git://git.osmocom.org/libosmocore.git
cd libosmocore/
autoreconf 
-i
.
/configure
make
sudo make install
cd ..
sudo ldconfig

 

---------------------------編譯osmocomBB---------------------

我編譯了無數(shù)遍無數(shù)版本,包括master分支,Sylvain/burst_ind分支,sylvain/testing分支,還有另外一個(gè)老外存的老版本,需要打patch補(bǔ)丁的版本,最終還是用luca/gsmmap的版本成功,也不能說前面說的幾個(gè)版本有問題,之前有很多問題,編譯器,git等等一團(tuán)亂麻,可能是我別的地方有出錯(cuò)。

另:Sylvain/burst_ind分支是網(wǎng)上說的比較多的帶sniffer功能的分支,但是編譯完無法刷固件,需要修改osmocom-bb/src/host/osmocon/osmocon.c,文件中添加定義

#define I_HAVE_A_CP210x
否則會(huì)出現(xiàn)“Unable to set custom baudrate, please use appropriate cable",即使這里通過了我刷了還是不行。

ok,我們使用luca/gsmmap分支,
GsmMap項(xiàng)目使用osmocom-bb項(xiàng)目所支持的手機(jī)通過捕捉GSM數(shù)據(jù),對(duì)應(yīng)地理位置;然后用戶上傳后被分析,結(jié)果會(huì)被展示在項(xiàng)目主頁(yè)上的地圖上。
該項(xiàng)目的主要目標(biāo)是建立GSM網(wǎng)絡(luò)的地理分布,然后分析 偽造,攔截和跟蹤的可能性,會(huì)在官網(wǎng)上披露GSM的安全性。
官方提供一個(gè)自己的LiveCD,基于Debian,木有xWindow,參加項(xiàng)目的可以傻瓜化的使用并且抓包,用VirtualBOX或者VMware載入,開機(jī)后記得把osmocom-bb所用的C1**系列手機(jī)和數(shù)據(jù)線連到虛擬機(jī),然后按照提示輸入gsm即可開始。

sudo aptitude install libtool shtool autoconf git-core pkg-config make gcc
git clone git:
//git.osmocom.org/osmocom-bb.git
cd osmocom-bb
git checkout 
--track origin/luca/gsmmap

//git clone git://git.osmocom.org/osmocom-bb.git
//cd osmocom-bb
//git pull –rebase

默認(rèn)編譯出的版本發(fā)送信號(hào)相關(guān)的功能是被注釋掉的,用mobile啟動(dòng)layer23后會(huì)一直于搜信號(hào)的過程中,因?yàn)闊o法發(fā)送信號(hào)。
如果需要進(jìn)行實(shí)網(wǎng)測(cè)試需要打開src/target/firmware/Makefile文件中的編譯開關(guān)
把osmocom-bb/src/target/firmwire/下的Makefile中的 CONFIG_TX_ENABLE宏打開:
# Uncomment this line if you want to enable Tx (Transmit) Support.
-#CFLAGS +=-DCONFIG_TX_ENABLE
+CFLAGS +=-DCONFIG_TX_ENABLE
然后到src目錄下編譯
cd src
make

 

-------------------------運(yùn)行-------------------------------------------

編譯一切OK后,進(jìn)行刷手機(jī)操作,我的C118手機(jī),固件都是在compal_e88目錄下的bin文件,會(huì)有很多bin文件


其中compalram為我們用來刷手機(jī)的,只會(huì)寫入ram,重啟手機(jī)就沒了,highram是為了加載超過65535的大文件,比如rssi.highram.bin,e88flash和e88loader是用來真實(shí)刷入手機(jī)固件的,慎用,因?yàn)槲疫€想平時(shí)打打電話呢。我之前就刷掛了,bootloader還在,還好我買了兩個(gè),把另外一個(gè)讀出來重新寫回去了。

    layer1和src/host/layer23/src/mobile/mobile程序,實(shí)現(xiàn)了從layer1到layer3的功能,我們主要用layer1,rssi是用來測(cè)試信號(hào)的,不同的信道信號(hào)強(qiáng)度等等一些相關(guān)信息,需要配合chainload或loader刷入,這幾個(gè)應(yīng)用詳細(xì)說明在這里:http://bb.osmocom.org/trac/wiki/Applications

連上硬件,使用lsusb和dmesg查看端口號(hào),我都是ttyUSB0,c123和c118手機(jī)都用c123xor參數(shù),CompalE88(C118/C120/C121/C123),CompalE99(C155)

cd host/osmocon/
sudo .
/osmocon -/dev/ttyUSB0 -m c123xor ../../target/firmware/board/compal_e88/layer1.compalram.bin

然后在手機(jī)關(guān)機(jī)的狀態(tài)下,點(diǎn)按開機(jī)鍵,不是長(zhǎng)按,屏幕就會(huì)顯示下載刷寫固件并執(zhí)行,如下圖就說明成功了


此時(shí)手機(jī)應(yīng)該顯示layer1的提示


 


新開一個(gè)命令行窗口,進(jìn)行搜索基站信號(hào),

cd osmocom-bb/src/host/layer23/src/misc
sudo .
/cell_log -O


關(guān)于ARFCN號(hào),貼個(gè)表供參考

頻段 名稱 信道號(hào) 上行(MHz) 下行(MHz) 其他
GSM 850 GSM 850 128 - 251 824,0 - 849,0 869,0 - 894,0 美國(guó), 南美洲國(guó)家 和 亞洲部分國(guó)家。
GSM 900 P-GSM 900 1-124 890,0 - 915,0 935,0 - 960,0 GSM最先實(shí)現(xiàn)的頻段,也是使用最廣的頻段。
E-GSM 900 975 - 1023 880,0 - 890,0 925,0 - 935,0 900M擴(kuò)展頻段
R-GSM 900 n/a 876,0 - 880,0 921,0 - 925,0 鐵路GSM(GSM-R),為鐵路調(diào)度通信系統(tǒng)開發(fā)的特殊版本。
GSM1800 GSM 1800 512 - 885 1710,0 - 1785,0 1805,0 - 1880,0 適用于對(duì)信道容量需求大的市場(chǎng),應(yīng)用范圍僅次于900M。
GSM1900 GSM 1900 512 - 810 1850,0 - 1910,0 1930,0 - 1990,0 主要用于美洲國(guó)家,由于有頻率重疊,與1800M系統(tǒng)不兼容。

 

然后使用ccch_scan進(jìn)行抓包,-a參數(shù)為指定ARFCN號(hào),我們用上圖中信號(hào)比較強(qiáng)的30

sudo ./ccch_scan -127.0.0.1 -30


layer23使用src/host/layer23/src/mobile下的mobile程序?qū)崿F(xiàn),如果只是抓包數(shù)據(jù),下列命令不需要執(zhí)行

cd src/host/layer23/src/mobile
sudo .
/mobile -127.0.0.1

執(zhí)行了mobile程序之后,本機(jī)會(huì)開啟4247端口,可以使用telnet進(jìn)行訪問,然后配置執(zhí)行,命令及參數(shù)執(zhí)行方式跟交換機(jī)類似

telnet localhost 4247



使用wireshark進(jìn)行抓包分析還是比較方便的

sudo wireshark --i lo -'port 4729'

 uplink的比較少,不知道是不是因?yàn)楦臋C(jī)把信號(hào)改弱了


有個(gè)uplink,估計(jì)就在我旁邊發(fā)的




附:

    iphone工程模式:撥號(hào)界面 *3001#12345#* 按呼叫鍵,可查到當(dāng)前連接的ARFCN號(hào)

    我的三星三兒子:撥號(hào)界面 *#*#4636#*#* ,沒有ARFCN,只有cell_id,不用找了,這個(gè)手機(jī)的android下沒有顯示arfcn的工具。



thanks to OsmoCarpenteR, a guy in the IRC