安卓渗透框架-Drozer架构浅析--架构组成和自定义模块

字节逐风鹤
• 阅读 7549

安卓渗透框架-Drozer架构浅析--架构组成和自定义模块

标签(空格分隔): Drozer Android Security


1. Drozer 简介

Drozer是MWR Labs开发的一款针对Android系统的安全测试框架。Drozer可以通过与Dalivik 虚拟机,以及其它应用程序的IPC端点以及底层操作系统的交互,避免正处于开发阶段,或者部署于你的组织的android应用程序和设备暴露出不可接受的安全风险。


2. Drozer的使用

网上关于Drozer如何使用的文章很多,这里贴出来一两篇比较好的:
中文版:http://www.freebuf.com/tools/26503.html
英文版:https://www.mwrinfosecurity.com/system/assets/937/original/mwri_drozer-user-guide_2015-03-23.pdf


3. Drozer 组成

Drozer 总共由以下几个部分组成:

  1. Drozer Console ---- Drozer 的pc端用户操作接口

  2. Drozer agent ---- 安装在安卓手机上的Drozer代理应用

  3. Drozer Modules ---- Drozer所包含的可以被利用的模块,Exploit,Payload

  4. Drozer API ---- Drozer提供的 customize module 接口,用来编写自定义module或者exploit,payload

  5. Drozer Common ---- 在console和agent之间传输和共享数据的一些组件

  6. Other: (optional)
    ----------Rogue agent:提供了远程管理工具的代理
    ----------JAR agent:对Rogue agent进行了jar打包
    ----------Weasel: 可以理解为提供的和Rogue agent配套的高级payload


4. Drozer Console

Drozer Console 是用python编写而成的一个命令行工具,使用者可以通过console连接到agent上对Dalvik VM 进行操作。

接口是通过python的官方模块cmdreadline等模块实现,通过shlex解析命令,通过argparse解析参数。感兴趣的可以阅读Drzer Console的相关源码:

github地址:https://github.com/mwrlabs/drozer


5. agent

agent 是一个安装在测试安卓机上轻量级app,并且只申请一个权限,是为了用来和pc进行连接的。这个agent应用要求 Android API leven 7,兼容于Andriod 2.1以及以上的版本

(1) agent和console的连接方式

1. 直连方式(Direct Mode):

这一种链接方式,是需要在pc机上安装adb工具,并且使用数据线将测试机链接在pc机上实现的,agent会在测试机上开启一个服务器,然后通过adb开启一个本地tcp通路:
adb forward tcp:31415 tcp:31415
这样就可以连接上agent的服务器了。具体操作请看使用教程。

2. 网络链接方式(Infrastructure Mode):

这种方式是用过局域网去链接的,pc机开启一个server,然后在agent上配置和server建立tcp链接,再使用终端链接上去。具体请查看使用教程。

(2) 具体连接形式(connections)

drozer 的connections是通过一种通用的二进制消息传输形式(protobuf,具体请查看google的protobuf开源项目)来传输Frame信息,在console端是一个python的线程,在agent端是java的一个线程,他们传输的消息有以下几种:

1. 如果是SYSTEM_REQUEST,就传输的是SystemMessageHandler消息,SYSTEM_REQUEST指的是agent和console之间进行连接,交换状态的消息,她可以分为两种,SystemRequestSystemResponse

2. 如果是REFLECTION_REQUEST,就传输的是 ReflectionRequestHandler消息,REFLECTION_REQUEST指的是用户在使用相关的exploit或者payload命令的时候传输的消息,也有两种:ReflectionRequestReflectionResponse

agent源码:https://github.com/mwrlabs/drozer-agent
传输消息格式和类型:https://github.com/mwrlabs/mercury-common

(3) 消息传输session

和http一样,drozer的console和agent之间的传输也有session,当console和angent链接成功的时候,agent便会生成一个session,它是一个256位的hash字符串,后面的每一次通信都必须带上该session id


Drozer Modules

drozer拥有很多可以直接利用的Module, Exploit, Payload.这些你可以在drozer console中使用list命令查看相关module,也可以在bash下使用drozer exploit list查看相关exploit,也可以使用drozer payload list 来查看相关payload。具体使用方式请查看相关帮助。

所有的module源码可以在这里查看:
https://github.com/mwrlabs/drozer-modules


Drozer API

Drozer 提供了module编写接口,在安装好drozer之后,就可以使用python来用相关的库了.
相关可以查看官方文档和相关博客:

  1. https://github.com/mwrlabs/drozer/wiki/Writing-a-Module

  2. http://appscan.360.cn/blog/?p=45

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
梦
4年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
Easter79 Easter79
3年前
Taro小程序自定义顶部导航栏
微信自带的顶部导航栏是无法支持自定义icon和增加元素的,在开发小程序的时候自带的根本满足不了需求,分享一个封装好的组件,支持自定义icon、扩展dom,适配安卓、ios、h5,全面屏。我用的是京东的Taro多端编译框架写的小程序,原生的也可以适用,用到的微信/taro的api做调整就行,实现效果如下。!在这里插入图片描述(https://i
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这