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

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

相關鏈接:

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


硬件部分


支持的手機

手機硬件修改

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

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

還好我有小電機把上面那個屏蔽層磨掉了

這么小真是下不去手啊,有熱風槍會好辦一點,再來幾個改機的圖



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




刷機線

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


 


下圖參考


 


軟件部分

大家也可以上官網查看手冊及相關刷機、編譯步驟:
http://bb.osmocom.org/trac/wiki/GettingStarted

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

下面是完整步驟,我的Ubuntu 12.10 內核3.5.0-17 x86_64編譯測試通過,干凈的系統按照我下面的步驟一般都不會有什么問題:


-------------------------準備交叉編譯環境--------------------------

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

 

--------------------------準備libosmocore----------------------

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

 

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

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

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

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

ok,我們使用luca/gsmmap分支,
GsmMap項目使用osmocom-bb項目所支持的手機通過捕捉GSM數據,對應地理位置;然后用戶上傳后被分析,結果會被展示在項目主頁上的地圖上。
該項目的主要目標是建立GSM網絡的地理分布,然后分析 偽造,攔截和跟蹤的可能性,會在官網上披露GSM的安全性。
官方提供一個自己的LiveCD,基于Debian,木有xWindow,參加項目的可以傻瓜化的使用并且抓包,用VirtualBOX或者VMware載入,開機后記得把osmocom-bb所用的C1**系列手機和數據線連到虛擬機,然后按照提示輸入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

默認編譯出的版本發送信號相關的功能是被注釋掉的,用mobile啟動layer23后會一直于搜信號的過程中,因為無法發送信號。
如果需要進行實網測試需要打開src/target/firmware/Makefile文件中的編譯開關
把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

 

-------------------------運行-------------------------------------------

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


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

    layer1和src/host/layer23/src/mobile/mobile程序,實現了從layer1到layer3的功能,我們主要用layer1,rssi是用來測試信號的,不同的信道信號強度等等一些相關信息,需要配合chainload或loader刷入,這幾個應用詳細說明在這里:http://bb.osmocom.org/trac/wiki/Applications

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

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

然后在手機關機的狀態下,點按開機鍵,不是長按,屏幕就會顯示下載刷寫固件并執行,如下圖就說明成功了


此時手機應該顯示layer1的提示


 


新開一個命令行窗口,進行搜索基站信號,

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


關于ARFCN號,貼個表供參考

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

 

然后使用ccch_scan進行抓包,-a參數為指定ARFCN號,我們用上圖中信號比較強的30

sudo ./ccch_scan -127.0.0.1 -30


layer23使用src/host/layer23/src/mobile下的mobile程序實現,如果只是抓包數據,下列命令不需要執行

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

執行了mobile程序之后,本機會開啟4247端口,可以使用telnet進行訪問,然后配置執行,命令及參數執行方式跟交換機類似

telnet localhost 4247



使用wireshark進行抓包分析還是比較方便的

sudo wireshark --i lo -'port 4729'

 uplink的比較少,不知道是不是因為改機把信號改弱了


有個uplink,估計就在我旁邊發的




附:

    iphone工程模式:撥號界面 *3001#12345#* 按呼叫鍵,可查到當前連接的ARFCN號

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



thanks to OsmoCarpenteR, a guy in the IRC