工具推薦 | GDA:中國首款現代交互式反編譯器
簡介(新版)
GDA 是一個完全用 C++ 編寫的 Dalvik 字節碼反編譯器。與其他應用反編譯器不同,GDA 不依賴于 Java VM,支持 APK、DEX、ODEX、OAT、JAR、AAR 和 CLASS 文件。
項目地址:https://github.com/charles2gan/GDA-android-reversing-Tool
簡介:http://www.gda.wiki:9090/introducation.php

一、主窗口
打開GDA,將我們要分析的APK文件拖到軟件UI上:

1.目標文件的基本信息;
2.DEX文件使用的API
3.查看DEX中的所有字符串;
4.查看所有方法使用的所有字符串;
5.提取DEX文件中的所有URL(Pro版本);
6.查看AndroidManifest文件;
7.可編輯的十六進制查看器;
8.惡意行為檢測;
9.漏洞掃描(專業版);
10.隱私泄漏掃描(專業版);
11.展開權限,查看權限所屬的模塊/方法;
12.點擊進入入口函數(方法);
13.連接Android設備進行內存轉儲;
14.搜索和訪問歷史記錄,雙擊可查看;
15.目標文件中各元素的比例分布;
16.DEX頭,點擊“DexClass*”項顯示相應頭,每個色塊代表不同的區域頭。當鼠標在其上移動時,將顯示提示。在偏移區域中單擊鼠標右鍵并跳轉到參考位置;
17.加殼的識別;
18.點擊代碼中的相關對象時,顯示該對象的索引值;
19.點擊代碼中的相關對象時,會顯示該對象的包名;
20.單擊代碼中的相關對象時,將顯示該對象的名稱。
二、快捷鍵
快捷鍵說明
快捷鍵描述F5 切換java和smali代碼 F 通過數據流分析跟蹤參數和返回值 X 交叉引用、定位調用者(字符串、類、方法、字段、Smali、Java) Esc/<-/Backspace 返回上次訪問 -> 轉至下一次訪問 G 通過輸入偏移量跳轉到某個地方 N 重命名變量/方法/類名 S 按給定字符串搜索所有元素 C 注釋。只支持Java代碼 DoubleClick 雙擊method/str/field/class名稱查看對象 M 將光標置于 Smali 代碼行并按“M”鍵編輯指令 UP\bigtriangleup 按“向上”鍵訪問樹控件中的向上方法 Down\bigtriangledown 按“向下”鍵訪問樹控件中的向下方法 D 轉儲方法的二進制數據,僅支持Smali模式 Enter 編輯框修改生效 H 以十六進制顯示數據 Ctrl+H 彈出搜索歷史窗口 Ctrl+A 全選 Ctrl+C 復制 Ctrl+V 粘貼,僅適用于可編輯框 Ctrl+X 切 Ctrl+F 找出當前窗口的字符串 Ctrl+S 將修改保存到 GDA 數據庫文件中 |
三、Android惡意軟件靜態分析示例
本節通過一個惡意軟件示例文件介紹GDA的基本用法。
A.總結分析
總結分析就是對整個APK做一個簡單的了解。下面是一個Android惡意軟件的例子來說明GDA的用法。
- 首先,我們將惡意軟件樣本拖入 GDA。然后我們就可以看到它的基本信息了。

我們可以根據呈現的信息判斷APK是否被加殼。如果 APK 未加殼,則 DexHeader 下方不會顯示任何內容。
- 然后我們可以檢查我們的APK的權限。正如我們在基礎信息的底部看到的,APK 啟用了很多危險的權限
e.g. READ_SMS, SEND_SMS, READ_CALL_LOG, READ_PHONE_STATE等等。

- 通過點擊工具欄中紅色標記的按鈕,我們可以查看APK的簽名信息。

- 此外,
AndroidManifest樹形控件頂部的 可以引導您分析Activity, Service, Receive和AndroidManifest.xml 中的其他配置信息。

- 接下來,我們可以點擊樹框中的
MalScan來掃描 APK 的惡意行為。下圖顯示惡意軟件有很多惡意操作。

如果我們想進一步分析方法會做什么,可以雙擊method@xxxxxx查看方法代碼,比如點擊"#Sending message:”下面的“[method@000197]: com.itcast.cn112.a.a” 。該方法下的代碼將會如圖顯示。

當然,如果我們要分析 Smali 代碼,只需按F5。

從圖中我們可以看出,這個方法會訪問短信。
此外,我們還可以看到 DEX 使用的字符串和 API。AllStrings將顯示 DEX 中的所有字符串,并將AppStrings通過方法代碼顯示引用的字符串。實際上,AppStrings 是一個更有用的字符串。string@區域還支持交叉引用(X)、編輯(右鍵單擊)和雙擊操作。

AllAPI的method@區域支持交叉引用功能。

B、JAVA偽代碼分析
這里主要展示一些java代碼中的交互操作。下面簡單介紹一下GDA的基本使用。
- 從入口點開始,點擊入口按鈕查看入口方法。

如果反編譯內容太大,需要在當前代碼中搜索感興趣的關鍵字,可以按ctr+f啟動搜索框。

現在,如果我們要標記已識別的方法、字段或類。我們可以重命名它們。例如,雙擊a.d()將顯示下圖。很明顯,它是用來記錄信息的,所以我們將方法名重命名為'log',GDA會升級所有引用的位置。

然后,我們以相同的方式重命名所有可識別的方法。

如果我們想要做進一步的描述,可以使用注釋(C)。

當我們需要分析當前方法的調用者時。我們可以通過交叉引用來查看它們。

當我們想知道在哪里使用字符串時。您可以將鼠標放在雙引號之間并按 X 以查看參考方法。

至此,基本的使用已經完成,如有問題,歡迎留言。并歡迎報告錯誤。
四、輔助工具
1. XML 解碼器
自行實現的解碼功能可以繞過Anti-decoding技術:

2. 算法工具
該工具支持以下算法:
哈希算法:md2 md4 md5 sha sha1 sha224 sha256 sha384 sha512
對稱加密:des idea rc2 rc4 rc4-40 rc2-40 rc2-64 bf cast5 aes (128 192 256),模式如ecb cbc ofb cfb,其他模式如(cfb1 cfb8)
非對稱加密:RSA
編碼算法:base62、base64 3.
alg-tool 接受 3 種類型的輸入作為密鑰、明文和密文。簡單來說,1.我們可以直接輸入字符串作為源數據,也可以2.輸入“hex:”如下圖所示的二進制數據。3.我們可以雙擊文本框彈出文件對話框,然后選擇一個文件作為輸入。
3.Dumper
更多詳情,請訪問以下鏈接:https : //zhuanlan.zhihu.com/p/26341224

4.搜索工具(S)
