自己动手开发Drozer插件之进阶篇
作者:admin | 时间:2017-2-21 13:06:46 | 分类:黑客技术 隐藏侧边栏展开侧边栏
1.如何从源代码编译drozer
参照https://github.com/mwrlabs/drozer/blob/develop/INSTALLING
最好是在ubuntu或linux环境下安装好编译环境
* Java (自带或安装)
* Android Software Development Kit (google去下载sdk)
* Native Development Kit (google去下载ndk)
* Python 2.7 with development headers(自带)
* Python Setuptools(apt-get install python-setuptools)
* ia-32libs (64位得系统需要安装)
安装好drozer的Python依赖库
$ easy_install –allow-hosts pypi.python.org protobuf==2.4.1
$ easy_install twisted==10.2.0
克隆drozer的源代码
git clone git://github.com/mwrlabs/drozer/
到源代码根目录,将版本文件meta.py从src里拷贝到源代码drozer根目录下
cd drozer
cp src/drozer/meta.py .
修改Makefile文件
将DX环境变量指向dorzer源代码自带的dx
DX = $(CURDIR)/src/drozer/lib/dx
其他javac,NDKBUILD等环境变量按自己的系统环境指定。
编译安装
make
python setup.py install
2.编写自己的dex插件
之前在http://appscan.360.cn/blog/?p=45中,已经交大家如何写python插件,但drozer还有更强大的dex插件。
参考http://blogs.360.cn/blog/android-app%E9%80%9A%E7%94%A8%E5%9E%8B%E6%8B%92%E7%BB%9D%E6%9C%8D%E5%8A%A1%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90%E6%8A%A5%E5%91%8A/
我们可以试着写一个超级拒绝服务的fuzz插件,这里为了方便直接进入drozer的公共模块代码目录里写自己的dex插件。
drozer/src/drozer/modules/common/IntentTest.java
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
import android.content.Intent;
import android.content.Context; import java.io.Serializable; public class IntentTest {
public static class test implements Serializable {
public static boolean superfuzz_Activity(Context context ,String package_params, String compoment_params ){
public static boolean superfuzz_Broadcast(Context context ,String package_params, String compoment_params ){
public static boolean superfuzz_Service(Context context ,String package_params, String compoment_params ){ } |
重新make,drozer/src/drozer/modules/common/下将多出一个IntentTest.apk和IntentTest$test.class,IntentTest.java先被javac编译成class,再被dx转换成IntentTest.apk
然后再重新安装drozer,不影响之前安装的drozer
python setup.py install
3.写python插件测试调用dex插件
先用self.loadClass动态加载common/IntentTest.apk,然后就可以指定调用函数方法。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
from drozer.modules import common, Module
class test(Module,common.ClassLoader):
def execute(self, arguments): |
4.测试插件
直接针对某个包的导出组件进行自动化的Fuzz测试,效果还不错。
5.关于dex插件的原理
用java编写核心代码,用python调用,drozer可谓是安卓安全测试神器,这些功能是怎么实现的呢?
这里我只简单介绍下,具体可以看到下图插件的MD5值,drozer是通过protobuf协议传送本地插件apk文件到app的cache目录,然后动态加载的。
至于python是如何和dex插件交互的,建议大家深读下drozer的源代码,这里向drozer的作者致敬,能开发出如此强大的框架!
转载自:http://appscan.360.cn/blog/?p=150 作者:Rayh4c