背景知識(shí)
隨著Android設(shè)備的急劇增長和逆向工具鏈的成熟凌简,Android App的安全性問題日益突出上炎,其中二次打包問題較為嚴(yán)重。
惡意攻擊者利用反編譯工具對(duì)App進(jìn)行源碼反編譯雏搂、植入廣告SDK藕施、插入釣魚頁面,重打包和重簽名后凸郑,惡意篡改后的App通過非法渠道流入市場裳食。終端用戶如果使用這些App,會(huì)有隱私數(shù)據(jù)泄漏芙沥、資金財(cái)產(chǎn)被盜取的風(fēng)險(xiǎn)诲祸。
本文將介紹自己的一次Android逆向入門實(shí)戰(zhàn)經(jīng)歷,分別是在native層和so層進(jìn)行攻擊而昨。以后有機(jī)會(huì)向大家介紹Android防護(hù)相關(guān)救氯。
CrackMe
CrackMe是一些公開給別人嘗試破解的小程序。在這里我們以兩個(gè)CrackMe.apk為例進(jìn)行說明配紫。
工具
逆向?qū)崙?zhàn)App1
我們?cè)趎ative層對(duì)App 1進(jìn)行攻擊径密,共有三種方法:正向分析法、Smali修改法躺孝、IDA動(dòng)態(tài)調(diào)試法享扔。
正向分析法
1. Android Killer中打開:將APK反編譯為Smali代碼,可以看到主要邏輯在MainActivity.smali中植袍,再將其轉(zhuǎn)換為偽Java代碼惧眠。
2. 偽Java中尋找關(guān)鍵代碼,其跳轉(zhuǎn)關(guān)鍵句在if..else語句于个,其中調(diào)用了getMD5str()函數(shù)氛魁,要搞定這個(gè)CrackMe需了解該函數(shù)。
3. 將getMD5str()函數(shù)復(fù)制到IDEA中,去掉冗余代碼秀存,嘗試對(duì)偽代碼進(jìn)行調(diào)試捶码。傳進(jìn)一個(gè)字符串"kevin",輸出"EBCD**3075"或链。至于getMD5str()函數(shù)的具體功能是什么惫恼,不是很重要,有興趣的同學(xué)可以反編譯后分析下澳盐。
Smali修改法
使用Android Killer將Java代碼轉(zhuǎn)換為Smali代碼祈纯,修改Smali代碼,重打包重簽名叼耙,隨便輸入什么均可Crack掉腕窥。
DA動(dòng)態(tài)調(diào)試法
使用IDA動(dòng)態(tài)調(diào)試Smali代碼,當(dāng)輸入用戶名時(shí)筛婉,在Smali中設(shè)置斷點(diǎn)簇爆,可以直接讀出相應(yīng)的密碼。
逆向?qū)崙?zhàn)App2
我們?cè)趕o層對(duì)App 2進(jìn)行攻擊倾贰。攻擊步驟如下:
1. Android Killer里打開zb002.apk冕碟,關(guān)鍵代碼在if...else語句中。我們可以使用逆向?qū)崙?zhàn)App1中的Smali修改法匆浙,但我想在此介紹另一種攻擊方式安寺。
2. 此時(shí)native函數(shù)GetNative只有聲明,具體實(shí)現(xiàn)在libegg.so文件中首尼。JNI接口作為Java層和Native層交互的橋梁挑庶,使得Java層和Native層之間可以互相調(diào)用。
3. 使用IDA動(dòng)態(tài)調(diào)試或直接ALT+T進(jìn)行搜索GetNative软能。根據(jù)跳轉(zhuǎn)和傳送指令可知其密碼迎捺。