資源共享吧|易語言論壇|逆向破解教程|輔助開發(fā)教程|網(wǎng)絡(luò)安全教程|anzei.cn|我的開發(fā)技術(shù)隨記

 找回密碼
 注冊(cè)成為正式會(huì)員
查看: 1249|回復(fù): 1
打印 上一主題 下一主題

[安卓逆向破解] 零基礎(chǔ)安卓逆向?qū)W習(xí)之旅(三)

[復(fù)制鏈接]

8

主題

8

帖子

0

精華

新手上路

Rank: 1

資源幣
19
積分
16
貢獻(xiàn)
0
在線時(shí)間
2 小時(shí)
注冊(cè)時(shí)間
2020-2-20
最后登錄
2020-5-2
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-2-20 14:00:03 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
零基礎(chǔ)安卓逆向?qū)W習(xí)之旅(三)


上期小狼跟大伙兒分享了如何初步檢查APP安全,今天跟大家分享的是Drozer基本使用,本期主要是介紹一個(gè)android安全評(píng)估框架-drozer的基本使用。這是一個(gè)由運(yùn)行在電腦上的”console”及安裝于android設(shè)備上的drozer agent提供“server”這兩個(gè)部分組成的工具,可以通過在console上執(zhí)行命令或編寫drozer的擴(kuò)展模塊來調(diào)用android package manager獲取設(shè)備上app及其組件的相關(guān)信息,從而對(duì)初步鎖定有表面弱點(diǎn)的app,準(zhǔn)備好了嗎?要開始啦~~~

0x01 正文

1、安裝、配置drozer

(1)下載drozer (https://labs.mwrinfosecurity.com/tools/drozer/),選擇drozer(Windows Installer)進(jìn)行下載。




(2) 解壓下載后的.zip,并運(yùn)行其目錄下的.exe文件,進(jìn)行drozer安裝


安裝過程中應(yīng)記住drozer的安裝路徑。




(3)安裝完成后,cmd中將路徑切換到drozer安裝路徑,執(zhí)行drozer確認(rèn)安裝成功。



(4)確認(rèn)drozer可以順利獲取到安裝在系統(tǒng)上的java,執(zhí)行drozer console,如出現(xiàn)如下界面,則無法正常獲取。


修改環(huán)境變量中的PATH變量,使其包含java的安裝路徑。




如確認(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\***)。




不再提示java錯(cuò)誤。



2、安裝agent.apk,進(jìn)行drozer會(huì)話

(1)通過ADB向設(shè)備中安裝drozer Agent

運(yùn)行adb install agent.apk,將drozer解壓包中的agent.apk安裝進(jìn)設(shè)備。





此時(shí),可在手機(jī)上順利運(yùn)行drozer Agent。




(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)如下界面。



(3)進(jìn)行drozer會(huì)話

在PC上執(zhí)行drozer console connect,是PC的drozerconsole與手機(jī)drozerAgent建立drozer會(huì)話。




4、枚舉設(shè)備安裝包

在drozer console下執(zhí)行run app.package.list,查看包列表。







App.package.list這個(gè)模塊是通過Android package manager來枚舉設(shè)備上安裝包的包名及其app名的簡(jiǎn)單信息,通過run app.package.list –h(-help)可查看其功能使用。




如圖,可以通過添加適當(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],查看包信息:





上圖中,顯示安裝包各相關(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]




輸出包中的所有活動(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]



列出包中各內(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、查看源代碼

對(duì)于上邊幾種枚舉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)




10、drozer模塊

Drozer模塊是運(yùn)用python語言編寫的代碼,再通過drozer agent與android平臺(tái)進(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ù)組描述模塊的命名空間,對(duì)應(yīng)著文件所保存的目錄。





(3)Executor

每個(gè)模塊都必須定義一個(gè)單一方法execute(),在模塊被執(zhí)行時(shí),這個(gè)方法都會(huì)被drozer所調(diào)用。execute()通過對(duì)android平臺(tái)進(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。





(2)模塊安裝

保存模塊文件

可在drozer目錄下,創(chuàng)建一個(gè)保存模塊的目錄,并上邊文件以ex.random.getinteger在目錄下保存,文件名前綴應(yīng)對(duì)應(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



如圖,可通過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))



    仍然是對(duì)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)造信息:


    結(jié)語:今天跟大伙分享的是drozer的使用以及如何自定開發(fā)drozer模塊
  • 回復(fù)

    使用道具 舉報(bào)

    2

    主題

    302

    帖子

    0

    精華

    終身高級(jí)VIP會(huì)員

    Rank: 7Rank: 7Rank: 7

    資源幣
    4
    積分
    309
    貢獻(xiàn)
    0
    在線時(shí)間
    37 小時(shí)
    注冊(cè)時(shí)間
    2020-8-14
    最后登錄
    2023-2-6

    終身VIP會(huì)員

    沙發(fā)
    發(fā)表于 2020-9-19 09:01:38 | 只看該作者
    祝資源共享吧越來越火!
     點(diǎn)擊右側(cè)快捷回復(fù)  

    本版積分規(guī)則

    小黑屋|資源共享吧 ( 瓊ICP備2023000410號(hào)-1 )

    GMT+8, 2024-10-23 06:24 , Processed in 0.035125 second(s), 15 queries , MemCached On.

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2021, Tencent Cloud.

    快速回復(fù) 返回頂部 返回列表