1. 程式人生 > >利用IDA學習一個簡單的安卓脫殼

利用IDA學習一個簡單的安卓脫殼

這是看別人的文章學習的,當然還有加點自己的思考,截圖用自己的,這樣的學習才有效果啊

原理篇

dvmDexFileOpenPartial這是函式是關鍵,據說在這下 斷點就可以了,看名字就是虛擬機器去開啟Dexfile的意思,應該那時已經解殼完成了吧
函式原型:
int dvmDexFileOpenPartial(const void* addr, int len, DvmDex** ppDvmDex);
第一個引數就是dex記憶體起始地址,第二個引數就是dex大小。所以在這個函式下斷點可以直接dump出明文dex.
為了深入學習我們去看看安卓原始碼可憐,這個參考底部有個大神的 這個應該是優化dex的,odex相關的東西,小白我不懂的

這裡分別對三種不同型別的檔案做不同的處理,傳進去的引數是--dex就走中間那一步了,我們跟進去
根據log資訊,我們知道,顯示初始化VM虛擬機器(應該是dalvik虛擬機器吧) 跟著就執行優化,我們看看那個優化
可以看到上面的英文註釋:重寫檔案,位元組重排,結構重排,類驗證,位元組優化都在那個rewriteDex函式中,優化成功下面才去呼叫我們的dvmDexFileOpenPartial 可以看到第三個引數為NULL 既然這樣,我們繼續跟進
可以看到裡面呼叫了dexFileParse,就是解析dex檔案的了,既然都開始解析dex檔案了,那麼殼肯定已經對dex解密完成了,不然也無法解析啊


順手簡單看看是如何解析的,不懂啊 ,只看這兩個看著有點眼熟的,因為學過PE檔案的格式


可以看到這裡也有一些可選頭,通過可選頭可以讀取一些資訊,什麼長度啊,偏移什麼的, 中間有個解析Data的函式,這裡是學習脫殼啊,不是看安卓原始碼,都跑哪去了


接下來還會作一些校驗和的檢測 好了,我們開始學習脫殼吧驚訝

開始我們的脫殼之路

一開始來個apk,你不能說一來就脫殼啊,沒殼的你脫毛啊 用壓縮軟體開啟我們的學習用的apk,跟著將那個dex拖出來,其實不拖出來也是可以的,因為下面用的軟體支援直接拖apk進去
轉化成jar(這個軟體還是比較好用的,支援檔案拖拽)
跟著自動就幫你開啟JD-GUI了
全部函式都放到so檔案中了,load了一個庫mobisec 看到這,就是要脫殼了,就像我們平時win逆向的時候,開啟ida,發現只有一個函式 那我們接下來就開始吧
ida的動態除錯可以百度哦 ,或者很多安卓安全的書都有了,想得起的話我去寫個記錄 首先安裝,看看,熟悉一下整個應用,應該是輸入正確的url,跟著出flag,key啊什麼的
對了,還沒知道包名,上apktool,解包
看看包名
在手機上執行server 作一下埠轉發(應該是本地的埠,轉發到adb那邊的23946埠吧),當然如果利用區域網除錯就不用這一步了 跟著一條是除錯模式開啟應用的首頁
那接著就上ida咯

ok後可以看到我們那個程序了,附加上去
跟著看看模組吧
跟著查詢libdvm,這個看名字就知道跟Dalvik虛擬機器有個,dvm嘛,優化dex的應該也在裡面,我對自己是這麼想的
雙擊點過去,繼續查詢dvmDexFileOpenPartial
再點過去
F9執行!!!!! 接下來jdb命令動態除錯Apk  先開啟ddms,可以看到除錯埠,還有哪個紅蟲
JDB是基於文字和命令列的除錯工具(例如Sun JDB);雖然現在有一些很好的除錯工具,然而 Java 偵錯程式 (JDB) 提供了一些優點。最重要的是 JDB 可以免費獲取並且是平臺獨立的。其缺點是它只有命令列格式,一些開發人員認為這很原始,而且難以使用。一些 IDE 已經將 GUI 介面構建到 JDB 除錯 API(如 Jikes)。JDB 是 JDK 安裝的一部分。它在 Java 2 平臺中得到了增強。
使用jdb命令進行除錯時,一般選擇8700埠,因為8700是預設的除錯埠 都一樣的了,沒什麼特殊,我們可以看到使用的包中有個jdi,這也滿足我們的預想

跟著ida就出現這個,取消就好
繼續
跟著程式就斷下來了
R0是傳過來的第一個引數,R1是第二個引數,根據這個函式的原型,所以如下
跟著就用指令碼把它dump出來吧
一開始應該就是相當於我們C語言的宣告變數,看來那些暫存器我們直接寫名字就可以訪問了
算了,直接給程式碼吧
auto fp, dex_addr, end_addr;
    fp = fopen("C:\\dump.dex", "wb");
    end_addr = r0 + r1;
    for(dex_addr = r0; dex_addr < end_addr; dex_addr++)
        fputc(Byte(dex_addr), fp);

點選run
稍等片刻,馬上就好
結果發現只有安卓的庫(不要急,我就入坑了,這個dex2jar不能用於dump出來的應該,我把上面的步驟至少重複了5遍)
再看看那個地址,確實是個dex檔案啊
直接上JEB神器,終於看到了

參考資料,部落格等:

http://ieroot.com/2014/11/12/1707.html