drozer和adb一樣,又不是新出的工具,本不該出了這么久還要由我這樣半懂不懂的再寫篇東西了。但是還是一樣每次使用都得百度和篩選半天,所以記下來算給自己看。以后看到我還寫些老掉牙的東西都是這個原因,不再重復。
drozer的基本功能感覺就是通過分析AndroidManifest.xml,看四大組件中有沒有可export的,如果有那么就去詳細查看這些可export的組件是不是真有問題。
本教程第一大節講安裝,第二大節講使用drozer連接手機,第三大節講通過drozer檢測app安全性。本教程主要參官方github主頁說明及官方文檔。
一、安裝
1.1 電腦下載安裝依賴
python2.7----drozer使用python2.7編寫不支持python3.x,所以只能裝python2.7,。使用minicoda版python時一直報“ImportError: No module named drozer.cli.console”,改裝官方版python2.7未出現問題未深究原因。
python其他庫----pip install protobuf pyOpenSSL Twisted service_identity
jdk1.7----Java是安卓的主要開發語言,應該是與手機交互時使用。jdk安裝可參考鏈接。
adb----Android Debug Bridge,一般在Android SDK安裝目錄下的platform-tools文件夾下就有,也可以另外下載安裝。安裝使用可參考鏈接。
1.2 電腦下載安裝drozer
下載鏈接:https://github.com/mwrlabs/drozer/releases/
選擇系統相應的包,我這里選windows的msi安裝包
雙擊下載的安裝程序
drozer是python2.7寫的,如果沒在環境變量中配置python2.7的路徑,那么就要手動指定
另外drozer不支持python3.x,所以如下圖即便安裝程序識別出了python3.x也要自己指定python2.7的位置
另外可能有小伙伴到這里就會感覺到drozer感覺就是python的第三方庫那直接用pip安裝不更省事?
第三方庫是對的,pip中也可以找到drozer但實際發現使用pip安裝時沒有drozer.bat運行不起來,至於為什么不直接加上drozer.bat還是這兩種途徑有更深的區別沒深究。
1.3 下載安裝手機agent
使用usb線將手機連接到電腦(或開啟一個模擬設備),使用adb將agent安裝到手機。
agent下載地址:https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk
到手機打開啟agent,如下圖確保右下角按鈕顯示為“開啟”(如果顯示為關閉,在其上點擊將其切換為開啟即可)
二、連接
2.1 環境變量配置
首先,python需要加入到環境變量,不然在執行drozer.bat console connect時會報“'python.exe' 不是內部或外部命令,也不是可運行的程序或批處理文件。”
其次,drozer會和其他第三方python庫一樣安裝到python的各文件夾下,其中主要執行的drozer.bat在$PYTHON_HOME\Scripts文件夾下,所以scripts為了方便也加入到環境變量。
可以直接編緝環境變量,但修改環境變量比較麻煩,而且我已安裝python3.7不想影響python版本所以這里使用set path來臨時修改環境變量。
我修改命令如下,修改成自己的目錄。要注意最后的%path%,不然原先的path的值就被覆蓋了。至於大小寫,cmd不區分大小寫。
set path=D:\Language\Python27;D:\Language\Python27\Scripts;%path%
2.2 切換到drozer安裝目錄
如果cmd的當前路徑和drozer.bat如果不在同一驅動器(比如cmd當前在c盤,drozer.bat在d盤),那么雖然使用drozer.bat console connect也可以進入drozer控制台,但是執行run時會報錯。
比入我這里drozer安裝在D盤,在我當前路徑是“C:\Users\ls”,直接進入drozer控制台。報錯“unknown module: 'app.package.list'”,如下圖所示:
處理這個問題,只要將cmd路徑切換到drozer.bat同驅動器下即可(比如我這里要做的就是切換到D盤)。
結合網上說法,為了確保萬無一失,這里直接接切換到drozer.bat所在的“D:\Language\Python27\Scripts”目錄
2.3 使用drozer連接手機
有些文檔說如果是真機,dorzer.bat console connect后要加上ip,ip那是網絡連接通過usb連接后並不需要ip(所以,我也不懂adb forward tcp:31415 tcp:31415這句有什么用)
adb forward tcp:31415 tcp:31415 drozer.bat console connect
如果報錯“[Errno 10054]”那應該是手機agent處於關閉狀態,請按1.3中的說明去開啟。
三、使用drozer對app進行測試
官方直接給出的drozer支持命令及其命令說明列表如下
Command | Description |
---|---|
run | Executes a drozer module |
list | Show a list of all drozer modules that can be executed in the current session. This hides modules that you do not have suitable permissions to run. |
shell | Start an interactive Linux shell on the device, in the context of the Agent process. |
cd | Mounts a particular namespace as the root of session, to avoid having to repeatedly type the full name of a module. |
clean | Remove temporary files stored by drozer on the Android device. |
contributors | Displays a list of people who have contributed to the drozer framework and modules in use on your system. |
echo | Print text to the console. |
exit | Terminate the drozer session. |
help | Display help about a particular command or module. |
load | Load a file containing drozer commands, and execute them in sequence. |
module | Find and install additional drozer modules from the Internet. |
permissions | Display a list of the permissions granted to the drozer Agent. |
set | Store a value in a variable that will be passed as an environment variable to any Linux shells spawned by drozer. |
unset | Remove a named variable that drozer passes to any Linux shells that it spawns. |
當然也可以在drozer console中直接使用help查看;然后進一步使用help command可查看各命令更具體的使用方法。
按我理解,簡單來說drozer的基本用法就是:
首先,使用list查看支持哪些模塊;
然后,使用help module_name,或者run module_name -h查看各module的用法;
最后,通過run module_name module_options來對app進行檢測。
dorzer的使用基本流程就是以下3.1-3.6。
3.1 通過app.package.list模塊獲取要檢測的app的包名
要檢測的app可以通過手機市場安裝,也可以使用adb install package_path安裝這里就不贅述了。
run app.package.list -f filter_str
3.2 使用app.package.info模塊查看apk基本信息
run app.package.info -a package_name
3.3 使用app.package.attacksurface模塊識別攻擊面
所謂攻擊面,應該就是指可export的安卓四大組件(activaty、broadcast receiver、content provider、service)
如果查看到四大組件中有可export的,就去具體看可export的組件有沒有問題(后續3.4、3.5、3.6就是干這事,為什么沒有receiver沒深究)
run app.package.attacksurface package_name
3.4 使用app.activity.info模塊查看activity組件信息
run app.activity.info -a package_name
3.5 使用app.provider.info模塊查看content provider組件信息
run app.provider.info -a package_name
3.6 使用app.service.info模塊查看service組件信息
run app.service.info -a package_name
參考:
https://github.com/mwrlabs/drozer
https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf
https://blog.csdn.net/qq_23212697/article/details/69177654
http://www.360doc.com/content/16/0405/14/25472073_548029178.shtml