第二章 準(zhǔn)備實(shí)驗(yàn)環(huán)境
作者:Aditya Gupta
譯者:飛龍
協(xié)議:CC BY-NC-SA 4.0
在上一章中,我們了解了 Android 安全性及其體系結(jié)構(gòu)的基礎(chǔ)知識(shí)。 在本章中,我們將了解如何建立 Android 滲透測(cè)試實(shí)驗(yàn)環(huán)境,其中包括下載和配置 Android SDK 和 Eclipse。 我們將深入了解 ADB,并了解如何創(chuàng)建和配置 Android 虛擬設(shè)備(AVD)。
2.1 建立開(kāi)發(fā)環(huán)境
為了構(gòu)建 Android 應(yīng)用程序或創(chuàng)建 Android 虛擬設(shè)備,我們需要配置開(kāi)發(fā)環(huán)境,以便運(yùn)行這些應(yīng)用程序。 因此,我們需要做的第一件事是下載 Java 開(kāi)發(fā)工具包(JDK),其中包括 Java 運(yùn)行時(shí)環(huán)境(JRE):
-
為了下載 JDK,我們需要訪問(wèn)
http://www.oracle.com/technetwork/java/javase/downloads/index.html,并根據(jù)我們所在的平臺(tái)下載 JDK 7。就像下載它并運(yùn)行下載的可執(zhí)行文件一樣簡(jiǎn)單。 在以下屏幕截圖中,你可以看到我的系統(tǒng)上安裝了 Java:
-
一旦我們下載并安裝了 JDK,我們需要在我們的系統(tǒng)上設(shè)置環(huán)境變量,以便可以從任何路徑執(zhí)行 Java。
對(duì)于 Windows 用戶,我們需要右鍵單擊
My Computer(我的電腦)圖標(biāo),然后選擇Properties(屬性)選項(xiàng)。 -
接下來(lái),我們需要從頂部選項(xiàng)卡列表中選擇
Advanced system settings(高級(jí)系統(tǒng)設(shè)置)選項(xiàng): -
一旦我們進(jìn)入了
System Properties(系統(tǒng)屬性)對(duì)話框,在右下角,我們可以看到Environment Variables...(環(huán)境變量)選項(xiàng)。 當(dāng)我們點(diǎn)擊它,我們可以看到另一個(gè)窗口,包含系統(tǒng)變量及其值,在System variables(系統(tǒng)變量)部分下: -
在新的彈出對(duì)話框中,我們需要單擊
Variables(變量)下的PATH文本框,并鍵入 Java 安裝文件夾的路徑:對(duì)于 Mac OS X,我們需要編輯
/.bash_profile文件,并將 Java 的路徑追加到PATH變量。在 Linux 機(jī)器中,我們需要編輯
./bashrc文件并附加環(huán)境變量行。 這里是命令:$ nano ~/.bashrc $ export JAVA_HOME=`/usr/libexec/java_home -v 1.6` or export JAVA_HOME=`/usr/libexec/java_home -v 1.7`你還可以通過(guò)從終端運(yùn)行以下命令來(lái)檢查 Java 是否已正確安裝和配置:
$ java --version -
一旦我們下載并配置了 Java 的環(huán)境變量,我們需要執(zhí)行的下一步是下載
http://developer.android.com/sdk/index.html中提供的 Android ADT 包。ADT 包是由 Android 團(tuán)隊(duì)準(zhǔn)備的一個(gè)完整的包,包括配置了 ADT 插件,Android SDK 工具,Android 平臺(tái)工具,最新的 Android 平臺(tái)和模擬器的 Android 系統(tǒng)映像的 Eclipse。這大大簡(jiǎn)化了早期下載和使用 Android SDK 配置 Eclipse 的整個(gè)過(guò)程,因?yàn)楝F(xiàn)在的一切都已預(yù)先配置好了。
一旦我們下載了 ADT 包,我們可以解壓它,并打開(kāi) Eclipse 文件夾。
-
啟動(dòng)時(shí),ADT 包將要求我們配置 Eclipse 的工作區(qū)。
workspace(工作空間)是所有 Android 應(yīng)用程序開(kāi)發(fā)項(xiàng)目及其文件將被存儲(chǔ)的位置。在這種情況下,我已將所有內(nèi)容保留默認(rèn),并選中Use this as the default and do not ask me again(使用此為默認(rèn)值,不再詢問(wèn)我)復(fù)選框: 一旦完全啟動(dòng),我們可以繼續(xù)創(chuàng)建 Android 虛擬設(shè)備。 Android 虛擬設(shè)備是配置用于特定版本的 Android 的模擬器配置。 模擬器是與 Android SDK 軟件包一起提供的虛擬設(shè)備,通過(guò)它,開(kāi)發(fā)人員可以運(yùn)行正常設(shè)備的應(yīng)用程序,并與他們?cè)趯?shí)際設(shè)備上進(jìn)行交互。 這對(duì)于沒(méi)有 Android 設(shè)備但仍然想創(chuàng)建 Android 應(yīng)用程序的開(kāi)發(fā)者也很有用。
注
這里要注意的一個(gè)有趣的特性是,在 Android 中,模擬器運(yùn)行在 ARM 上,模擬的所有的事情與真實(shí)設(shè)備完全相同。 然而,在 iOS 中,我們的模擬器只是模擬環(huán)境,并不擁有所有相同組件和平臺(tái)。
2.2 創(chuàng)建 Android 虛擬設(shè)備
為了創(chuàng)建Android虛擬設(shè)備,我們需要執(zhí)行以下操作:
訪問(wèn) Eclipse 的頂部欄,然后點(diǎn)擊 Android 圖標(biāo)旁邊的設(shè)備圖標(biāo)。 這將打開(kāi)一個(gè)新的
Android Virtual Device Manager(Android 虛擬設(shè)備管理器)窗口,其中包含所有虛擬設(shè)備的列表。 這是一個(gè)很好的選擇,通過(guò)點(diǎn)擊New(新建)按鈕,創(chuàng)建一個(gè)新的虛擬設(shè)備。-
我們還可以通過(guò)從終端運(yùn)行 android 命令并訪問(wèn)工具,然后管理 AVD 來(lái)啟動(dòng) Android 虛擬設(shè)備。 或者,我們可以簡(jiǎn)單指定 AVD 名稱,并使用模擬器
-avd [avd-name]命令來(lái)啟動(dòng)特定的虛擬設(shè)備。這會(huì)打開(kāi)一個(gè)新窗口,其中包含需要為 Android 虛擬設(shè)備配置的所有屬性(尚未創(chuàng)建)。 我們將配置所有選項(xiàng),如下面的截圖所示:
一旦我們點(diǎn)擊
OK并返回到 AVD 管理器窗口,我們將看到我們新創(chuàng)建的 AVD。-
現(xiàn)在,只需選擇新的 AVD,然后單擊
Start...(開(kāi)始)來(lái)啟動(dòng)我們創(chuàng)建的虛擬設(shè)備。它可能需要很長(zhǎng)時(shí)間,來(lái)為你的第一次使用加載,因?yàn)樗谂渲盟械挠布蛙浖渲?,?lái)給我們真正的電話般的體驗(yàn)。
在以前的配置中,為了節(jié)省虛擬設(shè)備的啟動(dòng)時(shí)間,選中
Snapshot復(fù)選框也是一個(gè)不錯(cuò)的選擇。一旦設(shè)備加載,我們現(xiàn)在可以訪問(wèn)我們的命令提示符,并使用 android 命令檢查設(shè)備配置。 此二進(jìn)制文件位于安裝中的
/sdk/tools文件夾下的adt-bundle文件夾中。我們還要設(shè)置位于
sdk文件夾中的tools和platform-tools文件夾的位置,就像我們之前使用環(huán)境變量一樣。-
為了獲取我們系統(tǒng)中已連接(或加載)的設(shè)備的詳細(xì)配置信息,可以運(yùn)行以下命令:
android list avd我們?cè)谙旅娴钠聊唤貓D中可以看到,上面的命令的輸出顯示了我們系統(tǒng)中所有現(xiàn)有 Android 虛擬設(shè)備的列表:
我們現(xiàn)在將繼續(xù),使用 ADB 或 Android Debug Bridge 開(kāi)始使用設(shè)備,我們?cè)谏弦徽轮幸呀?jīng)看到。 我們還可以通過(guò)在終端中執(zhí)行
emulator -avd [avdname]命令來(lái)運(yùn)行模擬器。
2.3 滲透測(cè)試實(shí)用工具
現(xiàn)在,讓我們?cè)敿?xì)了解一些有用的 Android 滲透測(cè)試實(shí)用工具,如 Android Debug Bridge,Burp Suite 和 APKTool。
Android Debug Bridge
Android Debug Bridge 是一個(gè)客戶端 - 服務(wù)器程序,允許用戶與模擬器器或連接的 Android 設(shè)備交互。 它包括客戶端(在系統(tǒng)上運(yùn)行),處理通信的服務(wù)器(也在系統(tǒng)上運(yùn)行)以及作為后臺(tái)進(jìn)程在模擬器和設(shè)備上上運(yùn)行的守護(hù)程序。 客戶端用于 ADB 通信的默認(rèn)端口始終是 5037,設(shè)備使用從 5555 到 5585 的端口。
讓我們繼續(xù),通過(guò)運(yùn)行adb devices命令開(kāi)始與啟動(dòng)的模擬器交互。 它將顯示模擬器已啟動(dòng)并運(yùn)行以及連接到 ADB:
C:\Users\adi0x90\Downloads\adt-bundle\sdk\platform-tools>adb devices
List of devices attached
emulator-5554 device
在某些情況下,即使模擬器正在運(yùn)行或設(shè)備已連接,你也不會(huì)在輸出中看到設(shè)備。 在這些情況下,我們需要重新啟動(dòng) ADB 服務(wù)器,殺死服務(wù)器,然后再次啟動(dòng)它:
C:\Users\adi0x90\Downloads\adt-bundle\sdk\platform-tools>adb kill-server
C:\Users\adi0x90\Downloads\adt-bundle\sdk\platform-tools>adb start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
我們還可以使用pm(包管理器)工具獲取所有已安裝的軟件包的列表,這可以在 ADB 中使用:
adb shell pm list packages
如下面的屏幕截圖所示,我們將獲得設(shè)備上安裝的所有軟件包的列表,這在以后的階段可能會(huì)有用:

此外,我們可以使用dumpsys meminfo然后是adb shell命令,獲取所有應(yīng)用程序及其當(dāng)前內(nèi)存占用的列表

我們還可以獲取logcat(這是一個(gè)讀取 Android 設(shè)備事件日志的工具),并將其保存到特定文件,而不是在終端上打?。?/p>
adb logcat -d -f /data/local/logcats.log
此處的-d標(biāo)志指定轉(zhuǎn)儲(chǔ)完整日志文件的并退出,-f標(biāo)志指定寫入文件而不是在終端上打印。 這里我們使用/data/local位置,而不是任何其他位置,因?yàn)檫@個(gè)位置在大多數(shù)設(shè)備中是可寫的。
我們還可以使用df命令檢查文件系統(tǒng)以及可用空間和大?。?/p>

在 Android SDK 中還有另一個(gè)很棒的工具,稱為 MonkeyRunner。 此工具用于自動(dòng)化和測(cè)試 Android 應(yīng)用程序,甚至與應(yīng)用程序交互。 例如,為了使用 10 個(gè)自動(dòng)化觸摸,敲擊和事件來(lái)測(cè)試應(yīng)用程序,我們可以在adb shell中使用monkey 10命令:
root@generic:/ # monkey 10
monkey 10
Events injected: 10
## Network stats: elapsed time=9043ms (0ms mobile, 0ms wifi, 9043ms not connected)
這些是一些有用的工具和命令,我們可以在 ADB 中使用它們。 我們現(xiàn)在將繼續(xù)下載一些我們將來(lái)使用的其他工具。
Burp Suite
我們將在接下來(lái)的章節(jié)中使用的最重要的工具之一是 Burp 代理。 我們將使用它來(lái)攔截和分析網(wǎng)絡(luò)流量。 應(yīng)用程序中的許多安全漏洞可以通過(guò)攔截流量數(shù)據(jù)來(lái)評(píng)估和發(fā)現(xiàn)。 在以下步驟中執(zhí)行此操作:
-
我們現(xiàn)在從官方網(wǎng)站
http://portswigger.net/burp/download.html下載 burp 代理。
下載并安裝后,你需要打開(kāi) Burp 窗口,它如以下屏幕截圖所示。 你還可以使用以下命令安裝 Burp:java –jar burp-suite.jar我們?cè)谙旅娴慕貓D中可以看到,我們運(yùn)行了 Burp 并顯示了默認(rèn)界面:
在 Burp Suite 工具中,我們需要通過(guò)單擊
Proxy(代理)選項(xiàng)卡并訪問(wèn)Options(選項(xiàng))選項(xiàng)卡來(lái)配置代理設(shè)置。在
Options選項(xiàng)卡中,我們可以看到默認(rèn)選項(xiàng)被選中,這是127.0.0.1:8080。 這意味著從我們的系統(tǒng)端口8080發(fā)送的所有流量將由 Burp Suite 攔截并且在它的窗口顯示。我們還需要通過(guò)選擇默認(rèn)代理
127.0.0.1:8080并單擊Edit(編輯)來(lái)檢查隱藏的代理選項(xiàng)。-
接下來(lái),我們需要訪問(wèn)
Request handling(請(qǐng)求處理)選項(xiàng)卡,并選中Support invisible proxying (enable only if needed)(支持不可見(jiàn)代理(僅在需要時(shí)啟用))復(fù)選框: -
最后,我們使用
invisible選項(xiàng)運(yùn)行代理: -
一旦設(shè)置了代理,我們將啟動(dòng)我們的模擬器與我們剛剛設(shè)置的代理。 我們將使用以下模擬器命令來(lái)使用
http-proxy選項(xiàng):emulator -avd [name of the avd] -http-proxy 127.0.0.1:8080我們可以在下面的截圖中看到命令如何使用:
因此,我們已經(jīng)配置了 Burp 代理和模擬器,導(dǎo)致所有的模擬器流量現(xiàn)在會(huì)通過(guò) Burp。 在這里,你在訪問(wèn)使用 SSL 的網(wǎng)站時(shí)可能會(huì)遇到問(wèn)題,我們將在后面的章節(jié)中涉及這些問(wèn)題。
APKTool
Android 逆向工程中最重要的工具之一是 APKTool。 它為逆向第三方和封閉的二進(jìn)制 Android 應(yīng)用程序而設(shè)計(jì)。 這個(gè)工具將是我們?cè)谖磥?lái)章節(jié)中的逆向主題和惡意軟件分析的重點(diǎn)之一。 為了開(kāi)始使用 APKTool,請(qǐng)執(zhí)行以下步驟:
-
為了下載 APKTool,我們需要訪問(wèn)
https://code.google.com/p/android-apktool/downloads/list。在這里,我們需要下載兩個(gè)文件:
apktool1.5.3.tar.bz2,其中包含 apktool 主二進(jìn)制文件,另一個(gè)文件取決于平臺(tái) - 無(wú)論是 Windows,Mac OS X 還是 Linux。 一旦下載和配置完成,出于便利,我們還需要將 APKTool 添加到我們的環(huán)境變量。 此外,最好將 APKTool 設(shè)置為環(huán)境變量,或者首先將其安裝在
/usr/bin中。 然后我們可以從我們的終端運(yùn)行 APKTool,像下面的截圖這樣:

總結(jié)
在本章中,我們使用 Android SDK,ADB,APKTool 和 Burp Suite 建立了 Android 滲透測(cè)試環(huán)境。 這些是 Android 滲透測(cè)試者應(yīng)該熟悉的最重要的工具。
在下一章中,我們將學(xué)習(xí)如何逆向和審計(jì) Android 應(yīng)用程序。 我們還將使用一些工具,如 APKTool,dex2jar,jd-gui 和一些我們自己的命令行必殺技。










