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

 找回密碼
 注冊成為正式會員
查看: 1624|回復: 1
打印 上一主題 下一主題

[安卓逆向破解] 零基礎安卓逆向學習之旅(三)

[復制鏈接]

8

主題

8

帖子

0

精華

新手上路

Rank: 1

資源幣
19
積分
16
貢獻
0
在線時間
2 小時
注冊時間
2020-2-20
最后登錄
2020-5-2
跳轉到指定樓層
樓主
發(fā)表于 2020-2-20 14:00:03 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
零基礎安卓逆向學習之旅(三)


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

0x01 正文

1、安裝、配置drozer

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




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


安裝過程中應記住drozer的安裝路徑。




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



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


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




如確認PATH變量添加正確,drozer仍無法正常獲取java,則應在用戶主文件夾下創(chuàng)建”.drozer_config”文件,并編輯如下內(nèi)容:

       " [executables]

        Java=[Path tojava]"

如圖,由于圖形界面下無法創(chuàng)建.***格式文件,可以在cmd下運行

copy con .***進行讀取鍵盤輸入并創(chuàng)建文件(ctrl+z結束),再將該拷貝到用戶主文件夾(C:\User\***)。




不再提示java錯誤。



2、安裝agent.apk,進行drozer會話

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

運行adb install agent.apk,將drozer解壓包中的agent.apk安裝進設備。





此時,可在手機上順利運行drozer Agent。




(2)使用ADB建立端口轉發(fā)

PC上執(zhí)行adb forwardtcp:31415 tcp:31415,并在手機的drozer Agent點擊Embedded Server,再點擊按鈕Disabled轉為Enabled,出現(xiàn)如下界面。



(3)進行drozer會話

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




4、枚舉設備安裝包

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







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




如圖,可以通過添加適當參數(shù),來更明確實現(xiàn)枚舉過程:

通過過濾器,枚舉出與輸入字符相關的安裝包;

Run app.package.list –f email

通過-g,-u查找相關user ID/group ID的安裝包;

利用app.package.info查看安裝包的具體信息;

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

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





上圖中,顯示安裝包各相關信息:

Application Label:APP名;

Process Name:該APP的進程名;

Version:APP安裝版本;

Data Directory:用戶數(shù)據(jù)及APP相關數(shù)據(jù)的保存目錄;

APK Path:該APP的.apk文件的所在路徑;

UID:APP在設備上的用戶ID;

GID:APP在設備上的系統(tǒng)用戶組IDs;

Shared Libraries:APP所使用到的共享庫的路徑;

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

Uses Permissions:APP的權限列表。



5、枚舉APP活動

這里使用的則是app.activity.info,其用法跟上邊的相似。

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




輸出包中的所有活動組件及其授權,具體功能用法可通過run app.activity.info –help查看。



6、枚舉APP服務

通過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)容提供者,并輸出其相關信息:

Authorities:執(zhí)行其SQLite前端的類的名稱;

Read permission:可讀取該內(nèi)容的權限;

Write permission:可寫入該內(nèi)容的權限;

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



9、查看源代碼

對于上邊幾種枚舉app包及包組件信息的執(zhí)行命令的用法基本相似,因為這些枚舉命令的執(zhí)行其實是調(diào)用了drozer的各個Python模塊。這些模塊通過android package manager獲取app中acvitity/service/broadcast/provider組件的信息?梢酝ㄟ^在github上drozer項目查找這些模塊的源代碼,了解drozer模塊的編寫方式及各個模塊的功能實現(xiàn),從而結合自己的需求編寫相應功能的模塊,擴展drozer的功能。

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




10、drozer模塊

Drozer模塊是運用python語言編寫的代碼,再通過drozer agent與android平臺進行交互。

(1)模塊結構

每一個drozer模塊都是一個python類,都是通過繼承drozer.modules.Module類來生成各具功能的drozer模塊,所以在每次編寫模塊時,都應導入drozer.modules.Modules這個模塊。

(2)元數(shù)據(jù)

為了方便系統(tǒng)組織各個模塊,和生成一致的幫助及有用信息,drozer要求每個模塊都需配置幾個預定的元數(shù)據(jù):

name:一個標題名用于描述模塊的目的;

description:用于描述該模塊所能實現(xiàn)的功能;

example:執(zhí)行模塊的相關命令舉例;

anthor:模塊的作者;

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

license:發(fā)布模塊的許可證;

path:通過一個數(shù)組描述模塊的命名空間,對應著文件所保存的目錄。





(3)Executor

每個模塊都必須定義一個單一方法execute(),在模塊被執(zhí)行時,這個方法都會被drozer所調(diào)用。execute()通過對android平臺進行一定操作后,將結果顯示在屏幕中。

(4)輸出流

Drozer模塊在顯示數(shù)據(jù)的輸出流上,是通過調(diào)用self.stdout/self.stderr的write()方法完成數(shù)據(jù)顯示的,而不使用print關鍵字。



11、自定義模塊

(1)創(chuàng)建一個模塊ex.random.getinteger。





(2)模塊安裝

保存模塊文件

可在drozer目錄下,創(chuàng)建一個保存模塊的目錄,并上邊文件以ex.random.getinteger在目錄下保存,文件名前綴應對應path數(shù)組中的命名空間

創(chuàng)建模塊庫

首次安裝模塊,需要為模塊創(chuàng)建一個模塊庫

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返回隨機整數(shù)。



編寫一個枚舉設備信息的模塊

通過在模塊中映射android java API中相應類,來獲取、查看我們手機上設備及操作系統(tǒng)構造的相關信息,所編寫的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類的繼承,進行元數(shù)據(jù)配置,其中最主要的則是  build=self.new("android.os.Build"),通過模塊中的new方法來映射Android java API在java類,從而通過android.os.Build類,來獲取、查看Android設備中的硬件、系統(tǒng)構造信息,之后,將文件以ex.device.info命名保存在模塊目錄下,并執(zhí)行命令進行模塊安裝:

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

    執(zhí)行run ex.device.info可查看設備硬件及系統(tǒng)構造信息:


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

    使用道具 舉報

    2

    主題

    302

    帖子

    0

    精華

    終身高級VIP會員

    Rank: 7Rank: 7Rank: 7

    資源幣
    4
    積分
    309
    貢獻
    0
    在線時間
    37 小時
    注冊時間
    2020-8-14
    最后登錄
    2023-2-6

    終身VIP會員

    沙發(fā)
    發(fā)表于 2020-9-19 09:01:38 | 只看該作者
    祝資源共享吧越來越火!
    回復 支持 反對

    使用道具 舉報

     點擊右側快捷回復  

    本版積分規(guī)則

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

    GMT+8, 2025-3-13 04:05 , Processed in 0.036999 second(s), 15 queries , MemCached On.

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2021, Tencent Cloud.

    快速回復 返回頂部 返回列表