Drozer plugin编写
drozer是MWR Labs开发的一款Android安全测试框架。是目前最好的Android安全测试工具之一。drozer提供了命令行交互式界面,使用drozer进行安全测试,用户在自己的console端输入命令,drozer会将命令发送到Android设备上的drozer agent代理程序执行。drozer采用了模块化的设计,用户可以定制开发需要的测试模块。编写drozer模块主要涉及python模块及dex模块。python模块在drozer console端运行,类似于metasploit中的插件,可以扩展drozer console的测试功能。dex模块是java编写的android代码,类似于android的dex插件,在android手机上运行,用于扩展drozer agent的功能。
简单的drozer模块demo代码¶
首先看看drozer wiki给出的demo,该模块的功能就是在android设备上反射调用java.util.Random类生成一个随机数并返回:
#!python
from drozer.modules import Module
class GetInteger(Module):
name = ""
description = ""
examples = ""
author = "Joe Bloggs (@jbloggs)"
date = "2012-12-21"
license = "BSD (3-clause)"
path = ["exp", "test"]
def execute(self, arguments):
random = self.new("java.util.Random")
integer = random.nextInt()
self.stdout.write("int: %d\n" % integer)
GetInteger类就是一个简单的drozer模块,它继承自drozer提供的模块基类Module。每个继承了Module的类都对应着一个drozer模块,模块具体实现的功能则是在类中重写excute函数,实现新的功能。在drozer console中执行以下命令就可以运行该模块了:
drozer 通过Module类的metadata来配置和管理每个模块,因此模块编写时需要包含以下 metadata信息:
这些信息中比较重要的就是path变量,它描述了模块在drozer namespace中的路径,结合对应的classname可以唯一确定drozer中的模块。例如demo中的path = ["exp", "test"],类名为GetInteger,那么在drozer console中该模块就以exp.test.getinteger唯一确定。需要注意的是,尽管类的名字有大小写之分,但运行该模块的时候,drozer console中的名字都为小写。
参考文章:drozer模块的编写及模块动态加载问题研究drozer是MWRLabs开发的一款Android安全测试框架。是目前最好 - 掘金