资源共享吧|易语言论坛|逆向破解教程|辅助开发教程|网络安全教程|www.zygx8.com|我的开发技术随记

 找回密码
 注册成为正式会员
查看: 996|回复: 1

[安卓逆向破解] 零基础安卓逆向学习之旅(三)

[复制链接]

8

主题

8

帖子

0

精华

新手上路

Rank: 1

资源币
19
积分
16
贡献
0
在线时间
2 小时
注册时间
2020-2-20
最后登录
2020-5-2
发表于 2020-2-20 14:00:03 | 显示全部楼层 |阅读模式
零基础安卓逆向学习之旅(三)


上期小狼跟大伙儿分享了如何初步检查APP安全,今天跟大家分享的是Drozer基本使用,本期主要是介绍一个android安全评估框架-drozer的基本使用。这是一个由运行在电脑上的”console”及安装于android设备上的drozer agent提供“server”这两个部分组成的工具,可以通过在console上执行命令或编写drozer的扩展模块来调用android package manager获取设备上app及其组件的相关信息,从而对初步锁定有表面弱点的app,准备好了吗?要开始啦~~~

0x01 正文

1、安装、配置drozer

(1)下载drozer (https://labs.mwrinfosecurity.com/tools/drozer/),选择drozer(Windows Installer)进行下载。


1.jpg

(2) 解压下载后的.zip,并运行其目录下的.exe文件,进行drozer安装
2.jpg

安装过程中应记住drozer的安装路径。

3.jpg


(3)安装完成后,cmd中将路径切换到drozer安装路径,执行drozer确认安装成功。
4.jpg


(4)确认drozer可以顺利获取到安装在系统上的java,执行drozer console,如出现如下界面,则无法正常获取。
5.jpg

修改环境变量中的PATH变量,使其包含java的安装路径。

6.jpg


如确认PATH变量添加正确,drozer仍无法正常获取java,则应在用户主文件夹下创建”.drozer_config”文件,并编辑如下内容:

       " [executables]

        Java=[Path tojava]"

如图,由于图形界面下无法创建.***格式文件,可以在cmd下运行

copy con .***进行读取键盘输入并创建文件(ctrl+z结束),再将该拷贝到用户主文件夹(C:\User\***)。


7.jpg

不再提示java错误。
9.jpg


2、安装agent.apk,进行drozer会话

(1)通过ADB向设备中安装drozer Agent

运行adb install agent.apk,将drozer解压包中的agent.apk安装进设备。


10.jpg


此时,可在手机上顺利运行drozer Agent。

11.jpg


(2)使用ADB建立端口转发

PC上执行adb forwardtcp:31415 tcp:31415,并在手机的drozer Agent点击Embedded Server,再点击按钮Disabled转为Enabled,出现如下界面。

12.jpg

(3)进行drozer会话

在PC上执行drozer console connect,是PC的drozerconsole与手机drozerAgent建立drozer会话。


13.jpg

4、枚举设备安装包

在drozer console下执行run app.package.list,查看包列表。


14.jpg




App.package.list这个模块是通过Android package manager来枚举设备上安装包的包名及其app名的简单信息,通过run app.package.list –h(-help)可查看其功能使用。

15.jpg


如图,可以通过添加适当参数,来更明确实现枚举过程:

通过过滤器,枚举出与输入字符相关的安装包;

Run app.package.list –f email

通过-g,-u查找相关user ID/group ID的安装包;

利用app.package.info查看安装包的具体信息;

通过run app.package.info –help查看其使用。

其中,可执行run app.package.info –a(--package)[package name],查看包信息:


16.jpg


上图中,显示安装包各相关信息:

Application Label:APP名;

Process Name:该APP的进程名;

Version:APP安装版本;

Data Directory:用户数据及APP相关数据的保存目录;

APK Path:该APP的.apk文件的所在路径;

UID:APP在设备上的用户ID;

GID:APP在设备上的系统用户组IDs;

Shared Libraries:APP所使用到的共享库的路径;

Shared User ID:APP共享用户的ID;

Uses Permissions:APP的权限列表。



5、枚举APP活动

这里使用的则是app.activity.info,其用法跟上边的相似。

run app.activity.info –a [package name]

17.jpg


输出包中的所有活动组件及其授权,具体功能用法可通过run app.activity.info –help查看。



6、枚举APP服务

通过run app.servise.info –a [packagename]查看。



7、枚举广播接收者

执行run app.broadcast.info –a [packagename],显示出intentfilters信息,runapp.broadcast.info –i(--show-intent-filters)



8、枚举内容提供者

run app.provider.info –a [package name]

18.jpg

列出包中各内容提供者,并输出其相关信息:

Authorities:执行其SQLite前端的类的名称;

Read permission:可读取该内容的权限;

Write permission:可写入该内容的权限;

Grant URI permissions:是否有抓取URI的权限。



9、查看源代码

对于上边几种枚举app包及包组件信息的执行命令的用法基本相似,因为这些枚举命令的执行其实是调用了drozer的各个Python模块。这些模块通过android package manager获取app中acvitity/service/broadcast/provider组件的信息。可以通过在github上drozer项目查找这些模块的源代码,了解drozer模块的编写方式及各个模块的功能实现,从而结合自己的需求编写相应功能的模块,扩展drozer的功能。

(https://github.com/mwrlabs/drozer/tree/develop/src/drozer/modules/app)

19.jpg


10、drozer模块

Drozer模块是运用python语言编写的代码,再通过drozer agent与android平台进行交互。

(1)模块结构

每一个drozer模块都是一个python类,都是通过继承drozer.modules.Module类来生成各具功能的drozer模块,所以在每次编写模块时,都应导入drozer.modules.Modules这个模块。

(2)元数据

为了方便系统组织各个模块,和生成一致的帮助及有用信息,drozer要求每个模块都需配置几个预定的元数据:

name:一个标题名用于描述模块的目的;

description:用于描述该模块所能实现的功能;

example:执行模块的相关命令举例;

anthor:模块的作者;

date:模块的最新更新日期;

license:发布模块的许可证;

path:通过一个数组描述模块的命名空间,对应着文件所保存的目录。


20.jpg


(3)Executor

每个模块都必须定义一个单一方法execute(),在模块被执行时,这个方法都会被drozer所调用。execute()通过对android平台进行一定操作后,将结果显示在屏幕中。

(4)输出流

Drozer模块在显示数据的输出流上,是通过调用self.stdout/self.stderr的write()方法完成数据显示的,而不使用print关键字。



11、自定义模块

(1)创建一个模块ex.random.getinteger。



21.jpg

(2)模块安装

保存模块文件

可在drozer目录下,创建一个保存模块的目录,并上边文件以ex.random.getinteger在目录下保存,文件名前缀应对应path数组中的命名空间

创建模块库

首次安装模块,需要为模块创建一个模块库

Module repository create [path-to-your-module-dir]/repo

安装模块

Module install [path-to-your-module-dir]/ex.random.getinteger

22.jpg

如图,可通过ex.random.getinteger –h显示元数据信息,执行ex.random.getinteger返回随机整数。



编写一个枚举设备信息的模块

通过在模块中映射android java API中相应类,来获取、查看我们手机上设备及操作系统构造的相关信息,所编写的Python代码如下:

fromdrozer.modules import Module

classInfo(Module):

    name="Get Device info"

    description="A module that returnsinformation about the device and hardware features"

    examples="run ex.device.info"

    data="2016-06-16"

    author="hawolf"

    license="GNU GPL"

    path=["ex","device"]

    def execute(self,arguments):

       build=self.new("android.os.Build")

        self.stdout.write("Getting deviceinfo...\n")

        self.stdout.write("
  • BOARD:%s\n"%(build.BOARD))

            self.stdout.write("
  • BOOTLOADER:%s\n"%(build.BOOTLOADER))

            self.stdout.write("
  • BRAND:%s\n"%(build.BRAND))

            self.stdout.write("
  • CPU_ABI:%s\n"%(build.CPU_ABI))

            self.stdout.write("
  • CPU_ABI2:%s\n"%(build.CPU_ABI2))

            self.stdout.write("
  • DEVICE:%s\n"%(build.DEVICE))

            self.stdout.write("
  • DISPLAY:%s\n"%(build.DISPLAY))

            self.stdout.write("
  • FINGERPRINT:%s\n"%(build.FINGERPRINT))

            self.stdout.write("
  • HARDWARE:%s\n"%(build.HARDWARE))

            self.stdout.write("
  • MANUFACTURER:%s\n"%(build.MANUFACTURER))

            self.stdout.write("
  • MODEL:%s\n"%(build.MODEL))

            self.stdout.write("
  • TAGS:%s\n"%(build.TAGS))



    仍然是对drozer.modules.Module类的继承,进行元数据配置,其中最主要的则是  build=self.new("android.os.Build"),通过模块中的new方法来映射Android java API在java类,从而通过android.os.Build类,来获取、查看Android设备中的硬件、系统构造信息,之后,将文件以ex.device.info命名保存在模块目录下,并执行命令进行模块安装:

    Module install [path-to-your-module-dir]/ex.device.info

    执行run ex.device.info可查看设备硬件及系统构造信息:

    23.jpg
    结语:今天跟大伙分享的是drozer的使用以及如何自定开发drozer模块
  • 回复

    使用道具 举报

    2

    主题

    302

    帖子

    0

    精华

    终身高级VIP会员

    Rank: 7Rank: 7Rank: 7

    资源币
    4
    积分
    309
    贡献
    0
    在线时间
    37 小时
    注册时间
    2020-8-14
    最后登录
    2023-2-6

    终身VIP会员

    发表于 2020-9-19 09:01:38 | 显示全部楼层
    祝资源共享吧越来越火!
    回复 支持 反对

    使用道具 举报

     点击右侧快捷回复  

    本版积分规则

    小黑屋|资源共享吧 ( 琼ICP备2021005790号-1 )

    GMT+8, 2024-4-20 21:30 , Processed in 0.060053 second(s), 15 queries , MemCached On.

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表