【Re】36C3CTF xmas_future
這是一道wasm的逆向題。
先分析給的js文件
存在一個check函數(shù)里面調(diào)用了wasm.check,傳入了兩個參數(shù)一個是flag,一個是flag的len。接下來就要對wasm進行分析。
先使用開源項目wabt將hxp.wasm文件反編譯成C文件hxp.c
項目地址:wabt
但是這c語言還是比較難理解,用gcc將其其編譯成x86架構(gòu)下的目標文件。
先丟到ida中靜態(tài)分析。發(fā)現(xiàn)了check函數(shù)。
里面還有一個hxp2019_check函數(shù)跟進去。這個返回值v6不是0就是1剛好和js里的返回值對應(yīng)了,這應(yīng)該就是check_flag的函數(shù),查看哪里對v6進行了修改。
這邊有個比較,將v8和內(nèi)存中某處的值進行比較。v8應(yīng)該是用戶輸入的flag,那么內(nèi)存中的值是什么,在查看程序中的字符串時有所發(fā)現(xiàn)。
查看引用。
發(fā)現(xiàn)了和上面內(nèi)存地址很相近的地方,這塊地方存儲的是“hxp{}e_seem/agibtrn/ewmsu_rdrxtr_wbe_hkm.oaeyirncm”但是這明顯也不是flag,但是看上去已經(jīng)很接近了,應(yīng)該是經(jīng)過了什么變換,感覺應(yīng)該很簡單了,但是分析半天沒分析出來咋變的(我太菜了)。回到hxp2019_check函數(shù),上面真的看不太懂,只能碎片化分析。
這里是對輸入flag長度check。
這里是對flag前4個字符進行check。
這個猜測是計算偏移的,但是嘗試的時候怎么試都不太對,無奈進行動態(tài)分析。
開個apache,把文件目錄放到/srv/http下(arch系統(tǒng)),然后修改httpd目錄。用firefox動態(tài)調(diào)試。
跟到check函數(shù)
這是check長度的。
這是check前4個字符的。
這里發(fā)現(xiàn)那串字符串變換的代碼,分析了下運算iter先和1337相乘再和內(nèi)存中某值進行異或,等下不就是這個嗎。
然后查了下運算優(yōu)先級,發(fā)現(xiàn)乘法運算優(yōu)先級比異或高,我???為什么會有這種錯覺,算了就當(dāng)學(xué)了波動態(tài)調(diào)試吧,唉。
把內(nèi)存數(shù)據(jù)提取一下,一行就解決了。
這題可以作為一個wasm入門題來做,學(xué)習(xí)了一波靜態(tài)分析和動態(tài)分析。
總結(jié)
以上是生活随笔為你收集整理的【Re】36C3CTF xmas_future的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IBM Verse On-Premise
- 下一篇: matlab图像转为灰度,matlab怎