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: tcp:
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