天天看點

攻防世界 REVERSE 新手區/re1

攻防世界 REVERSE 新手區/re1

先看題,題目描述沒啥有用資訊,直接下附件
攻防世界 REVERSE 新手區/re1
打開
攻防世界 REVERSE 新手區/re1
先随便輸個數
攻防世界 REVERSE 新手區/re1
估計是個字元串比對的題,接下來用IDA32位打開
攻防世界 REVERSE 新手區/re1
看到有個strcmp函數,比較v5和v9,然後判斷v3,根據v3給出相應的結果。這時我看到了個printf(aFLAG),滿懷欣喜地點進去看了
攻防世界 REVERSE 新手區/re1
啊?這麼快就得到答案了麼?(并沒有。。)
攻防世界 REVERSE 新手區/re1
看下描述,和運作的那個程式一樣結果,看來是假的
攻防世界 REVERSE 新手區/re1
那麼那個else後輸出的就應該是代表正确的答案了,跟進unk_413E90
攻防世界 REVERSE 新手區/re1
看到flag get,證明沒錯
攻防世界 REVERSE 新手區/re1
之後就從判斷條件開始入手v9是要輸入的數,接下來就是找找v5的數值是多少了,直接點選v5跳轉,看到除了xmmword就沒别的了,那就傳回。
攻防世界 REVERSE 新手區/re1
看到開始有個函數包括了v5和xmmword,應該是将xmmword_413E34的值賦給v5。
攻防世界 REVERSE 新手區/re1
跟進檢視一下
攻防世界 REVERSE 新手區/re1
攻防世界 REVERSE 新手區/re1
xmmword的值已經出來了:那麼v5的值就是 3074656D30633165577B465443545544h了
v5應該是16進制表示的,看下strcmp函數,有個将v5轉換為字元串的函數,
攻防世界 REVERSE 新手區/re1
百度一下16進制轉字元串
攻防世界 REVERSE 新手區/re1
這串字元0tem0c1eW{FTCTUD看着不像flag,但是在中間看到了個FTC,再看下題目來源
攻防世界 REVERSE 新手區/re1
這不就是flag翻轉過來了嘛,百度了個文字倒序網站,翻轉一下
百度了一下找到了這個:“彙編裡面存儲字元是采用小端格式”
攻防世界 REVERSE 新手區/re1
啊,天真的我以為得到了flag,直接去送出了
攻防世界 REVERSE 新手區/re1
然後,,,試了幾次都不正确。。。。。看下裡面的字元串,可以看出是串英文:Welcometo,那應該是少了東西在後面,但是也沒看到有啥拼接字元串的函數了哇。。。。然後我看到了v6這串字元
攻防世界 REVERSE 新手區/re1
跟進去看下
攻防世界 REVERSE 新手區/re1
诶?好像沒有哪個地方用了這串字元,那轉下字元串試試
攻防世界 REVERSE 新手區/re1
然後得到了這串字元: }FTCTUD
嗯?這不就是後半段字元麼,拼在之前得到的字元串前面(因為是小端格式排列,是以要拼到前面): }FTCTUD0tem0c1eW{FTCTUD
再次翻轉,得到flag: DUTCTF{We1c0met0DUTCTF}
攻防世界 REVERSE 新手區/re1
再輸入那個程式驗證一下
攻防世界 REVERSE 新手區/re1
但是真的不知道在哪把v6拼到v5前面去了…