題目來(lái)源:2019XCTF MOBILE 第三題 題目:安裝包是11.ab,要求密碼驗(yàn)證登陸。 知識(shí)點(diǎn):Frida objection,SQLCipher加解密,Android備份和還原。 解題過(guò)程: 根據(jù)Android備份和還原知識(shí),知道ab文件為backup文件,可以利用abe工具解壓,得到如下文件。
取出base.apk,拉入JADX分析,根據(jù)Android數(shù)據(jù)庫(kù)SQLCipher加解密知識(shí),加密的數(shù)據(jù)庫(kù)密碼是getWritableDatabase函數(shù)參數(shù)決定的。
下面我們利用X86模擬器安裝apk和frida-servr-android-X86,然后利用Frida Objection打印出getWritableDatabase函數(shù)的入?yún)?lái)獲取數(shù)據(jù)庫(kù)密碼。 首先靜態(tài)分析,發(fā)現(xiàn)getWritableDatabase定義在net.sqlcipher.database.SQLiteOpenHelper類(lèi)中,利用objection確認(rèn)下getWritableDatabase原型。
然后我們hook這個(gè)getWritableDatabase函數(shù),打印返回值、調(diào)用棧和參數(shù)信息。
根據(jù)源碼分析getWritableDatabase是在MainActivity類(lèi)的a函數(shù)中調(diào)用的,而a函數(shù)在OnCreate中被調(diào)用,我們打開(kāi)apk后,getWritableDatabase函數(shù)其實(shí)已經(jīng)執(zhí)行完畢了。所以我們采用堆上調(diào)用實(shí)例方法的方式。這里注意我們嘗試在啟動(dòng)objection時(shí)添加參數(shù)-d或--startup-command=“android hooking watch…”是沒(méi)法hook到MainActivity類(lèi)的a函數(shù)的。 第一,查看MainActvity類(lèi)中所以方法列表,可以看到a函數(shù)。
第二,查看MainActvity實(shí)例的handle值。
第三,觸發(fā)實(shí)例方法a,如下所示,可以看到數(shù)據(jù)庫(kù)密碼是“ae56f99”。
拿到數(shù)據(jù)庫(kù)密碼后可以用工具查看數(shù)據(jù)庫(kù)信息,根據(jù)代碼知道SQLCipher版本是3.4.0。
所以下圖中選擇SQLCipher 3,如下所示
這樣得到flag值,如下光亮處所示,很明顯這是base64加密數(shù)據(jù)。
直接進(jìn)行base64解碼,這樣我們就得到了flag為T(mén)ctf{H3ll0_Do_Y0u_Lov3_Tenc3nt!}
責(zé)任編輯:xj
原文標(biāo)題:逆向基礎(chǔ)題十一:獲取Flag
文章出處:【微信公眾號(hào):Linux逆向】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
Flag
+關(guān)注
關(guān)注
0文章
12瀏覽量
8133 -
安裝包
+關(guān)注
關(guān)注
1文章
15瀏覽量
3463 -
apk
+關(guān)注
關(guān)注
0文章
23瀏覽量
4930
原文標(biāo)題:逆向基礎(chǔ)題十一:獲取Flag
文章出處:【微信號(hào):Reverse16,微信公眾號(hào):Q哥學(xué)逆向】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論