移動應用測試之APP日志的抓取
1.為什么要抓取app日志
在移動應用滲透測試中敏感信息安全風險檢測需要對應用日志進行分析,日志內容如果包含敏感信息,可能會造成數據泄漏的風險。
在app應用程序發生異常出現Crash崩潰、ANR阻塞時通常說明應用程序存在一定的問題,這時候需要收集應用日志定位錯誤位置幫助開發調試修復程序。
2.Logcat收集app日志相關工具配置
Android日志系統提供了記錄和查看系統調試信息的功能。日志都是從各種軟件和一些系統的緩沖區中記錄下來的,緩沖區可以通過logcat命令來查看和使用。logcat本身是android的shell的一個命令,可以通過adb shell進入shell后執行logcat命令,也可以通過adb logcat直接運行。
2.1 ADB的安裝與基礎使用
adb全稱是Android Debug Bridge,它是一個命令行工具,通過它可以與Android設備進行交互,可以進行常見的安裝/卸載app、打開app、查看app的日志等操作。
這里簡單列出幾條ADB常用命令為下文中我們測試使用:
# 1.查看 adb --help #查看幫助手冊 adb devices #檢查連接到電腦的安卓設備,常用的檢查命令 adb shell dumpsys activity | find "mFocusedActivity" #Android 7.0及以下查看前臺應用包名 adb shell dumpsys activity | find "mResumedActivity" #Android 8.0及以上用此命令查看包名 adb logcat #打印log信息 adb logcat -v time #log信息顯示時間戳 adb logcat -v time > d:\logcat.txt #把日志信息重定向至d:/logcat.txt # 2.連接與交互 adb connect ip:port #通過WiFi進行遠程連接手機進行調試,手機和電腦需在同一個局域網上,計算機內部通信地址127.0.0.1,夜神模擬器默認的端口號是62001 adb disconnect ip:port #斷開一個(ip:port)連接 adb shell #登錄設備shell(安卓的底層是Linux) # 3.文件傳輸 adb pull <手機文件路徑> <本機路徑> #從手機拉取文件到本地電腦 adb push <本地電腦路徑> <手機路徑> #從本地推送文件到手機 # 4.安裝與卸載 adb install *.apk #為了快速獲取apk的安裝包路徑,可以直接把apk直接拖到cmd的窗口,安裝成功會返回success adb uninstall #卸載需要輸入應用包名
ADB的安裝:
實際上adb是一個免安裝工具,使用adb時只需要adb工具被命令行調用到就可以了。
1.首先根據系統的版本下載adb

2.解壓下載的Platform-tools zip包,將Platform-tools路徑添加到系統環境變量中。隨后在命令行執行adb version查看adb版本,未出現報錯安裝配置成功。
3.mac os中可直接使用brew進行安裝
brew install android-platform-tools

安裝完成后在根目錄.bash_profile添加環境變量,使用open .bash_profile打開編輯,在下方插入如下代碼

export ANDROID_HOME=/Users/用戶名/Library/Android/sdk export PATH=$PATH:$ANDROID_HOME/tools export PATH=$PATH:$ANDROID_HOME/platform-tools
保存后source .bash_profile更新變量,查看adb

2.2Logcat語法命令
語法格式: [adb] logcat [ ] … [] … 選項: -b:加載可供查看的備用日志緩沖區,例如event或radio。默認使用 main和system緩沖區集。請參閱查看備用日志緩沖區 -c, –clear:清除所選的緩沖區并退出,默認緩沖區集為main和system。要清除所有緩沖區,請使用-b all -c。 -e, –regex=:只輸出日志消息與匹配的行,其中是一個正則表達式 -m, –max-count=:輸出行后退出。這樣是為了與–regex配對,但可以獨立運行 -print:與–regex和–max-count配對,使內容繞過正則表達式過濾器,但仍能夠在獲得適當數量的匹配時停止 -d:將日志轉儲到屏幕并退出 -f:將日志消息輸出寫入 -g, –buffer-size:輸出指定日志緩沖區的大小并退出 -n:設置輪替日志的數量上限,默認值為4,需要使用 -r 選項 -r:每輸出時輪替日志文件,默認值為16。需要使用-f選項 -s:相當于過濾器表達式‘*:S’;它將所有標記的優先級設為“靜默”,并用于放在可添加內容的過濾器表達式列表之前 -v:設置日志消息的輸出格式。默認格式為threadtime。 -D, –dividers:輸出各個日志緩沖區之間的分隔線 -c:清空(清除)整個日志并退出 -t:僅輸出最新的行數。此選項包括-d功能
2.3Logcat緩沖區
android log輸出量巨大,特別是通信系統的log,因此,android把log輸出到不同的緩沖區中,目前定義了四個log緩沖區:
1)Radio:輸出通信系統的log
2)System:輸出系統組件的log
3)Event:輸出event模塊的log
4)Main:所有java層的log,遺跡不屬于上面3層的log
緩沖區主要給系統組件使用,一般的應用不需要關心,應用的log都輸出到main緩沖區中。默認log輸出(不指定緩沖區的情況下)是輸出System和Main緩沖區的log。
實例:
adb logcat –b radio adb logcat –b system adb logcat –b events adb logcat –b main //將緩沖區的log打印到屏幕并退出 adb logcat -d //清除緩沖區log(testCase運行前可以先清除一下) adb logcat -c //打印緩沖區大小并退出 adb logcat -g //輸出log adb logcat -f /data/local/tmp/log.txt -n 10 -r 1
3.日志收集過程
連接設備
先將設備通過usb數據線連接到電腦,設備開啟USB調試。

通過adb devices命令查看是否連接成功:
molengsu@mlsdeMacBook-Pro / % adb devices List of devices attached FJH5T19114009780 device

查看設備log輸出
我們直接通過adb logcat查看的輸出是所有應用的
adb logcat -d ##所有應用logcat輸出

為了精準分析我們可以通過應用pid來查看我們想要分析的應用日志。首先列出設備已安裝的應用查看應用包名
adb shell pm list package

然后獲取應用的pid,在獲取時現在手機上打開要獲取的應用,因為pid是分給進程的,應用運行起來才會分配pid。需要注意的是,pid是分配給進程的,如果app關閉了再重新打開,就會分配一個新的進程,同一個包名對應的pid就會變。
adb shell dumpsys meminfo com.xxxx.xxxx ##com.xxxx.xxxx是包名

拿到pid后就接著可以輸出應用日志了
adb logcat -d --pid=30923

為了方便查找也可以將日志導出到文件中,導出時要注意新建一個文本向里寫入文本設置好可寫的權限。
adb logcat -d --pid=30923 > logcat_test.txt

