CTF--2016XDCTF全國網路安全大賽之reverse2
0x01 題目介紹
題目名稱
reverse2
題目描述
File: XDCTF2.exe
Size: 195584 bytes
File Version: 1.0.0.1
Modified: Tuesday, March 07, 2017, 00:11:41
MD5: 1B0EA0BD4B8DA116C7D590F05BE6692A
SHA1: 81174B9D39D467308818B0BB0C99D427ED80EB6C
CRC32: 4D44CF29
0x02 解題要點
先點選程式執行測試,發現一閃而過。回到cmd下面進行執行。命令列執行程式,什麼也沒有輸出。
於是覺得奇怪,一般的破解逆向程式都有輸入輸出提示,或者介面等訊息。
於是還是先暫時用IDA載入測試一下。找到程式碼部分,大理一陽指F5
進入main函式。注意紅色標記部分,函式入口。
又出現了多執行緒,注意此處我們用的是靜態分析工具,程式碼沒有執行,
不會出現邏輯分支幹擾,執行錯誤。如果是動態分析可能已經跟蹤偏了。
注意此段引數數量為1,sub_405000經過分析是計算字串長度。
類似於我們常見的函式strlen
這是字串計算長度函式實體部分,裡面用結束\0作為判斷標誌位。
返回值是result
輸入引數1運算,輸入引數2運算,0x38,0x66檔案引數運算
Name運算完成之後會得到一個TEMP字串
lpBuffer接收返回的路徑
byte_42DECC進行異或運算之後得到讀寫檔案標記。
注意不同的邏輯判斷,引數數量1,2,3。發現在3的時候有引數數量限制,長度和比較規則。
由此判斷輸入必須兩個引數,長度為10,而且第一個解密之後和第二個相等。
演算法主要函式,以及檔案寫入函式路徑TEMP
注意釋放檔案函式,由於V13必須為真,才能進入資料檔案寫入呼叫階段。
於是網上追溯,分析獲取引數1和引數2值為
user:xidian2016
password:yjejbo3127
才可以生成檔案。
生成 C:\Users\ROOT\AppData\Local\Temp\firefox.tmp檔案
轉向研究釋放的檔案,一般思路直接解壓或者執行不行或者錯誤的話,
然後點選十六進位制檢視,發現類似壓縮包檔案被破壞,於是採用修復RAR測試
修復之後測試成功,但是解壓需要密碼。於是猜想前面的使用者和密碼進行嘗試,
嘗試了很多次,終於發現解壓密碼是user+pass拼接而成。於是得到解壓後的
檔案內容。
xidian2016yjejbo3127
解壓出flag.info檔案。我勒個去,還是有檔案,不過根據名稱應該距離答案很近了。
再繼續研究檔案型別和內容。
嘗試了各種方法,包括修復檔案頭。還是沒有找到,不甘心,想啊想。發現檔案的尾部特徵,
非常像wav音訊檔案,可以找個各類檔案結構頭標誌參考。沒有想到竟然是倒序儲存。
但是卻沒有完整,於是還是修復,然後寫程式碼實現流倒敘儲存。於是乎開啟就聽到了
美妙的聲音。答案就在音訊裡面。
修復好檔案,然後自己編碼寫程式實現二進位制流倒敘儲存
倒序輸出結果如下。播放,仔細聽答案,多聽幾遍測試。
輸出結果:
XDFLAG{A1B2C3SUCCESSD4F5G6}
0x03 學習總結
此題目沒有提示,沒有任何輸出。先得逆向分析檢視程式邏輯和功能。
要識別出干擾的花指令和去除冗餘的程式碼部分。中間出現一些的錯誤分支。
同時有檔案釋放寫入。此處資訊關鍵,主要注意學習不同檔案尾部和
頭部特徵,以及檔案流式操作,最後編碼逆序實現成功解題,
拿到音訊答案檔案。