最簡潔輕便快速的android 逆向分析工具--GDA

分析工具:GDA(官網下載)

最新版本:2.50

運行環境:win7,xp,win8,win10,其他windows平台未測

工具特色:

1.獨立於java和android sdk,無需安裝java和android sdk即可使用。

2.可以解析加過殼的Dex,並且可以有效繞過各種位元組碼陷阱、類型混淆以及anti-disassembling和anti-decompiling技術。

3.完全使用c++編寫,快速解析dex、apk和OAT,odex轉dex,OAT轉DEX。

4.直接修改DEX文件的smali指令,無需反編譯。

5.可修改DEX文件中的字元串(支持中文)

6.改進優化的xml解析器(可解析加殼處理過xml),支持過濾顯示功能

7.快速dump設備內存,另外提供有內存模塊過濾功能。

8.針對字元串、方法、類、域等關鍵信息提供了強大的搜索、交叉引用。

9.提供了基於包過濾的引用字元串查看

10.還算友好的smali閱讀界面,支持反編譯偽代碼(F5),偽代碼(字元串、方法)交叉引用(X),支持可疑行為掃描,支持系統API查看等等。

11. ……更強大的功能等待你去發現。

GDA2.5更新說明,修復多處Bug並添加了如下功能:

1.工具欄添加

2.增加了查殼功能。

3.增加了緩存清理功能。

4.修改默認顯示頁,添加了DEX頭部彩色圖,滑鼠移倒頭部相應的顏色區域,會顯示區域的DEX頭子項。

5.打開設備方面,加快了打開設備的速度,默認情況下用本機配置的adb.exe操作,如果沒有配置android-sdk環境變數,採用GDA自帶的adb.添加了apk安裝功能。

6.重新設計了java偽代碼中的函數定位機制,很好的解決了偽代碼中函數定位不準確的問題(主要是雙擊進入,交叉引用操作)

7.添加了加密解密功能,實現了如下演算法:

Hash演算法: 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)

編碼演算法:base62,base64

8.添加了apk簽名信息的提取。

功能展示:

1.工具欄添加

2.增加了查殼功能,可以識別主流殼。

3.修改默認顯示頁,添加了DEX頭部彩色圖,滑鼠移倒頭部相應的顏色區域,會顯示區域的DEX頭子項。

4.增加了緩存清理功能,如果存在同名apk無法正常打開時,可以通過清理緩存來解決。

5.打開設備方面,大大加快了打開設備的速度。此外為了提高兼容性,默認情況下用本機配置的adb.exe操作,如果沒有配置android-sdk環境變數,採用GDA自帶的adb。另外添加了apk安裝、卸載功能等等。

6.重新設計了java偽代碼中的函數定位機制,很好的解決了偽代碼中函數定位不準確的問題(主要是雙擊進入,交叉引用操作)

7.添加了加密解密功能,實現了如下演算法:

Hash演算法: 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),可以進行連環加密或者解密。

編碼演算法:base62,base64

使用:可以手動輸入可見字元的秘鑰、密文或者明文進行加解密,也可以雙擊輸入框載入文件作為秘鑰,密文或者明文進行加解密。加密之後可以右鍵"加密該密文"將加密後的密文轉換到明文中繼續進行加密,解密類似。右鍵可以保存加密後的結果到文件中。

8.添加了apk簽名信息的提取。

2.4版本主要更新功能如下:

1.添加了偽代碼上的類名,方法名,域名的修改。

2.添加了行注釋功能,你可以在偽代碼上做注釋。

3.設計了GDA文件格式,用於保存分析結果數據(包含修改的類,方法,域,注釋等等),類似於IDA idb文件,下次分析時可以直接打開分析文件,無需源文件存在。

4.添加了偽代碼縮進效果。

5.添加了OAT解析和以及從OAT提取所有Dex文件的功能,默認只打開第一個DEX進行分析。

此次做了如下更新:

1.問題糾正

1).修復了優化選項選中出現另行打開文件失效的bug。

2).修復反編譯java偽代碼部分特殊位元組碼識別出錯的問題,解決了某些混淆了無效代碼的方法解析崩潰問題。

3).採用多線程實現解析,結果和渲染的分離,解決了解析超大方法時出現的卡死問題。

2.功能添加

1).添加了偽代碼上的類名,方法名,域名的修改。

下圖是在方法偽代碼上修改方法名稱的例子

修改後:

下圖是在類偽代碼上修改方法,類名,和域名的例子

修改後的方法同樣會實時更新到樹形結構上:

2).添加了行注釋功能,你可以在偽代碼上做注釋,注釋功能快捷鍵(C/c)。點擊需要注釋的行,按下C即可添加註釋。

3).設計了GDA文件格式,用於保存分析的中間結果數據(包含修改的類,方法,域,注釋等等),類似於IDA idb文件,下次分析時可以直接打開分析文件,無需源文件存在。通過菜單file->SAVE MODIFIED可以保存分析結果,如果有未保存的修改,會彈框提示保存。

打開後:

4).添加了偽代碼縮進效果。

5).添加了OAT解析和以及從OAT提取所有Dex文件的功能。當打開OAT文件是,會直接在OAT當前目錄下的OAT文件名相同的文件夾下抽取所有dex文件。默認只打開第一個DEX進行分析。你也可以直接使用工具菜單中OAT2DEX來對OAT進行直接轉換。

版本更新:2.0 主要增強了反編譯效果,在偽代碼上添加了雙擊查看,交叉引用和字元串編輯等功能,此外專門為病毒分析師添加了API查看功能和可以行為掃描功能,下一個版本計劃添加類,方法等名稱修改功能,增強的脫殼功能,提供分析結果資料庫文件功能。

1.糾正了F5反編譯出現的錯誤,優化了反編譯效果,添加了this指針的識別,對代碼進行了著色,效果圖如下。

2.增強了偽代碼功能,支持有調試符號和無調試符號的顯示,給偽代碼添加了雙擊操作和交叉引用操作,將游標放在函數調用處,雙擊可進入函數,X可進行交叉引用;將游標放在字元串中,X可執行字元串交叉引用,右鍵可以編輯字元串。

3.添加import,簡化了函數調用中所夾帶的包名稱。

4.添加可以查看APK所使用的API功能,並且可以根據包名進行過濾。

5.專門為病毒分析師定製的可疑行為掃描功能,採用了api行為鏈的方式進行惡意行為掃描,可以掃描文件釋放、刪除和遍歷,簡訊發送,簡訊竊取,通訊錄竊取,電話監聽,加密演算法,資料庫操作,手機號碼竊取,郵箱登錄,http網路操作等行為識別,並且顯示行為操作函數,雙擊可進入產生行為所在代碼。

版本更新:1.60 好久沒更新了,這一次添加了F5功能,仿照IDA的F5功能,可以對針對方法函數將位元組碼直接反編譯為偽java代碼的功能,反編譯器有很多地方還有待改進,還望各位多指正。

1.修復win8,win10下不能運行的問題。

2.修正了字元串顯示,轉換了回車換行符

3.添加了APP應用有效字元串顯示功能(排除了包,類,方法,域等字元串的干擾)

4.添加了所有字元串顯示功能(顯示所有字元串,包含DEX文件中的所有)

5.添加了當前訪問函數的調用者查詢(通過交叉引用來實現X)

6.添加左邊樹形控制項右鍵菜單功能,實現根據包或者子包中所有類所使用的字元串和方法,方便選擇自己感興趣的包進行分析。

7.針對方法添加了F5功能,實現了直接將位元組碼轉換為偽java代碼,按一次F5顯示java偽代碼,再按一次F5顯示smali。

8.修復長時間運行,有時會出現崩潰的問題(感謝天天向上提供dump文件)

更新版本:1.50。目前較忙,很多人建議加入反編譯功能,其實已經在做針對於方法的實時反編譯成JAVA的功能,反編譯功能直接從位元組碼轉換為JAVA,速度會非常快。決定在下一個版本進行大的更新。1.50版本只做了幾個小功能添加已及幾處bug修復。

1.添加字元串編輯功能,支持中文修改;

支持中文修改

2.添加十六進位顯示功能。

3.重寫了搜索窗口,提供了更為方便的分類搜索

4.修正了搜索窗口多次搜索累積顯示的bug。

更新版本:1.41,感謝熱心的朋友們給了測試,發現了不少bug,做了修正,功能上做了微調。

1.修正點擊類時出現的類方法解析崩潰問題

2.修正了殼載入時存在的不兼容性問題。

3.添加了文件拖拽功能。

4.修正了連續打開同一個文件產生崩潰的問題。

5.修復了dump進行脫殼中,部分系統中的路徑處理問題

6.修復了進程內存模塊中,不能完全顯示dex模塊和odex模塊的問題

7.添加了內存dump的過濾功能,目前支持dex,odex,so,jar,apk等內存模塊的過濾

8.修復了一些偽方法,加密方法解析錯誤崩潰問題

一、簡介:

GDA(GJoy Dex Aanalyzer),寫這個工具主要是為了便於自己分析,有的功能還比較雞肋,只在xp和win7上測試過,自己的主要需求是:方便脫殼和破解,不想在電腦和各虛擬機里都安裝java才能用,不想每次分析個功能還需要反編譯,希望可以直接修改dex的指令,能夠直接連接android設備,dump自己想要的內存模塊等等。另外,在做分析過程中很多做了處理或者加了殼的apk往往等了很久結果卻冒出來一個反編譯失敗,這種情況常常遇到,於是決定了利用空閑時間寫了這麼個小工具,但是目前只能反彙編smali,對於反編譯java這個也試著在寫,反編譯java代碼寫得很累,可以參考的資料很少,還不知道啥時候能完成,只能儘力而為了。

工具沒有什麼技術含量,很多代碼都參考於互聯網,歡迎拍磚,大量的時間都花在了解決一下界面顯示問題,結構設計問題和調試排錯上,確實很累人。GDA工具的反彙編引擎使用的是開源的dexdump,按照自己的需要做了修改和加強,並修復了一些bug。

如果只使用這個工具靜態分析病毒或者研究殼的話,需要一定的smali彙編閱讀能力,廢話不多說,以下簡單介紹使用方法,文檔寫得有些草率,有些小的功能和邏輯還沒來得及介紹,還望諒解。

二、使用說明

界面布局和簡單功能介紹:

工具實現了如下功能:

1. APK/DEX/ODEX文件解析,二進位xml解析(能夠正確解析加固版的xml二進位文件)。

2. ODEX文件中提取DEX文件

3. 直接對DEX的指令進行編輯修改(方便破解,不用反編譯),單指令反彙編,smali操作碼編譯成位元組碼(後續有時間支持整條smali編譯)

4. 對方法,類,字元串等進行快速搜索

5. 支持方法,類,字元串等的交叉引用

6. 方法訪問回滾,方法跳轉。

7. 簡單的命令支持

8. 連接android設備,對指定進程的內存進行dump。

9. 十六進位顯示非方法區域。

10. 命令行shell。

其他主要窗口簡介:

類基本信息顯示

所有字元串

Xml顯示窗口

內存dump窗口

CMD命令窗口

搜索窗口,雙擊結果行,可直接進入結果所在的方法

其他的自己去發覺吧。

三、快捷鍵

ctr+c 拷貝數據

ctr+f 查找當前窗口的字元串

m/M 游標置於指令行時編輯指令

g/G 跳轉到指定偏移地址

s/S 從全局搜索字元串或者選中的字元串

x/X 交叉引用(支持字元串,類,方法,域的交叉引用)

d/D dump當前訪問的二進位數據

<-/backspace/esc 回到上一次訪問方法

-> 下一個訪問過的方法

UP 把焦點放在左邊樹形控制項上,按下up鍵可以訪問基於內存的上一個方法

Down 把焦點放在左邊樹形控制項上,訪問基於內存的下一個方法

Enter 對所有編輯框的輸入修改生效

四、破解與脫殼的簡單使用步驟:

破解步驟:

1.打開dex,可選中optload進行自動定位到入口activity,只有AndroidManifest.xml中描述的package與dex中的package相同才能湊效(如果選中後打開dex文件,只解析com包的類,解析完成後如果classes.dex目錄下存在AndroidManifest.xml,會自動解析此文件,並且定位到其中指定的第一個執行的activity.如果打開之後點擊,則會直接定位到主activity)

2.s查找字元串,找到關鍵點,

3.m修改跳轉指令

游標移動要修改的指令處M,顯示如下:

1)向偏移框中填入偏移地址可用反彙編地址處的指令,修改後enter

2)指令框中可用直接修改指令,修改後enter

3)smali框可修改操作碼,如if-ltz改為if-nez,修改後enter

4.open->save modify保存修改,如果打開的是apk,選save dex as

5.dex拖入apk壓縮包中,簽名即可。

脫殼與分析步驟:

這部分功能還比較弱,需要root才能dump,以後會引入注入模塊來實現更強的功能。

1.打開dump窗口(點擊按鈕dump,或者菜單tools->open device)

2.等待窗口鏈接設備,直到顯示出所有進程,有時候有點慢。

3.雙擊所選進程行,或者右鍵打開進程,等待顯示所有進程模塊

4.單擊要dump的模塊,或者選中多行右鍵菜單dump即可dump出此模塊,dump的文件存放在{GDA當前目錄}/dum/{進程名}/{模塊名}

5.打開dump出的odex或者dex,如果是odex可以在菜單open->save as dex將odex轉化為dex.

6.如果需要修復dex,那隻能靠自己了。

7.打開dex並分析。


推薦閱讀:

Android 新一代多渠道打包神器
是否有可能欺騙Android識別一個apk包名的機制?
如何清除 Apk 中無用的資源文件?
如何判斷 Android 應用的 Apk 簽名是否一致?
Android APK瘦身實踐

TAG:Apk | 软件逆向工程 | Android |