dex記憶體提取

☆綠茶☆發表於2014-08-10

轉 http://blog.csdn.net/asmcvc/article/details/18216531

智慧手機的普及將移動網際網路的發展推到了一個讓所有人都為之興奮的高度,我想即使是以商業眼光見長的“蘋果教父”賈伯斯也不會料想到短短几年時間,智慧手機就已經成為了所有人離不開的商業產品,各種商業應用層出不窮,人們越來越習慣在手機上選購商品,越來越習慣用手機來購買火車票、電影票,越來越習慣用手機來完成支付。

       但隨著而來的是日趨凸顯的移動安全問題,據多家安全機構調查顯示,智慧手機病毒特別是在Android平臺上最近幾年呈爆發式增長,套餐竊賊、支付寶大盜等手機病毒則表明手機病毒已經越發智慧、越發難以控制,並且危害巨大,竊取隱私、盜號、交易劫持等案例屢見不鮮……;這是一個技術貼,這些套話我們們到此為止,下面我們們說說移動安全怎麼做。

       安全出了問題總要有人跳出來解決問題,但是我們希望跳出來的是“真衛士”而不是自身存在問題的“偽衛士”。筆者長期從事移動安全研究,對移動安全的各家解決方案都做過一些研究,有的很有價值但有的卻不那麼讓人滿意,下面就讓筆者來揭祕多家移動應用加固的安全保護效果到底怎麼樣。

       國內某知名移動應用安全加固企業(針對Android平臺)使用dex(android可執行檔案)隱藏的技術,提供安全加固解決方案。但加殼/加密只是移動安全的第一步,也是最脆弱的一步。只能對抗靜態分析和簡單的逆向工程。

然而, 不管如何隱藏dex, 最終在執行時都必須釋放到記憶體, 所以本文的思路是從記憶體中找到解密後的dex檔案, 進而得到加固前的apk,由於dalvik的執行機制要求dex在記憶體中是連續的,所以想辦法拿到記憶體的coredump就很可能完成破解。

       破解的過程,已有Bob Pan(一名匿名安全研究人員)發表在其他安全論壇上但卻未引起重視,筆者也於早些時候考慮到這種方案並予以驗證,在此感謝Bob Pan,文章地址:http://blog.csdn.net/pxb1988/article/details/17167795

 

筆者的破解過程如下:

1:安裝加固後的apk並執行

2:將前面編譯好的gdbserver複製到android模擬器裡面,修改其許可權

adb push gdbserver/data/local/tmp/

adb shell chmod 755/data/local/tmp/gdbserver

2、檢視所裝apk的程式

adb shell

ps

可以看出,共有三個程式,且相互ptrace,所以不能直接用gdb連線其主程式,但是可以gc執行緒、binder執行緒。

3:進入執行緒的tid目錄下

ls /proc/345/task

可以看到:

 

這麼多的執行緒,任意連結上一個即可。

4:連結一個執行緒

adb shell

cd /data/local/tmp

./gdbserver :1234 --attach346

 

5:另開一個終端

adb forward tcp:1234 tcp:1234

6:啟動上面生成的gdb

./gdb

 

7:連結本地:1234埠

target remote :1234

8:然後輸入gcore 拷貝

gcore

出現一下結果則表示已完成:

 

9:用vim開啟core.346檔案

vim命令列下輸入:

:%!xxd

等待一段時間後就會出現:

 

10:搜尋與程式相關的類名,記下大概位置

 

如上面的行號:34672

11:然後通過查詢dex.035找到離它最近的dex檔案頭

 

搜尋發現在3569346行的dex.035最近,應該是我們所需的dex檔案。

12、從中讀取dex檔案開始位置和大小

從中可以讀出,dex檔案開始位置為:3676c10  十進位制為:57109520

dex檔案大小為:3508e0(起始位置偏移32位)十進位制位:3475680

13:摳出dex檔案

dd if=core.346 bs=1count=3475680(十進位制的dex檔案大小數值) skip=57109520(dex檔案頭的

起始位置的十進位制數值) of=x.dex

x.dex即為提取出來的dex檔案

 

總結:成功逆向出dex檔案,我們就可以使用常見的apktool等逆向攻擊繼續完成到smali甚至java語言的逆向,在此就不累述了。整個過程不超過10分鐘的時間,筆者就完成了對該Android應用的破解。該安全公司的安全加固似乎不能讓人滿意。此外,在筆者的研究下,該安全公司的安全加固還存在以下問題:

A:對Android系統的不同版本相容性不完美,Android 3.x系統上不能執行經過該安全公司加固的應用。

B:dex(Android)可執行檔案的本地化問題,據筆者研究發現,安全加固只是將dex檔案解密並釋放在本地的隱藏資料夾下儲存(/data/data/應用名/.cache),即使不在記憶體中還原也可以使用自動化指令碼將該dex檔案本地還原,破解更加簡單。

 

對於移動安全的擔心,筆者在遊走於各大安全論壇時發現在近期即將舉行的OWSAP安全沙龍蘇州站的議題就是針對移動應用安全。活動網址:http://www.owasp.org.cn/OWASP_Events/20140121

據筆者的瞭解,該沙龍是由通付盾安全團隊協調舉辦的屬於OWSAP體系的移動安全沙龍,當中就有對業內各家移動安全加固方案的比較。

據悉,通付盾也有自己的安全加固解決方案,併為幾家金融機構和銀行提供了安全加固,經筆者實際下載其加固後的應用安裝測試,通付盾對一些加固中出現的問題做了處理。例如加固後的應用也可以在Android 3.x上執行,採用記憶體載入dex的加固方式,本地不存有解密後的dex檔案,極大的提高了程式的相容性、穩定性和破解的難度。此外,據瞭解,該公司提供的安全服務有較高的門檻,為了防止被黑客利用,通付盾有較嚴格的安全稽核機制,一般只為第三方企業和金融機構提供安全加固方案,並對其要加固的應用進行全面的安全評估,確保其沒有安全隱患。

此外,其公司創始人Dr.Wang從矽谷帶回了移動安全的全新解決方案——“移動安全三戰法:加固、密信、風控”,對移動應用實現從釋出到使用、從客戶端到會話再到安全風控的全程安全保護,或許能構建移動安全領域真正的SafeZone,讓安全成為應用的DNA,增強自身的防護能力。

相關文章