四、 系統實作
4.2 Snort Cross-compiling
為了讓原本只能在 Ubuntu PC 下運行的 snort 移植到 Android 系統中執行來幫 助我們監控網路封包是否含有隱私資料的洩漏,我們必須利用 snort 的開源原始碼 進行交叉編譯(cross compiling)[19]來將 snort 編譯成 Android 可以執行的 ARM 版 本。在這一小截中我們會詳細地解釋如何將 snort 原始碼編譯成 Android 可執行的 版本。
為了在 Linux PC 系統環境進行交叉編譯,首先必須先至 Codesourcery 官網下 載 sourcery g++ Lite 此一交叉編譯程式並且設定環境變數使的系統能使用其提供的 功能指令,之後即可開始進行交叉編譯。
首先我們必須先將 snort 程式所需的 libraries 也都交叉編譯為 Android 系統上可 使用的版本,而 snort 需要的 libraries 有 libpcap、libpcre、libdaq、libdnet、zlib、ncurses,
至各個 library 以及 snort 官網下載其原始碼,接下來會一一解釋如何對這些 libraries 作交叉編譯。
I. Libpcap
首先必須在 Ubuntu PC 系統環境安裝 flex 以及 bison 套件
sudo apt-get install flex bison
之後即可對 libpcap 原始碼進行設定編譯參數
CC=arm-none-linux-gnueabi-gcc ./configure --host=arm-linux
--prefix=/your/target/directory --with-pcap=linux LDFLAGS="-static"
20
其中”—prefix”選項代表著編譯完成後的 library 的存放目錄位置,設定好參 數後即可開始交叉編譯
make & make install II. Libpcre
對其原始碼作編譯參數設定
CC=arm-none-linux-gnueabi-gcc ./configure --host=arm-linux --prefix=/your/target/directory LDFLAGS="-static"
CXX=arm-none-linux-gnueabi-g++
設定完成後進行交叉編譯
make & make install III.Libdaq
對其原始碼作編譯參數設定
CC=arm-none-linux-gnueabi-gcc ./configure -- prefix=/your/target/directory --with-libpcap-includes=snort’s directory/out/include --with-libpcap-libraries=
snort’s directory /out/lib --host=arm-linux LDFLAGS="-static" --enable-static 設定完成後進行交叉編譯
make & make install IV. Libdnet
對其原始碼作編譯參數設定
CC=arm-none-linux-gnueabi-gcc ./configure --host=arm-linux --prefix=/your/target/directory --with-libpcap-libraries=snort’s
directory/out/lib/ LDFLAGS=”-static” CXX=arm-none-linux-gnueabi-g++
21
設定完成後進行交叉編譯
make & make install V. Zlib
對其原始碼作編譯參數設定
CC=arm-none-linux-gnueabi-gcc ./configure --prefix=/your/target/directory – static
設定完成後進行交叉編譯
make & make install VI. Ncurses
對其原始碼作編譯參數設定
CC=arm-none-linux-gnueabi-gcc AR=arm-none-linux-gnueabi-ar CXX=arm-none-linux-gnueabi-g++ ./configure --host=arm-linux --target=arm-linux --prefix=/CrossCompile 工具之目錄
/arm-none-linux-gnueabi/libc/usr 設定完成後進行交叉編譯
make & make install
上述的 libraries 交叉編譯完成後使用下列指令對 snort 原始碼進行編譯參數設定 CC=arm-none-linux-gnueabi-gcc AR=arm-none-linux-gnueabi-ar
RANLIB=arm-none-linux-gnueabi-ranlib ./configure --host=arm-linux --prefix=/your/target/directory LDFLAGS="-static"
CXX=arm-none-linux-gnueabi-g++ --with-libpcap-libraries=snort’s directory/out/lib --with-libpcre-libraries= snort’s directory /out/lib
--with-daq-libraries= snort’s directory /out/lib --with-dnet-libraries= snort’s
22
directory /out/lib --with-
mysql-libraries= snort’s directory /out/lib --with-libpcre-includes= snort’s directory /out/include --with-daq-includes= snort’s directory /out/include --with-dnet-includes= snort’s directory /out/include
設定完成後開啟編輯”snort 根目錄/src/Makefile”檔案將
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS)
\
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
改成
INK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS)
\
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -all-static -o $@
修改完成並儲存之後進行交叉編譯
make & make install
編譯完成之後我們即可得到可在 Android 系統上執行的 snort 執行檔,之 後我們就可在 Android 系統上監控網路封包來記錄 APP 執行期間隱私資料洩漏 的行為。
23