drozer安装与使用总结(含adb命令总结)
????本文參考并拷貝了網上很多人的文章,僅作為個人思路總結。由于環境搭建復雜,步驟繁多,因此制作本文章,留以查看。
????如想詳細了解adb命令,可直接在目錄中點擊進入1.4.2 adb命令總結。
????如想了解(逍遙)模擬器上運行drozer agent,與電腦drozer的連接步驟,可直接點擊二、連接。
????如有侵權,請聯系,我將主動刪除。
drozer安裝與使用總結(含adb命令總結)
- 一、環境的安裝
- 1.1 電腦下載安裝依賴
- 1.1.1 jdk1.7
- 1.1.2 python2.7.15
- 1.1.3 逍遙模擬器
- 1.2 電腦下載安裝drozer
- 1.3 在模擬器上安裝手機drozer agent
- 1.4 adb管理工具
- 1.4.1 配置及說明
- 1.4.2 adb命令總結
- a、查看應用列表
- b、安裝apk
- c、卸載apk
- d、清除應用數據與緩存命令
- e、Android四大組件相關命令
- f、日志相關命令
- g、查看設備情況
- h、修改設置
- i、實用功能
- j、查看進程
- 二、連接過程
- 1、查看連接設備
- 2、端口轉發
- 3、開啟drozer控制臺
- 三、drozer使用
- 3.1 通過app.package.list模塊獲取要檢測的app的包名
- 3.2 使用app.package.info模塊查看apk基本信息
- 3.3 使用app.package.attacksurface模塊識別攻擊面
- 3.4 使用app.activity.info模塊查看activity組件信息
- 3.5 使用app.broadcast.info模塊查看暴露的廣播組件接口
- 3.6 使用app.provider.info模塊查看content provider(數據提供接口)組件信息
- 3.7 使用app.service.info模塊查看service組件信息
- 3.8 文件操作
一、環境的安裝
1.1 電腦下載安裝依賴
1.1.1 jdk1.7
????安裝jdk1.7(我之前安裝的為1.8,也可以用)。Java是安卓的主要開發語言,與手機交互時使用。jdk安裝、環境變量配置可參考鏈接鏈接https://www.cnblogs.com/lsdb/p/6497816.html。
????用戶變量下:
編緝Path變量在最后添加:;C:\Program Files\Java\jdk1.8.0_131\bin????系統變量下:
新建JAVA_HOME變量:C:\Program Files\Java\jdk1.8.0_131新建CLASSPATH變量:C:\Program Files\Java\jdk1.8.0_131\lib1.1.2 python2.7.15
????安裝python2.7.15https://www.python.org/downloads/release/python-2715/。drozer使用python2.7編寫不支持python3.x,所以只能裝python2.7。原先電腦中裝python 2.7.18,但無法運行drozer console connect顯示模塊不存在。更換版本為2.7.15.運行正常。將python的兩個路徑分別加入系統變量中的Path變量中。
????系統變量下:
C:\Users\******\Desktop\Python27\C:\Users\******\Desktop\Python27\Scripts1.1.3 逍遙模擬器
????將逍遙模擬器MEmu.exe的安裝路徑D:\Program Files\Microvirt\MEmu也添加入系統變量中的Path變量中。
1.2 電腦下載安裝drozer
????下載鏈接:https://github.com/mwrlabs/drozer/releases/。選擇系統相應的包,選windows的msi安裝包。
1.3 在模擬器上安裝手機drozer agent
????可將agent安裝包存放于電腦中,而后如圖點擊安裝將drozer agent安裝到手機。
????agent下載地址:https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk
????雙擊打開啟agent,如下圖確保右下角按鈕顯示為“開啟”(如果顯示為關閉,在其上點擊將其切換為開啟即可)。
1.4 adb管理工具
1.4.1 配置及說明
????參考鏈接:
????????adb下載安裝及使用
????????adb命令整理大全
????????開發者工具ADB命令行使用匯總——ADB安裝(初學者手冊)
????????微信公眾號「悶騷的程序員」關于adb的最全解釋
????adb----Android Debug Bridge,一般在Android SDK安裝目錄下的platform-tools文件夾下就有,也可以另外下載安裝。它就是一個命令行窗口,用于通過電腦端與模擬器或者是設備之間的交互。借助adb工具,我們可以管理設備或手機模擬器的狀態。還可以進行很多手機操作,如安裝軟件、系統升級、運行shell命令等等。
????環境變量配置:
????環境變量中編輯PATH,新增D:\ChromeCoreDownloads\adb。
????運行在pc端的adb server:
????ADB Server是運行在主機上的一個后臺進程。它的作用在于檢測USB端口感知設備的連接和拔除,以及模擬器實例的啟動或停止,ADB Server還需要將adb client的請求通過usb或者tcp的方式發送到對應的adbd上。運行在設備端的常駐進程adb demon (adbd):程序“adbd”作為一個后臺進程在Android設備或模擬器系統中運行。它的作用是連接ADB服務器,并且為運行在主機上的客戶端提供一些服務。
????運行在pc端的adb client:
????命令行程序”adb”用于從shell或腳本中運行adb命令。首先,“adb”程序嘗試定位主機上的ADB服務器,如果找不到ADB服務器,“adb”程序自動啟動一個ADB服務器。接下來,當設備的adbd和pc端的adb server建立連接后,adb client就可以向ADB servcer發送服務請求。
1.4.2 adb命令總結
a、查看應用列表
???? 查看模擬手機上所有應用列表:
adb shell pm list packages
????查看系統應用列表:
????查看第三方應用列表:
b、安裝apk
adb install "-lrtsdg" "path_to_apk"“-lrtsdg”:-l:將應用安裝到保護目錄 /mnt/asec;-r:允許覆蓋安裝;-t:允許安裝 AndroidManifest.xml 里 application 指定 android:testOnly=“true” 的應用;-s:將應用安裝到 sdcard;-d:允許降級覆蓋安裝;-g:授予所有運行時權限;path_to_apk:apk的絕對路徑。示例安裝淘寶apk:adb install -l /data/local/tmp/taobao.apkc、卸載apk
adb uninstall -k "packagename"“packagename”:表示應用的包名,以下相同;-k 參數可選,表示卸載應用但保留數據和緩存目錄。示例卸載手機淘寶:adb uninstall com.taobao.taobaod、清除應用數據與緩存命令
adb shell pm clear "packagename"相當于在設置里的應用信息界面點擊「清除緩存」和「清除數據」。示例:adb shell pm clear com.taobao.taobao 表示清除手機淘寶數據和緩存。e、Android四大組件相關命令
????Android四大組件有Activity,Service服務,Content Provider內容提供,BroadcastReceiver廣播接收器,具體不做多講,常用的有以下(注意grep為linux下過濾命令):
????查看前臺 Activity命令:
adb shell dumpsys activity activities | grep mFocusedActivity????查看正在運行的 Services命令:
adb shell dumpsys activity services "packagename"其中參數不是必須的,指定 “packagename” 表示查看與某個包名相關的 Services,不指定表示查看所有 Services。????查看應用詳細信息命令:
adb shell dumpsys package "packagename"????調起 Activity命令格式:
adb shell am start [options] 例如:adb shell am start -n com.tencent.mm/.ui.LauncherUI表示調起微信主界面????調起 Service命令格式:
adb shell am startservice [options] 例如:adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService 表示調起微信的某 Service。????強制停止應用命令:
adb shell am force-stop "packagename"例如強制停止淘寶:adb shell am force-stop com.taobao.taobao????模擬按鍵/輸入:
adb shell input keyevent keycode 不同的 keycode有不同的功能| 3 | HOME鍵 |
| 4 | 返回鍵 |
| 5 | 打開撥號應用 |
| 6 | 掛斷電話 |
| 26 | 電源鍵 |
| 27 | 拍照(需要在相機應用里) |
| 61 | Tab鍵 |
| 64 | 打開瀏覽器 |
| 67 | 退格鍵 |
| 80 | 拍照對焦鍵 |
| 82 | 菜單鍵 |
| 85 | 播放/暫停 |
| 86 | 停止播放 |
| 92 | 向上翻頁鍵 |
| 93 | 向下翻頁鍵 |
| 111 | ESC鍵 |
| 112 | 刪除鍵 |
| 122 | 移動光標到行首或列表頂部 |
| 123 | 移動光標到行末或列表底部 |
| 124 | 插入鍵 |
| 164 | 靜音 |
| 176 | 打開系統設置 |
| 207 | 打開聯系人 |
| 208 | 打開日歷 |
| 209 | 打開音樂 |
| 220 | 降低屏幕亮度 |
| 221 | 提高屏幕亮度 |
| 221 | 提高屏幕亮度 |
| 223 | 系統休眠 |
| 224 | 點亮屏幕 |
| 231 | 打開語音助手 |
| 276 | 如果沒有 wakelock 則讓系統休眠 |
????滑動解鎖:
????如果鎖屏沒有密碼,是通過滑動手勢解鎖,那么可以通過 input swipe 來解鎖。
adb shell input swipe 300 1000 300 500(其中參數 300 1000 300 500 分別表示起始點x坐標 起始點y坐標 結束點x坐標 結束點y坐標。)????輸入文本:
????在焦點處于某文本框時,可以通過 input 命令來輸入文本。
adb shell input text *** (***即為輸入內容)f、日志相關命令
????打印日志:
????Android 的日志分為如下幾個優先級(priority):
????????V —— Verbose(最低,輸出得最多)
????????D —— Debug I —— Info
????????W —— Warning
????????E —— Error
????????F—— Fatal
????????S —— Silent(最高,啥也不輸出)
????某級別過濾日志則會將該級別及以上的日志輸出。
????(注: 在 macOS 下需要給 :W 這樣以 作為 tag 的參數加雙引號,如 adb logcat “:W”,不然會報錯 no matches found: :W。)
| adb logcat *:W | 過濾打印嚴重級別W及以上的日志 |
| adb logcat l findstr ***> F:\log.txt | 把僅含***的日志保存到F盤的log.txt文件中 |
| adb logcat -c | 清除屏幕上的日志記錄 |
| adb logcat -c && adb logcat -s ActivityManager l grep "Displayed” | 客戶端程序啟動時間獲取日志 |
| adb logcat > F:\log.txt | 打印當前設備上所有日志保存到F盤的log.txt文件中 |
| adb logcat l findstr *** | 打印過濾僅含***的日志 |
| adb logcat l findstr ***> F:\log.txt | 把僅含***的日志保存到F盤的log.txt文件中 |
????按 tag 和級別過濾日志:
adb logcat ActivityManager:I MyApp:D *:S表示輸出 tag ActivityManager 的Info以上級別日志,輸出tag MyApp的Debug 以上級別日志,及其它tag的Silent級別日志(即屏蔽其它tag日志)。adb logcat -v 選項指定日志輸出格式。日志支持按以下幾種 :默認格式brief、process、tag、raw、time、long指定格式可與上面的過濾同時使用。比如:adb logcat -v long ActivityManager:I *:S????清空日志:
adb logcat -c????內核日志:
adb shell dmesgg、查看設備情況
????查看設備信息型號命令:
adb shell getprop ro.product.model????電池狀況命令:
adb shell dumpsys battery????屏幕分辨率命令:
adb shell wm size????如果使用命令修改過,那輸出可能是:
???????? Physical size: 1080x1920
???????? Override size: 480x1024
????表明設備的屏幕分辨率原本是 1080px * 1920px,當前被修改為 480px * 1024px。
????屏幕密度命令:
????如果使用命令修改過,那輸出可能是:
????????Physical density: 480
????????Override density: 160
????表明設備的屏幕密度原來是 480dpi,當前被修改為 160dpi。
????顯示屏參數:
????android_id查看命令:
adb shell settings get secure android_id????查看Android 系統版本:
adb shell getprop ro.build.version.release????查看設備ip地址:
adb shell ifconfig | grep Mask或者adb shell netcfg????查看CPU 信息命令:
adb shell cat /proc/cpuinfo????查看內存信息命令:
adb shell cat /proc/meminfo????設備的更多硬件與系統屬性:
adb shell cat /system/build.prop????單獨查看某一硬件或系統屬性:
adb shell getprop <屬性名>| ro.build.version.sdk | SDK 版本 |
| ro.build.version.release | Android 系統版本 |
| ro.product.model | 型號 |
| ro.product.brand | 品牌 |
| ro.product.name | 設備名 |
| ro.product.board | 處理器型號 |
| persist.sys.isUsbOtgEnabled | 是否支持 OTG |
| dalvik.vm.heapsize | 每個應用程序的內存上限 |
| ro.sf.lcd_density | 屏幕密度 |
| rro.build.version.security_patch | Android 安全補丁程序級別 |
h、修改設置
????修改設置之后,運行恢復命令有可能顯示仍然不太正常,可以運行 adb reboot 重啟設備,或手動重啟。
????修改設置的原理主要是通過 settings 命令修改 /data/data/com.android.providers.settings/databases/settings.db 里存放的設置值。
????修改分辨率命令:
adb shell wm size 480x1024????恢復原分辨率命令:
adb shell wm size reset????修改屏幕密度命令:
adb shell wm density 160 表示將屏幕密度修改為 160dpi;????恢復原屏幕密度命令:
adb shell wm density reset????修改顯示區域命令:
adb shell wm overscan 0,0,0,200 四個數字分別表示距離左、上、右、下邊緣的留白像素,以上命令表示將屏幕底部 200px 留白。????恢復原顯示區域命令:
adb shell wm overscan reset????關閉 USB 調試模式命令:
adb shell settings put global adb_enabled 0 需要手動恢復:「設置」-「開發者選項」-「Android 調試」????狀態欄和導航欄的顯示隱藏:
adb shell settings put global policy_control????可由如下幾種鍵及其對應的值組成,格式為 =:=。
| immersive.full | 同時隱藏 |
| immersive.status | 隱藏狀態欄 |
| immersive.navigation | 隱藏導航欄 |
| immersive.preconfirms | ? |
????這些鍵對應的值可由如下值用逗號組合:
| apps | 所有應用 |
| * | 所有界面 |
| packagename | 指定應用 |
| -packagename | 排除指定應用 |
????恢復正常模式:
adb shell settings put global policy_control nulli、實用功能
????截圖保存到電腦:
adb exec-out screencap -p > sc.png然后將 png 文件導出到電腦:adb pull /sdcard/sc.png????錄制屏幕:
錄制屏幕以 mp4 格式保存到 /sdcard:adb shell screenrecord /sdcard/filename.mp4 需要停止時按 Ctrl+C,默認錄制時間和最長錄制時間都是 180 秒。如果需要導出到電腦:adb pull /sdcard/filename.mp4????掛載、查看連接過的 WiFi 密碼、開啟/關閉 WiFi、設置系統日期和時間都需要root權限,不做多說。
????使用 Monkey 進行壓力測試:
????Monkey 可以生成偽隨機用戶事件來模擬單擊、觸摸、手勢等操作,可以對正在開發中的程序進行隨機壓力測試。
adb shell monkey -p < packagename > -v 500 表示向 指定的應用程序發送 500 個偽隨機事件。j、查看進程
adb shell ps????查看實時資源占用情況:
adb shell top????查看進程 UID:
adb shell dumpsys package | grep userId=二、連接過程
1、查看連接設備
????雙擊打開逍遙模擬器。而后按win+r,輸入cmd,輸入adb devices,顯示已連接設備。該設備ip即為逍遙模擬器ip,端口默認為5555。(怎么修改,無從知曉)
2、端口轉發
adb forward tcp:31415 tcp:314153、開啟drozer控制臺
drozer console connect
????連接成功:
????連接成功后,控制臺顯示dz> 。
三、drozer使用
????使用list查看支持哪些模塊。
list
????然后,使用help module_name,或者run module_name -h查看各module的用法。
????最后,通過run module_name module_options來對app進行檢測。
3.1 通過app.package.list模塊獲取要檢測的app的包名
run app.package.list -f package_name3.2 使用app.package.info模塊查看apk基本信息
run app.package.info -a package_name3.3 使用app.package.attacksurface模塊識別攻擊面
????所謂攻擊面,應該就是指可export的安卓四大組件(activaty、broadcast receiver、content provider、service)。
????如果查看到四大組件中有可export的,就去具體看可export的組件有沒有問題。
run app.package.attacksurface package_name
????輸出結果:
????Attack Surface:
????3 activities exported 暴露的控件接口
????0 broadcast receivers exported 暴露的廣播接收器
????0 content providers exported 數據提供接口,數據泄漏
????3 services exported service服務接口
????解釋參考鏈接:
????????【安全測試工具】Drozer介紹及使用
????解釋:
????Activity控件接口:
????應用程序中,一個Activity通常就是一個單獨的屏幕,它上面可以顯示一些控件也可以監聽并處理用戶的事件做出響應。Activity之間通過Intent進行通信。在Intent 的描述結構中,有兩個最重要的部分:動作和動作對應的數據。
????intent介紹:
????可以將Intent理解為不同組件之間通信的“媒介”專門提供組件互相調用的相關信息。Intent可以啟動一個Activity,也可以啟動一個Service,還可以發起一個廣播Broadcasts。
????Intent有以下幾個屬性: 動作(Action),數據(Data),分類(Category),類型(Type),組件(Compent)以及擴展信(Extra)。其中最常用的是Action屬性和Data屬性。通過Drozer完整的發送intent消息命令格式為:
????run app.activity.start [-h] [–action ACTION] [–category CATEGORY [CATEGORY …]] [–component PACKAGE COMPONENT] [–data-uri DATA_URI][–extra TYPE KEY VALUE] [–flags FLAGS [FLAGS …]] [–mimetype MIMETYPE]
????BroadcastReceive廣播接收器:
????應用可以使用它對外部事件進行過濾只對感興趣的外部事件(如當電話呼入時,或者數據網絡可用時)進行接收并做出響應。廣播接收器沒有用戶界面。然而,它們可以啟動一個activity或serice 來響應它們收到的信息,或者用NotificationManager 來通知用戶。通知可以用很多種方式來吸引用戶的注意力──閃動背燈、震動、播放聲音等。一般來說是在狀態欄上放一個持久的圖標,用戶可以打開它并獲取消息。
????content providers exported數據提供接口:
????android平臺提供了Content Provider使一個應用程序的指定數據集提供給其他應用程序。這些數據可以存儲在文件系統中、在一個SQLite數據庫、或以任何其他合理的方式, 其他應用可以通過ContentResolver類(見ContentProviderAccessApp例子)從該內容提供者中獲取或存入數據(相當于在應用外包了一層殼), 只有需要在多個應用程序間共享數據是才需要內容提供者。例如,通訊錄數據被多個應用程序使用,且必須存儲在一個內容提供者中。它的好處:統一數據訪問方式。
????service服務接口:
????services服務接口,一般常駐,連接上公開的service后,可通過service提供的接口調起其他activity等。
????檢測到攻擊面,可進行的攻擊:
????activities exported 越權攻擊,發送偽造消息等;
????broadcast receivers exported 發送惡意廣播,偽造廣播消息,越權攻擊等;
????content providers exported 數據泄漏,SQL注入等;
????services exported 越權攻擊,服務拒絕,權限提升等;
3.4 使用app.activity.info模塊查看activity組件信息
run app.activity.info -a package_name
????對activity嘗試進行攻擊:
????(1)來一把越權攻擊:繞過登錄頁直接拉activity,看到有activity啟動不需要權限,嘗試用drozer直接拉起這些activity看看。
run app.activity.start --component com.example com.example.activity.WelcomeActivity????(2)發送偽造的殘缺消息,刻意制造不完整的intent,發送給對應的activity。
run app.activity.start --action android.intent.action.SEND --component com.example com.example.activity.share.ShareToSessionActivity????intent中缺少extra部分。
3.5 使用app.broadcast.info模塊查看暴露的廣播組件接口
run app.broadcast.info -a com.example -i 獲取暴露的廣播組件信息????嘗試拒絕服務攻擊,向廣播組件發送不完整intent(空action或空extras)。
run app.broadcast.send --component com.example com.example.sdk.communication.AppRegisterReceiver --extra string TEXT "hahahaha"????傳遞空的action。
3.6 使用app.provider.info模塊查看content provider(數據提供接口)組件信息
run app.provider.info -a package_name
???? 如果有暴露的content組件接口,可能存在:
????數據泄漏問題;
????–直接訪問URI獲取敏感信息;–目錄遍歷;
????構造特殊的URI進行SQL注入;
???? 獲取content provider的信息:
run app.provider.info -a com.example -i???? 使用drozer的scanner模塊去猜測可能存在的URIs:
run scanner.provider.finduris -a com.example???? 檢測可注入的URI的注入點:
run scanner.provider.injection -a com.example???? SQL注入的方式,如果上一步有拿到可注入的URI,獲取某個表(如Key)中的數據:
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM Key;--"3.7 使用app.service.info模塊查看service組件信息
run app.service.info -a package_name
???? 獲取公開的service服務接口信息:
???? 直接啟動服務看下
run app.service.start --action com.example.plugin.game.service.GameDownloadService --component com.example com.example.plugin.game.service.GameDownloadService3.8 文件操作
????安裝minimal來可以獲取暫時的root權限
run tools.setup.minimalsu????進入shell模式,查看/data/data/com.example下是否有明文存儲敏感信息。
????在AndroidManifest.xml中android:allowBackup字段是否為true。當這個標志被設置為true或不設置該標志時應用程序數據可以備份和恢復,adb調試備份允許惡意攻擊者復制應用程序數據。有名的栗子新浪微博android客戶端越權泄密事件。
????疑難問題可參考以下鏈接:
????https://www.jianshu.com/p/28635f35cf8f
????制作不易,點個贊再走吧!
總結
以上是生活随笔為你收集整理的drozer安装与使用总结(含adb命令总结)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dspace搭建过程
- 下一篇: android wifi与连接设备通讯录