Drozer是一款針對Android系統的安全測試框架。Drozer能夠經過與dalivik VM交互、與其餘應用程序的IPC端點交互、與底層操做系統的交互,來避免正處於開發階段或者正處於部署於組織的Android應用程序和設備暴露出安全風險。python
本此使用的是win10系統,若是使用其它系統搭建,需準備不一樣的版本:android
a.打開手機的USB調試功能,將手機經過USB鏈接電腦。
b.安裝jdk環境和python環境,並配置環境變量。
c.安裝Android調試工具ADB。
d.安裝Drozer。(記得選擇python2,並將Drozer的安裝目錄選擇爲python安裝目錄)git
drozer.bat console connect
(執行前通常須要轉發端口,命令:adb forward tcp:31415 tcp:31415
) ,打開dozer控制檯:命令 | 功能 |
---|---|
help ABOUT | 顯示一個指定指令或模塊的幫助信息 |
run Module | 執行一個Drozer模塊 |
shell | 在設備上啓動一個交互式Linux shell |
list | 顯示當前會話所能執行全部Drozer模塊,不顯示未得到相應權限的模塊 |
cd | 掛載一個特定的命名空間做爲會話的根目錄,避免重複輸入模塊全稱 |
load | 加載一個包含Drozer命令的文件而且按順序執行 |
echo | 在控制檯打印信息 |
clean | 移除Android設備上由Drozer存儲的臨時文件 |
module | 從互聯網發現而且安裝一個額外的模塊 |
permissions | 顯示Drozer agent被授予的權限 |
set | 將一個值存儲在一個變量中,這個變量將做爲一個環境變量傳遞個任何由Drozer生成的Linux shell |
unset | 移除一個已命名變量,這個變量是由Drozer傳遞給Linux shell的 |
exit | 終止Drozer會話 |
Drozer官方測試apkgithub
命令:run app.package.list -f <app name>
sql
包括應用程序版本、應用程序數據存儲路徑、應用程序安裝路徑、相關權限等,命令:run app.package.info -a <package name>
shell
Drozer可檢測apk源碼四大組件(activities、broadcast receivers、content providers、services)的export狀況,並判斷export的組件提供那些服務,由於服務是能夠調試的,能夠將調試器附加到進程上,就行調試。
數據庫
應用程序中,一個Activity一般就是一個單獨的屏幕,它上面能夠顯示一些控件也能夠監聽並處理用戶的事件作出響應。 Activity之間經過Intent進行通訊。在Intent的描述結構中,有兩個最重要的部分:動做和動做對應的數據。安全
run app.activity.info -a <package name>
run app.activity.start --component <package name> 設置爲導出的activity
android平臺提供了Content Provider使一個應用程序的指定數據集提供給其餘應用程序。這些數據能夠存儲在文件系統中、在一個SQLite數據庫、或以任何其餘合理的方式。其餘應用能夠經過ContentResolver類從該內容提供者中獲取或存入數據。只有須要在多個應用程序間共享數據是才須要內容提供者。網絡
run app.provider.info -a <package name>
run scanner.provider.findurls -a <package name>
run app.provider.query uri
run scanner.provider.injection -a packageName 掃描那裏能夠進行SQL注入 run scanner.provider.sqltables -a com.mwr.example.sieve 列舉app的表信息 projection 測試:run app.provider.query contentProviderURI --projection "'" selection 測試:run app.provider.query contentProviderURI --selection "'" projection注入語句測試:run app.provider.query contentProviderURI --projection "* FROM xx;--" Selection注入語句測試:run app.provider.query contentProviderURI --selection "1=1);--"
run app.package.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM SQLITE_MASTER WHERE type='table';--"
讀取:run app.package.read uris/文件及路徑 拷貝:run app.package.download uris/文件及路徑 \本地文件及路徑
run scanner.provider.traversal -a <package name>
一個Service 是一段長生命週期的,沒有用戶界面的程序,能夠用來開發如監控類程序。較好的一個例子就是一個正在從播放列表中播放歌曲的媒體播放器。在一個媒體播放器的應用中,應該會有多個activity,讓使用者能夠選擇歌曲並播放歌曲。
然而,音樂重放這個功能並無對應的activity,由於使用者固然會認爲在導航到其它屏幕時音樂應該還在播放的。在這個例子中,媒體播放器這個activity 會使用Context.startService()來啓動一個service,從而能夠在後臺保持音樂的播放。同時,系統也將保持這個service 一直執行,直到這個service 運行結束。
另外,咱們還能夠經過使用Context.bindService()方法,鏈接到一個service 上(若是這個service 尚未運行將啓動它)。當鏈接到一個service 以後,咱們還能夠service 提供的接口與它進行通信。拿媒體播放器這個例子來講,咱們還能夠進行暫停、重播等操做。 intent-filter未將exported設置爲false,默認是能夠導出的。app
run app.service.info -a package_name 查看Services組件信息 run app.service.start --action 服務名 --component 包名 服務名 調用內部服務組件
BroadcastReceive廣播接收器應用可使用它對外部事件進行過濾只對感興趣的外部事件(如當電話呼入時,或者數據網絡可用時)進行接收並作出響應。廣播接收器沒有用戶界面。然而,它們能夠啓動一個activity或serice 來響應它們收到的信息,或者用NotificationManager來通知用戶。通知能夠用不少種方式來吸引用戶的注意力──閃動背燈、震動、播放聲音等。通常來講是在狀態欄上放一個持久的圖標,用戶能夠打開它並獲取消息。
測試經常使用命令:
run app.broadcast.info -a <package name> 測試對外的broadcast組件信息 run app.broadcast.send --component <package name> <component name> --action <action> --extra <type> <key> <value> 發送帶參數的惡意廣播 run app.broadcast.send --action <action> 向廣播組件發送不完整intent使用空extras,能夠看到應用中止運行