目錄
背景知識
CrackMe
工具
逆向實戰App1
正向分析法
Smali修改法
IDA動态調試法
逆向實戰App2
參考連結
-
背景知識
随着Android裝置的急劇增長和逆向工具鍊的成熟,Android App的安全性問題日益突出,其中二次打包問題較為嚴重。
惡意攻擊者利用反編譯工具對App進行源碼反編譯、植入廣告SDK、插入釣魚頁面,重打包和重簽名後,惡意篡改後的App通過非法管道流入市場。終端使用者如果使用這些App,會有隐私資料洩漏、資金财産被盜取的風險。
本文将介紹自己的一次Android逆向入門實戰經曆,分别是在native層和so層進行攻擊。以後有機會向大家介紹Android防護相關。
-
CrackMe
CrackMe是一些公開給别人嘗試破解的小程式。在這裡我們以兩個CrackMe.apk為例進行說明。
-
工具
AndroidKiller_v1.3.1
IDA PRO 6.8
IntelliJ IDEA
-
逆向實戰App1
我們在native層對App 1進行攻擊,共有三種方法:正向分析法、Smali修改法、IDA動态調試法。
-
正向分析法
1. Android Killer中打開:将APK反編譯為Smali代碼,可以看到主要邏輯在MainActivity.smali中,再将其轉換為僞Java代碼。
2. 僞Java中尋找關鍵代碼,其跳轉關鍵句在if..else語句,其中調用了getMD5str()函數,要搞定這個CrackMe需了解該函數。
3. 将getMD5str()函數複制到IDEA中,去掉備援代碼,嘗試對僞代碼進行調試。傳進一個字元串"kevin",輸出"EBCD**3075"。至于getMD5str()函數的具體功能是什麼,不是很重要,有興趣的同學可以反編譯後分析下。
-
Smali修改法
使用Android Killer将Java代碼轉換為Smali代碼,修改Smali代碼,重打包重簽名,随便輸入什麼均可Crack掉。
修改前:
"if-eq vA, vB, :cond_" ##如果vA等于vB則跳轉到:cond_
修改後:
"if-ne vA, vB, :cond_" ##如果vA不等于vB則跳轉到:cond_
-
IDA動态調試法
使用IDA動态調試Smali代碼,當輸入使用者名時,在Smali中設定斷點,可以直接讀出相應的密碼。
-
逆向實戰App2
我們在so層對App 2進行攻擊。攻擊步驟如下:
1. Android Killer裡打開zb002.apk,關鍵代碼在if...else語句中。我們可以使用逆向實戰App1中的Smali修改法,但我想在此介紹另一種攻擊方式。
2. 此時native函數GetNative隻有聲明,具體實作在libegg.so檔案中。JNI接口作為Java層和Native層互動的橋梁,使得Java層和Native層之間可以互相調用。
3. 使用IDA動态調試或直接ALT+T進行搜尋GetNative。根據跳轉和傳送指令可知其密碼。
-
參考連結
記得TODO,後續發兩個CrackMe的連結。