wordpress加授權(quán)網(wǎng)絡(luò)優(yōu)化的基本方法
前言
算了一下好長(zhǎng)時(shí)間沒(méi)打過(guò)CTF了,前兩天看到ACTF逆向有道flutter逆向題就過(guò)來(lái)玩玩啦,花了一個(gè)下午做完了.說(shuō)來(lái)也巧,我給DASCTF十月賽出的逆向題其中一道也是flutter,不過(guò)那題我難度降的相當(dāng)之低啦,不知道有多少人做出來(lái)了呢~
還原函數(shù)名
flutter逆向的一大難點(diǎn)就是不知道libapp.so
的函數(shù)名,雖然有工具reflutter
可以幫助我們得到其中的符號(hào),但是我個(gè)人認(rèn)為基于對(duì)libflutter.so
源碼插樁后重編譯再重打包apk的方式具有極大的不可預(yù)料性,極有可能導(dǎo)致apk閃退,這一題便出現(xiàn)了這種情況,所以接下來(lái)我將介紹的工具blutter
是純靜態(tài)分析來(lái)還原函數(shù)名,更令人驚喜的是它提供了IDApython
腳本來(lái)讓我們可以在IDA中對(duì)函數(shù)進(jìn)行重命名,而這個(gè)項(xiàng)目中提供的其他文件也相當(dāng)好用
blutter的編譯及使用
blutter項(xiàng)目地址
1 |
|
在各個(gè)平臺(tái)如何編譯在這個(gè)項(xiàng)目的README.md中寫的已經(jīng)相當(dāng)詳細(xì)了,這里我就簡(jiǎn)單介紹一下Windows上的編譯過(guò)程吧,注意一下這些命令需要全程運(yùn)行在代理環(huán)境否則會(huì)導(dǎo)致無(wú)法下載
首先clone項(xiàng)目
1 |
|
隨后運(yùn)行初始化腳本
1 2 |
|
請(qǐng)注意,接下來(lái)我們需要打開(kāi)x64 Native Tools Command Prompt
,它可以在Visual Studio
文件夾中找到
然后運(yùn)行blutter.py
并提供libapp.so
和libflutter.so
的文件夾路徑以及輸出文件夾路徑
1 |
|
輸出文件夾目錄如下
隨后我們用ida反編譯libapp.so
,并運(yùn)行輸出文件夾中的IDApython腳本ida_script/addNames.py
,符號(hào)就被全部恢復(fù)出來(lái)啦
hook關(guān)鍵函數(shù) 獲取函數(shù)參數(shù)
這里我們需要關(guān)注的函數(shù)是flutter_application_1_main__LongPressDemoState::_onTap
,因?yàn)樵趂lutter的開(kāi)發(fā)中,onTap函數(shù)是按鈕點(diǎn)擊之后的響應(yīng)函數(shù)
隨后我們進(jìn)入sub_1DE500
,在該函數(shù)中雙擊sub_1DE59C
進(jìn)入
在這個(gè)函數(shù)中我們發(fā)現(xiàn)了256
,%
,^
這些特征,合理猜測(cè)一下算法可能是RC4
接下來(lái)我們使用輸出文件夾中的blutter_frida.js
hook一下sub_1DE59C
看看情況
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
|
這里我們只hook到一個(gè)數(shù)組的值,另一個(gè)數(shù)組的類型是TypeArguments
,研究了一下blutter_frida.js
后發(fā)現(xiàn)作者還沒(méi)有對(duì)這種數(shù)據(jù)類型格式提供hook支持
IDA動(dòng)態(tài)調(diào)試libapp.so
現(xiàn)在我們得到了一個(gè)數(shù)組,我們就暫時(shí)認(rèn)為它就是flag經(jīng)過(guò)加密之后得到的結(jié)果,接下來(lái)我們?cè)贗DA中對(duì)sub_1DE59C
下斷點(diǎn)動(dòng)態(tài)調(diào)試來(lái)更加深入的研究一下
首先我們需要將IDA文件夾中的dbgsrv/android_server64
push到手機(jī)上面,然后運(yùn)行一下并且指定端口
1 2 3 |
|
隨后端口轉(zhuǎn)發(fā)一下
1 2 |
|
在IDA中選擇調(diào)試器為Android debugger
隨后點(diǎn)擊Debugger->Debugger options...
選擇如下配置
點(diǎn)擊Debugger->Process options...
,Hostname
修改為127.0.0.1
,Port
修改為11112
然后點(diǎn)擊Debugger->Attach to process...
,附加到我們目標(biāo)包名的進(jìn)程上面
彈出該彈窗選擇Same即可
在手機(jī)上點(diǎn)擊按鈕,然后在IDA中點(diǎn)擊這個(gè)綠色的剪頭,就可以動(dòng)態(tài)調(diào)試?yán)?/p>
在動(dòng)態(tài)調(diào)試之后,未知的變量也逐漸浮現(xiàn)了出來(lái),這里我們發(fā)現(xiàn)了v28>=256
,那么很有可能就是RC4了哦
既然這樣,那么直接在這里唯一的異或的地方用IDA去trace一下,把異或的數(shù)組dump下來(lái)不就行了:)
于是我們得到了被異或的數(shù)組了
但是在異或運(yùn)算的地方下斷點(diǎn)之后,我輸入的數(shù)全都是1
,這里被異或的數(shù)也全是0xce
所以莫非不是RC4?讓0xce和0x31
異或一下看看,竟然是0xff
這么有意義的數(shù)字
所以exp也就能寫出來(lái)啦~
1 2 3 4 5 6 7 8 |
|