新手上路
- 資源幣
- 19
- 積分
- 16
- 貢獻(xiàn)
- 0
- 在線時(shí)間
- 2 小時(shí)
- 注冊時(shí)間
- 2020-2-20
- 最后登錄
- 2020-5-2
|
零基礎(chǔ)安卓逆向?qū)W習(xí)之旅(三)
上期小狼跟大伙兒分享了如何初步檢查APP安全,今天跟大家分享的是Drozer基本使用,本期主要是介紹一個(gè)android安全評估框架-drozer的基本使用。這是一個(gè)由運(yùn)行在電腦上的”console”及安裝于android設(shè)備上的drozer agent提供“server”這兩個(gè)部分組成的工具,可以通過在console上執(zhí)行命令或編寫drozer的擴(kuò)展模塊來調(diào)用android package manager獲取設(shè)備上app及其組件的相關(guān)信息,從而對初步鎖定有表面弱點(diǎn)的app,準(zhǔn)備好了嗎?要開始啦~~~
0x01 正文
1、安裝、配置drozer
(1)下載drozer (https://labs.mwrinfosecurity.com/tools/drozer/),選擇drozer(Windows Installer)進(jìn)行下載。
1.jpg (35.18 KB, 下載次數(shù): 102)
下載附件
保存到相冊
2020-2-20 13:44 上傳
(2) 解壓下載后的.zip,并運(yùn)行其目錄下的.exe文件,進(jìn)行drozer安裝
2.jpg (13.75 KB, 下載次數(shù): 97)
下載附件
保存到相冊
2020-2-20 13:44 上傳
安裝過程中應(yīng)記住drozer的安裝路徑。
3.jpg (19.48 KB, 下載次數(shù): 112)
下載附件
保存到相冊
2020-2-20 13:45 上傳
(3)安裝完成后,cmd中將路徑切換到drozer安裝路徑,執(zhí)行drozer確認(rèn)安裝成功。
4.jpg (23.34 KB, 下載次數(shù): 119)
下載附件
保存到相冊
2020-2-20 13:46 上傳
(4)確認(rèn)drozer可以順利獲取到安裝在系統(tǒng)上的java,執(zhí)行drozer console,如出現(xiàn)如下界面,則無法正常獲取。
5.jpg (14.62 KB, 下載次數(shù): 105)
下載附件
保存到相冊
2020-2-20 13:46 上傳
修改環(huán)境變量中的PATH變量,使其包含java的安裝路徑。
6.jpg (39.42 KB, 下載次數(shù): 105)
下載附件
保存到相冊
2020-2-20 13:48 上傳
如確認(rèn)PATH變量添加正確,drozer仍無法正常獲取java,則應(yīng)在用戶主文件夾下創(chuàng)建”.drozer_config”文件,并編輯如下內(nèi)容:
" [executables]
Java=[Path tojava]"
如圖,由于圖形界面下無法創(chuàng)建.***格式文件,可以在cmd下運(yùn)行
copy con .***進(jìn)行讀取鍵盤輸入并創(chuàng)建文件(ctrl+z結(jié)束),再將該拷貝到用戶主文件夾(C:\User\***)。
7.jpg (8.83 KB, 下載次數(shù): 112)
下載附件
保存到相冊
2020-2-20 13:48 上傳
不再提示java錯(cuò)誤。
9.jpg (8.41 KB, 下載次數(shù): 104)
下載附件
保存到相冊
2020-2-20 13:49 上傳
2、安裝agent.apk,進(jìn)行drozer會(huì)話
(1)通過ADB向設(shè)備中安裝drozer Agent
運(yùn)行adb install agent.apk,將drozer解壓包中的agent.apk安裝進(jìn)設(shè)備。
10.jpg (8.87 KB, 下載次數(shù): 108)
下載附件
保存到相冊
2020-2-20 13:50 上傳
此時(shí),可在手機(jī)上順利運(yùn)行drozer Agent。
11.jpg (12.33 KB, 下載次數(shù): 113)
下載附件
保存到相冊
2020-2-20 13:51 上傳
(2)使用ADB建立端口轉(zhuǎn)發(fā)
PC上執(zhí)行adb forwardtcp:31415 tcp:31415,并在手機(jī)的drozer Agent點(diǎn)擊Embedded Server,再點(diǎn)擊按鈕Disabled轉(zhuǎn)為Enabled,出現(xiàn)如下界面。
12.jpg (19.49 KB, 下載次數(shù): 101)
下載附件
保存到相冊
2020-2-20 13:52 上傳
(3)進(jìn)行drozer會(huì)話
在PC上執(zhí)行drozer console connect,是PC的drozerconsole與手機(jī)drozerAgent建立drozer會(huì)話。
13.jpg (29.29 KB, 下載次數(shù): 105)
下載附件
保存到相冊
2020-2-20 13:53 上傳
4、枚舉設(shè)備安裝包
在drozer console下執(zhí)行run app.package.list,查看包列表。
14.jpg (27.7 KB, 下載次數(shù): 104)
下載附件
保存到相冊
2020-2-20 13:53 上傳
App.package.list這個(gè)模塊是通過Android package manager來枚舉設(shè)備上安裝包的包名及其app名的簡單信息,通過run app.package.list –h(-help)可查看其功能使用。
15.jpg (17.46 KB, 下載次數(shù): 101)
下載附件
保存到相冊
2020-2-20 13:54 上傳
如圖,可以通過添加適當(dāng)參數(shù),來更明確實(shí)現(xiàn)枚舉過程:
通過過濾器,枚舉出與輸入字符相關(guān)的安裝包;
Run app.package.list –f email
通過-g,-u查找相關(guān)user ID/group ID的安裝包;
利用app.package.info查看安裝包的具體信息;
通過run app.package.info –help查看其使用。
其中,可執(zhí)行run app.package.info –a(--package)[package name],查看包信息:
16.jpg (33.79 KB, 下載次數(shù): 106)
下載附件
保存到相冊
2020-2-20 13:54 上傳
上圖中,顯示安裝包各相關(guān)信息:
Application Label:APP名;
Process Name:該APP的進(jìn)程名;
Version:APP安裝版本;
Data Directory:用戶數(shù)據(jù)及APP相關(guān)數(shù)據(jù)的保存目錄;
APK Path:該APP的.apk文件的所在路徑;
UID:APP在設(shè)備上的用戶ID;
GID:APP在設(shè)備上的系統(tǒng)用戶組IDs;
Shared Libraries:APP所使用到的共享庫的路徑;
Shared User ID:APP共享用戶的ID;
Uses Permissions:APP的權(quán)限列表。
5、枚舉APP活動(dòng)
這里使用的則是app.activity.info,其用法跟上邊的相似。
run app.activity.info –a [package name]
17.jpg (28.08 KB, 下載次數(shù): 107)
下載附件
保存到相冊
2020-2-20 13:55 上傳
輸出包中的所有活動(dòng)組件及其授權(quán),具體功能用法可通過run app.activity.info –help查看。
6、枚舉APP服務(wù)
通過run app.servise.info –a [packagename]查看。
7、枚舉廣播接收者
執(zhí)行run app.broadcast.info –a [packagename],顯示出intentfilters信息,runapp.broadcast.info –i(--show-intent-filters)
8、枚舉內(nèi)容提供者
run app.provider.info –a [package name]
18.jpg (39.44 KB, 下載次數(shù): 112)
下載附件
保存到相冊
2020-2-20 13:55 上傳
列出包中各內(nèi)容提供者,并輸出其相關(guān)信息:
Authorities:執(zhí)行其SQLite前端的類的名稱;
Read permission:可讀取該內(nèi)容的權(quán)限;
Write permission:可寫入該內(nèi)容的權(quán)限;
Grant URI permissions:是否有抓取URI的權(quán)限。
9、查看源代碼
對于上邊幾種枚舉app包及包組件信息的執(zhí)行命令的用法基本相似,因?yàn)檫@些枚舉命令的執(zhí)行其實(shí)是調(diào)用了drozer的各個(gè)Python模塊。這些模塊通過android package manager獲取app中acvitity/service/broadcast/provider組件的信息。可以通過在github上drozer項(xiàng)目查找這些模塊的源代碼,了解drozer模塊的編寫方式及各個(gè)模塊的功能實(shí)現(xiàn),從而結(jié)合自己的需求編寫相應(yīng)功能的模塊,擴(kuò)展drozer的功能。
(https://github.com/mwrlabs/drozer/tree/develop/src/drozer/modules/app)
19.jpg (14.01 KB, 下載次數(shù): 105)
下載附件
保存到相冊
2020-2-20 13:57 上傳
10、drozer模塊
Drozer模塊是運(yùn)用python語言編寫的代碼,再通過drozer agent與android平臺進(jìn)行交互。
(1)模塊結(jié)構(gòu)
每一個(gè)drozer模塊都是一個(gè)python類,都是通過繼承drozer.modules.Module類來生成各具功能的drozer模塊,所以在每次編寫模塊時(shí),都應(yīng)導(dǎo)入drozer.modules.Modules這個(gè)模塊。
(2)元數(shù)據(jù)
為了方便系統(tǒng)組織各個(gè)模塊,和生成一致的幫助及有用信息,drozer要求每個(gè)模塊都需配置幾個(gè)預(yù)定的元數(shù)據(jù):
name:一個(gè)標(biāo)題名用于描述模塊的目的;
description:用于描述該模塊所能實(shí)現(xiàn)的功能;
example:執(zhí)行模塊的相關(guān)命令舉例;
anthor:模塊的作者;
date:模塊的最新更新日期;
license:發(fā)布模塊的許可證;
path:通過一個(gè)數(shù)組描述模塊的命名空間,對應(yīng)著文件所保存的目錄。
20.jpg (8.72 KB, 下載次數(shù): 104)
下載附件
保存到相冊
2020-2-20 13:57 上傳
(3)Executor
每個(gè)模塊都必須定義一個(gè)單一方法execute(),在模塊被執(zhí)行時(shí),這個(gè)方法都會(huì)被drozer所調(diào)用。execute()通過對android平臺進(jìn)行一定操作后,將結(jié)果顯示在屏幕中。
(4)輸出流
Drozer模塊在顯示數(shù)據(jù)的輸出流上,是通過調(diào)用self.stdout/self.stderr的write()方法完成數(shù)據(jù)顯示的,而不使用print關(guān)鍵字。
11、自定義模塊
(1)創(chuàng)建一個(gè)模塊ex.random.getinteger。
21.jpg (18.13 KB, 下載次數(shù): 103)
下載附件
保存到相冊
2020-2-20 13:58 上傳
(2)模塊安裝
保存模塊文件
可在drozer目錄下,創(chuàng)建一個(gè)保存模塊的目錄,并上邊文件以ex.random.getinteger在目錄下保存,文件名前綴應(yīng)對應(yīng)path數(shù)組中的命名空間
創(chuàng)建模塊庫
首次安裝模塊,需要為模塊創(chuàng)建一個(gè)模塊庫
Module repository create [path-to-your-module-dir]/repo
安裝模塊
Module install [path-to-your-module-dir]/ex.random.getinteger
22.jpg (27.34 KB, 下載次數(shù): 103)
下載附件
保存到相冊
2020-2-20 13:58 上傳
如圖,可通過ex.random.getinteger –h顯示元數(shù)據(jù)信息,執(zhí)行ex.random.getinteger返回隨機(jī)整數(shù)。
編寫一個(gè)枚舉設(shè)備信息的模塊
通過在模塊中映射android java API中相應(yīng)類,來獲取、查看我們手機(jī)上設(shè)備及操作系統(tǒng)構(gòu)造的相關(guān)信息,所編寫的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類的繼承,進(jìn)行元數(shù)據(jù)配置,其中最主要的則是 build=self.new("android.os.Build"),通過模塊中的new方法來映射Android java API在java類,從而通過android.os.Build類,來獲取、查看Android設(shè)備中的硬件、系統(tǒng)構(gòu)造信息,之后,將文件以ex.device.info命名保存在模塊目錄下,并執(zhí)行命令進(jìn)行模塊安裝:
Module install [path-to-your-module-dir]/ex.device.info
執(zhí)行run ex.device.info可查看設(shè)備硬件及系統(tǒng)構(gòu)造信息:
23.jpg (18.4 KB, 下載次數(shù): 97)
下載附件
保存到相冊
2020-2-20 13:59 上傳
結(jié)語:今天跟大伙分享的是drozer的使用以及如何自定開發(fā)drozer模塊
|
|