<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于Android開發的ADT獲取內存中的敏感信息

西西 ? 來源:哆啦安全 ? 作者:橙留香Park ? 2022-09-06 15:22 ? 次閱讀

0x01 利用ADT 獲取內存中的敏感信息

對于基本的內存分析,我們可以使用 Android Studio 的內置工具。它們在 Android 監視器選項卡上。如果需要轉儲內存,請選擇需要分析的設備和應用,單擊“轉儲 Java 堆”。這將在 capture 目錄中創建一個 hprof 文件,該目錄位于應用程序的項目路徑上

:我們可以通過使用ADT對客戶端內存的訪問,來進行查看各種內存中未加密的敏感信息

ADT(Android Development Tools)在Eclipse編譯IDE環境中,需安裝ADT(Android Developer Tools)Plug-in,這是Android在Eclipse上的開發工具。目前Android開發所用的開發工具主要有Android Studio 、intellij idea、Eclipse,在Eclipse編譯IDE環境中

Android Studio 是谷歌推出的一個Android集成開發工具,基于IntelliJ IDEA. 類似 Eclipse ADT,Android Studio 提供了集成的 Android 開發工具用于開發和調試

Android開發工具(ADT,Android studio),下載地址:https://developer.android.com/studio/index.html

通過Android Studio工具中的Android Device Monitor 工具的“Heap dump”功能訪問“堆內存”的使用情況和內存數據的變化,并檢查是否內存中存在“用戶名”和“密碼”的” “cvv” 或 “key” 等重要信息是否泄露

:Android Studio 3.0開始棄用Android Device Monitor,雖然說被“棄用”,但是不代表不支持,我們還是可以通過其他方式來使用Android Device Monitor,就是DDMS,大家之前看過博主同學文章的,應該知道,不太清除的可以翻看的之前的文章,此處不過多講解

使用Heap Dump,獲取我們當前正在運行的容易收到攻擊的應用程序的“快照”,然后“導出”文件擴展名為“HPROF”的“二進制”格式文件,其格式為“HPROF”?!癉alvik格式”,但我們需要將其轉換為“J2se HPROF”格式,以便“Java”可讀

Memory Monitor是什么?

在Android Studio(以下簡稱AS)中Android Monitor是一個主窗口,它包含了Logcat,、Memory Monitor、CPU Monitor、 GPU Monitor和Network Monitor。其中Memory Monitor可以輕松地監視應用程序的性能和內存使用情況,以便于找到被分配的對象,定位內存泄漏,并跟蹤連接設備中正在使用的內存數量。Memory Monitor可以報告出你的應用程序的內存分配情況, 更形象的呈現出應用程序使用的內存。它的作用如下:

實時顯示可用的和分配的Java內存的圖表

實時顯示垃圾收集(GC)事件

啟動垃圾收集事件

快速測試應用程序的緩慢是否與過度的垃圾收集事件有關

快速測試應用程序崩潰是否與內存耗盡有關

使用Memory Monitor之前要確保手機開啟了開發者模式和USB調試。
使用的步驟為:

運行需要監控的應用程序

點擊AS面板下面的Android圖標,并選擇Monitors選項

Heap Dump是什么?

Heap Dump的主要功能就是查看不同的數據類型在內存中的使用情況。它可以幫助你找到大對象,也可以通過數據的變化發現內存泄

運行Android Device Monitor,并打開InsecureBankv2 應用程序

e6cd4c9c-2d1e-11ed-ba43-dac502259ad0.png

打開InsecureBankv2 應用程序后,會發現“Android Device Monitor”的“Device”中出現InsecureBankv2 應用程序

e6ed3f98-2d1e-11ed-ba43-dac502259ad0.png

單擊“Update HEAP”按鈕

e70e57be-2d1e-11ed-ba43-dac502259ad0.png

在APP中的登錄界面輸入賬號密碼登錄的操作,然后點擊“Dump HPROF file”導出包含剛剛操作的堆內存信息的文件,文件名默認為當前應用程序名.hprof文件名命名:“com.android.insecurebankv2.hprof”

e735f210-2d1e-11ed-ba43-dac502259ad0.png

e746228e-2d1e-11ed-ba43-dac502259ad0.png

要對內存轉儲進行更高級的分析,需要使用Eclipse Memory Analyzer Tool (MAT)。它可作為 Eclipse 插件或獨立應用程序使用。要分析 MAT 中的轉儲,可使用 Android SDK 自帶的hprof-conv平臺工具

./hprof-conv memory.hprof memory-mat.hprof

MAT 提供了多種用于分析內存轉儲的工具。例如,直方圖提供了從給定類型中捕獲的對象數量的估計值,線程概覽顯示了進程的線程和堆棧幀。支配樹提供有關對象之間保持活動依賴關系的信息,以及可以使用正則表達式來過濾數據的結果

使用 MemoryAnalyzer(MAT)程序來檢查內存,MAT有兩種安裝方式

一種安裝方式是將MAT當做eclipse的插件進行安裝:啟動Eclipse --> Help --> Eclipse Marketplace,然后搜索Memory Analyzer,安裝,重啟eclipse即可

另外一種安裝方式是將MAT作為一個獨立的軟件進行安裝:https://www.eclipse.org/mat/

e7629432-2d1e-11ed-ba43-dac502259ad0.png

Android Studio Profile與Leak Canary dump出來的內存快照無法直接在MAT當中打開,需要使用hprof-conv來轉換操作一下,這里我們使用“Appie”命令從“Android Device Monitor”獲取的“hprof”格式,格式轉換如下:

hprof-conv  com.android.insecurebankv2.hprof  test.hprof

e7752098-2d1e-11ed-ba43-dac502259ad0.png

e797776a-2d1e-11ed-ba43-dac502259ad0.png

打開程序“MemoryAnalyzer.exe”并“導入”我們已轉換格式的文件“test.hprof”,如下:

e7a7e4b0-2d1e-11ed-ba43-dac502259ad0.png

e7cba3b4-2d1e-11ed-ba43-dac502259ad0.png

點擊“Open Dominator Tree for entire hap”按鈕

e7ea89dc-2d1e-11ed-ba43-dac502259ad0.png

然后,在窗口中檢查“dominator_tree”,發現有一個與我們剛剛操作的應用程序相關的命名

e808c514-2d1e-11ed-ba43-dac502259ad0.png

e8223a1c-2d1e-11ed-ba43-dac502259ad0.png

不出意外我們在轉賬頁面找到了賬號和密碼,如下:

e8498c84-2d1e-11ed-ba43-dac502259ad0.png

如果查看“Convert ByteCode”之后的“Source code”,“Class Dotransfer”的“Properties”類似:

public class DoTransferextends Activity{
    public static final String MYPREFS2 = "mySharedPreferences";
    String acc1;
    String acc2;
    EditText amount;
    Button button1;
    EditText from;
    Button getAccounts;
    InputStream in ;
    JSONObject jsonObject;
    String number = "5554";
    String passNormalized;
    EditText phoneNumber;
    String protocol = "http://";
    BufferedReader reader;
    HttpResponse responseBody;
    String result;
    SharedPreferences serverDetails;
    String serverip = "";
    String serverport = "";
    EditText to;
    Button transfer;
    String usernameBase64ByteString;}

或使用OQL查詢語句來快速查詢內存中的關鍵字,因為MAT 支持一種類似于 SQL 的查詢語言 OQL(Object Query Language)。OQL 使用類 SQL 語法,可以在堆中進行對象的查找和篩選,比如如下:

e86c46b6-2d1e-11ed-ba43-dac502259ad0.png

Object Query Language studio是一個 MAT 特性,它允許使用類似 SQL 的語言從內存轉儲中查詢對象。MAT允許我們通過在簡單對象上調用 Java 方法來轉換它們,并且它提供了一個用于在 MAT之上構建復雜工具的 API

SELECT * FROM java.lang.String

String在上面的示例中,內存轉儲中的所有字符串對象都將被選中。結果將包括對象的類、內存地址、值和保留計數。要過濾這些信息并只查看每個字符串的值,如下查詢語句:

SELECT toString(object) FROM java.lang.String object

或者
SELECT object.toString() FROM java.lang.String object

MAT SQL 語法也支持原始數據類型,所以可訪問所有 char 數組的內容:

SELECT toString(arr) FROM char[] arr

如果我們得到的結果與之前的結果相似,因為 String 和其它 Java 數據類型只是原始數據類型的包裝器?,F在讓我們過濾結果,下面的示例SQL語句將選擇包含 RSA 密鑰的ASN.1 OID的所有字節數組,但給不表示我們給定的字節數組是包含 RSA(相同的字節序列可能是其它東西的一部分)這也是有可能的:

SELECT * FROM byte[] b WHERE toString(b).matches(".*1.2.840.113549.1.1.1.*")

如果我們覺得比較麻煩不想擇整個對象,可以使用一個 SQL 語句來做查詢,比如我們只想找到內存中所有存在"password"字段的對象,如下:

SELECT password FROM ".*" WHERE (null != password)

MAT進行分析內存,可以嘗試的分析技巧:

通過一些關鍵字來快速查詢,比如“password”、“pass”、“pin”、“secret”、“private”等

字符串、字符數組、字節數組等中的加密模式(如RSA、md5等加密)

已知的密碼,比如已知道某個后端的密鑰Key的關鍵字,然后通過關鍵字去內存中搜索

... ...

在分析內存是否泄露信息的時候,我們可能第一次查看內存并不一定會有什么發現,只需要更加耐心重復的多看幾次說不定就有發現了,另外觀察特定內存段(例如,字節數組)的變化方式說不定會發現一些隱藏的比較深且不容易發現的敏感數據

編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Android
    +關注

    關注

    12

    文章

    3863

    瀏覽量

    125780
  • ADT
    ADT
    +關注

    關注

    0

    文章

    11

    瀏覽量

    9465

原文標題:Android利用ADT獲取內存中的敏感信息

文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    ubuntu下搭建Android開發環境

    /downloads/2)下載ADT Plugin,利用eclipse的help>install software安裝。http://developer.android.com/sdk/installing
    發表于 08-22 09:57

    Android SDK開發環境搭建

    ://developer.android.com上的安裝步驟進行安裝。不過,在Android 2.3,對應的ADT 8.0.0的文件布局發生了 基于SDK進行
    發表于 09-03 14:08

    飛凌嵌入式開發Android應用程序開發-入門級

    ,有利于您對Android系統的學習。所用的系統是Ubuntu 12.04操作系統,開發工具是ADT-Bundle。一 軟件實現框架......................飛凌嵌入式開發
    發表于 05-20 14:41

    [資料分享]+Android內核剖析

    內存管理 19210.3 對AmS數據對象的理解 21110.4 ActivityGroup的內部機制 214第11章 從輸入設備獲取消息 22111.1
    發表于 09-26 10:46

    [分享]4412開發Android教程——Android開發環境搭建

    `分享視頻鏈接:http://pan.baidu.com/s/1o6tgEeQ 下載和安裝Android應用的開發環境新建Android虛擬環境 Android IDE簡介JDK編譯
    發表于 10-21 17:10

    Android安全開發之WebView的地雷

    `Android安全開發之WebView的地雷0X01 About WebView在Android開發
    發表于 09-09 19:35

    ADT7310讀取的溫度值波動較大

    實驗項目,選取 ADT7310 作為溫度傳感器,MCU利用SSP接口模擬SPI的方式與AD通訊,通訊成功,能夠正常讀取ADT7310信息和溫度值,配置為連續轉換,連續讀取模式,供電
    發表于 10-24 09:38

    ADT7420讀取異常

    目前在一項目中使用ADT7420作為溫度傳感器獲取環境溫度,但是在使用中發現讀取ADT7420的寄存器的返回值始終為0x0D、0x0E或0x0F,同樣一套代碼與I2C總線上的其他設備通信則無
    發表于 11-16 09:05

    基于ADT7475熱監控器和PWM風扇控制器的ADT7475EBEVB評估板

    ADT7475EBEVB,ADT7475控制器評估板是一款熱監控器和多個PWM風扇控制器,適用于需要主動系統冷卻的噪聲敏感或功耗敏感型應用。 ADT
    發表于 05-10 09:34

    Android環境的搭建

    Java的核心,包括了Java運行環境,Java工具和Java基礎的類庫。2.目前Android開發所用的開發工具是Eclipse,在Eclipse編譯IDE環境,安裝
    發表于 07-09 07:21

    Android性能優化之Java內存

    Android開發中,一些不好的編程習慣會導致我們的開發的app存在內存泄露的情況。下面介紹一些在Android
    發表于 04-26 15:38 ?887次閱讀
    <b class='flag-5'>Android</b>性能優化之Java<b class='flag-5'>內存</b>

    Android ADT 23.0.3應用程序免費下載

    Android ADT目前已經更新到23.0.3,有需要的不要錯過。它是在WINDOWS系統平臺上SDK環境下用來開發安卓軟件所必不可少的本地安裝插件。
    發表于 07-11 17:48 ?20次下載

    如何使用Android SDK和ADT插件設置工作環境

    您現在已經準備好環境開發Android應用程序。我們安裝了Android SDK,Eclipse和ADT插件。
    的頭像 發表于 11-11 09:27 ?1875次閱讀
    如何使用<b class='flag-5'>Android</b> SDK和<b class='flag-5'>ADT</b>插件設置工作環境

    Android開發模式詳細介紹

    。在本章中,您將了解Android Studio、如何獲取Android開發中使用的獨立SDK工具、各種Android模擬器和版本控制系統。
    發表于 03-03 08:00 ?0次下載
    <b class='flag-5'>Android</b>的<b class='flag-5'>開發</b>模式詳細介紹

    SDCardUtils封裝類應用:設備信息獲取實現方法

    硬件名、SDK版本、android版本 、語言支持、默認語言 六、 獲取 SD 卡存儲信息 七、 獲取手機 RAM、ROM存儲信息
    的頭像 發表于 11-13 09:40 ?344次閱讀
    SDCardUtils封裝類應用:設備<b class='flag-5'>信息</b><b class='flag-5'>獲取</b>實現方法
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>