REVERSE-PRACTICE-BUUCTF-12
REVERSE-PRACTICE-BUUCTF-12
- [WUSTCTF2020]level3
- crackMe
- [FlareOn6]Overlong
- [WUSTCTF2020]Cr0ssfun
[WUSTCTF2020]level3
elf文件,無殼,ida分析
main函數(shù)中,獲取輸入,對輸入做base64編碼,提示有錯誤,在程序中有一個奇怪的字符串,提示和標準base64不同,估計是變表base64
進入base64_encode函數(shù),正常的base64編碼邏輯,對base64_table交叉引用,發(fā)現(xiàn)在O_OLookAtYou函數(shù)中也有對base64_table的引用
進入O_OLookAtYou函數(shù),果然是對base64_table的變換
之前也遇到過變表base64的題目,見REVERSE-PRACTICE-BUUCTF-7
直接拿腳本來用了,執(zhí)行腳本即可得到flag
運行結(jié)果
crackMe
exe程序,運行后輸入用戶名welcomebeijing和密碼,輸入錯誤要重新輸入,無殼,ida分析
在wmain函數(shù)中,獲取輸入的user和password并檢驗長度且均為數(shù)字或字母,在sub_401090函數(shù)中,由輸入的user(welcomebeijing)生成了一個固定的table,這個table在下面的check函數(shù)中也有引用
sub_4011A0函數(shù)是個傳入的兩個參數(shù)賦值,第一個參數(shù)賦為"Congratulations",第二個參數(shù)賦為"please try again",由check函數(shù)的返回結(jié)果決定輸出
進入check函數(shù)
先看第一個while循環(huán)體,在該循環(huán)體中,v15被賦值,而且v15在下一個循環(huán)體中有引用,經(jīng)調(diào)試可知,該循環(huán)體實際是將pwd的內(nèi)容兩兩分組,每兩個字符組成一個十六進制數(shù)放入v15中,例如,輸入的pwd為0123456789abcdef,v15的元素為0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF
接著看第二個循環(huán)體,v15實際就是輸入的pwd,要和table的元素異或,存入v17,而table的元素由v8和v13決定,v8和v13又由v11和v12決定,可以看到,在異或運算的上下,有兩條判斷當(dāng)前是否處于調(diào)試狀態(tài)的if語句,如果是調(diào)試狀態(tài),則會修改v13,v11,v12的值,也就是說,有兩個地方存在反調(diào)試,但我們并不知道進行異或運算的table的元素到底是什么,由之前的分析可知,table的全部元素是由輸入的user確定的,于是可以通過調(diào)試獲知進行異或運算的table的元素,因此需要把反調(diào)試的兩條語句nop掉或修改跳轉(zhuǎn)邏輯,使在調(diào)試狀態(tài)下,不執(zhí)行if成立的語句
下圖為修改跳轉(zhuǎn)邏輯,將.text:00CA1AE8和.text:00CA1B5E兩處指令的jz改成jnz,就實現(xiàn)了調(diào)試狀態(tài)下,不執(zhí)行if成立的語句,注意修改跳轉(zhuǎn)邏輯后要應(yīng)用到可執(zhí)行程序exe
下圖為修改跳轉(zhuǎn)邏輯后的效果,再往下走,sub_CA1710函數(shù)是對v17和user(welcomebeijing)進行異或,while循環(huán)體結(jié)束后,sub_CA1470函數(shù)是對v17的驗證,v17在經(jīng)過一系列運算后的結(jié)果應(yīng)為"dbappsec",長度為8
寫腳本前需要先通過調(diào)試得到與v15進行異或運算的8個table的元素,為[0x2a,0xd7,0x92,0xe9,0x53,0xe2,0xc4,0xcd],寫腳本,提交第二個md5值成功
[FlareOn6]Overlong
exe程序,運行后提示說沒有破壞編碼,冒號后面沒有內(nèi)容,無殼,ida分析
start函數(shù),unk_402008作為參數(shù)傳入了sub_401160函數(shù)參與運算,運算長度為第三個參數(shù)28,運算結(jié)果放入Text中,最后通過MessageBoxA將Text的內(nèi)容輸出
sub_401160函數(shù)以及sub_401000函數(shù)是程序?qū)懞玫倪\算邏輯,由提示可知運算邏輯不會變,加上overlong的提示,應(yīng)該是讓參與運算的元素更多,即sub_401160函數(shù)的第三個參數(shù)更大,讓程序運算輸出flag
當(dāng)修改參與運算長度28為72時,應(yīng)用到程序并運行,得到flag
[WUSTCTF2020]Cr0ssfun
elf文件,無殼,ida分析
main函數(shù)邏輯清晰,獲取輸入,調(diào)用check檢驗輸入,check返回1時說明輸入正確
進入check函數(shù),是對輸入input內(nèi)容的直接判斷,其余的函數(shù)同理
寫腳本即可得到flag
總結(jié)
以上是生活随笔為你收集整理的REVERSE-PRACTICE-BUUCTF-12的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: char 和 varchar 的区别,数
- 下一篇: 马斯克星链服务面临彻底断网危机 Spac