記一次Android App逆向入門實戰(zhàn)(逆向思路&工具使用&CrackMe)

背景知識

隨著Android設(shè)備的急劇增長和逆向工具鏈的成熟,Android App的安全性問題日益突出,其中二次打包問題較為嚴(yán)重。

惡意攻擊者利用反編譯工具對App進(jìn)行源碼反編譯、植入廣告SDK、插入釣魚頁面,重打包和重簽名后,惡意篡改后的App通過非法渠道流入市場。終端用戶如果使用這些App,會有隱私數(shù)據(jù)泄漏、資金財產(chǎn)被盜取的風(fēng)險。

本文將介紹自己的一次Android逆向入門實戰(zhàn)經(jīng)歷,分別是在native層和so層進(jìn)行攻擊。以后有機(jī)會向大家介紹Android防護(hù)相關(guān)。

CrackMe

CrackMe是一些公開給別人嘗試破解的小程序。在這里我們以兩個CrackMe.apk為例進(jìn)行說明。

工具


逆向?qū)崙?zhàn)App1

我們在native層對App 1進(jìn)行攻擊,共有三種方法:正向分析法、Smali修改法、IDA動態(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ù),要搞定這個CrackMe需了解該函數(shù)。

3. 將getMD5str()函數(shù)復(fù)制到IDEA中,去掉冗余代碼,嘗試對偽代碼進(jìn)行調(diào)試。傳進(jìn)一個字符串"kevin",輸出"EBCD**3075"。至于getMD5str()函數(shù)的具體功能是什么,不是很重要,有興趣的同學(xué)可以反編譯后分析下。

Smali修改法

使用Android Killer將Java代碼轉(zhuǎn)換為Smali代碼,修改Smali代碼,重打包重簽名,隨便輸入什么均可Crack掉。

DA動態(tài)調(diào)試法

使用IDA動態(tài)調(diào)試Smali代碼,當(dāng)輸入用戶名時,在Smali中設(shè)置斷點(diǎn),可以直接讀出相應(yīng)的密碼。

逆向?qū)崙?zhàn)App2

我們在so層對App 2進(jìn)行攻擊。攻擊步驟如下:

1. Android Killer里打開zb002.apk,關(guān)鍵代碼在if...else語句中。我們可以使用逆向?qū)崙?zhàn)App1中的Smali修改法,但我想在此介紹另一種攻擊方式。

2. 此時native函數(shù)GetNative只有聲明,具體實現(xiàn)在libegg.so文件中。JNI接口作為Java層和Native層交互的橋梁,使得Java層和Native層之間可以互相調(diào)用。

3. 使用IDA動態(tài)調(diào)試或直接ALT+T進(jìn)行搜索GetNative。根據(jù)跳轉(zhuǎn)和傳送指令可知其密碼。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容