如何開始對Android應用的逆向分析?
本文是我的關於如何開始Android逆向系列文章的第一部分。在文末提供了一個文檔,你可以根據該文檔說明部署同我一樣的實驗環境。
在了解android應用的逆向之前,你必須對android平台及其架構和android應用程序的構建塊(組件)已有了一個較好的理解。如果你並不了解這些,那麼我建議你先參閱以下鏈接,然後再繼續瀏覽本文。
Android平台架構
Android應用程序及其組件
Android應用程序及其架構(PPT)
我當前的實驗室環境如下:
主機系統為windows,其中安裝了virtual box 和 genymotion
virtual box 和 genymotion的設備都處於橋接模式
Android 4.4 (kitkat API version 19)
在virtual box中,kali linux也同時運行(與genymotion一起)
註:該設置並非固定,你可以根據自身需求環境進行調整。例如,你也可以使用kali linux作為你的主機系統,並在上面安裝genymotion。
在正式開始我們的逆向之旅前,我想先向大家介紹一下名為adb(android debugger bridge)的工具/伺服器。它可以幫助我們連接,獲取數據並將指令傳遞給遠程Android設備(調試模式可以通過設備設置中的開發者模式打開)。當前情況下,我們將使用genymotion設備(虛擬設備)。
對於安卓應用的逆向,這裡有一個非常好的可供我們學習和練習的apk - DIVA ( Damn insecure and vulnerable mobile Application )。這是一個由Payatu的安全分析師開發的脆弱安卓應用。下面我們也將以該應用為例:
首先,讓我們來啟動genymotion設備:
在Windows/Linux中搜索Genymotion應用
Start genymotion
選中你想要啟動的設備,然後點擊Start按鈕。
如果你以上步驟正確執行,則應該能看到類似以下的界面:
可以看到Android設備已經啟動,現在我們來啟動虛擬機中的kali linux。步驟如下:
啟動virtual box
從中啟動kali虛擬機
註:這兩個虛擬機處於橋接模式。如果有DHCP伺服器,則需要連接到路由器或網路。
現在兩台機器都已啟動,下面讓我們來檢查下kali和Android設備之間的連接情況。為此,我們需要獲取Android設備的IP地址。
導航到設置菜單
單擊WiFi選項
你會在網路中看到WiredSSID
長按「WiredSSID」選項
你會看到如下所示界面
獲取IP後我們回到kali終端,並鍵入以下命令檢查連接情況:
如果命令正確執行,你將會看到以下輸出。
現在讓我們通過執行以下命令,來驗證設備是否真正連接:
通過確認我們得知設備已連接到IP地址192.168.20.74和5555埠(adb默認的連接埠為5555)。
現在,我們就可以在Android設備上執行不同的adb命令了。通過-h選項查看可用參數:
在幫助信息中會為你列出所有可用的參數選項。下面是一些在逆向中時常會用到的命令:
ADB 調試
adb devices – Lists all the connected devices
adb forward – used for forwarding socket connections
adb kill-serve
無線
adb connect – connects to the remote device
adb usb – connects to the USB attached device
包管理器
adb install – install a package adb uninstall - uninstall a package adb shell pm list packages – used for displaying lists of packages installed adb shell pm path – used for displaying package path on device adb shell pm clear
文件管理器
adb pull – used for pulling / downloading a file adb push – used for pushing / uploading a file adb shell ls – used for displaying list of files and directories in the current directory adb shell cd – used for changing the directory adb shell rm- used for removing a file adb shell mkdir – used for creating a directory adb shell touch – used for creating a file adb shell pwd – used for displaying the current path adb shell cp – used for copying a file adb shell mv – used for moving a file
網路
adb shell netstat – used for displaying the statistics for network connection adb shell ping – used for pinging a host / IP adb shell netcfg adb shell ip
Logcat
adb logcat adb shell dumpsys adb shell dumpstate
截圖
adb shell screencap adb shell screenrecord
系統
adb root adb sideload adb shell ps adb shell top adb shell getprop adb shell setprop
在了解adb命令後,下面我們來安裝DIVA(Android應用程序)。
註:請將該應用下載安裝至你的kali機器上,因為所有的adb命令都將從kali中觸發。
執行以下命令安裝該應用:
現在,我們已經完成了diva-beta.apk的安裝。讓我們來驗證下該應用是否已在我們的設備中成功安裝。
可以看到應用程序已被正確安裝,並可在設備的菜單中使用。
讓我們通過單擊該應用程的圖標來啟動它。你將看到如下啟動界面:
當前,DIVA為我們準備了以下挑戰:
不安全的日誌記錄 硬編碼問題 - 第1部分 不安全的數據存儲 - 第1部分 不安全的數據存儲 - 第2部分 不安全的數據存儲 - 第3部分 不安全的數據存儲 - 第4部分 輸入驗證問題 - 第1部分 輸入驗證問題 - 第2部分 訪問控制問題 - 第1部分 訪問控制問題 - 第2部分 訪問控制問題 - 第3部分 硬編碼問題 - 第2部分 輸入驗證問題 - 第3部分
我們將逐一解決上述挑戰,讓你了解Android應用中的不同漏洞。對於第一項挑戰,即不安全日誌記錄,我們可以通過adb命令來檢查diva應用的日誌記錄。命令如下:
如果命令正確執行,你將會看到如下所示內容:
可以看到這裡的日誌記錄非常的雜亂,因為它顯示了許多不同的日誌記錄數據(整個設備)。為了讓我們看起來更加清晰,我將使用grep命令。但在此之前,我們需要首先獲取該應用程序包的進程ID。命令如下:
如果命令正確執行,你將會看到如下所示內容:
adb shell是用於通過adb發送任何shell指令的命令;ps作為shell指令發送,ps的輸出提供給grep命令。Grep是一個非常棒的用於搜索相關字元串的工具,在本例中我們搜索的字元串為「diva」。
現在,讓我們以組合的形式使用logcat和grep命令:
你將看到與該特定進程(即diva)相關的所有日誌。
實驗環境設置文檔
*參考來源:peerlyst,FB小編secist編譯,轉載請註明來自FreeBuf.COM


※淺析AMR智能合約批量轉賬溢出漏洞
※如何使用Tokenvator和Windows Tokens實現提權
TAG:FreeBuf |