1. 程式人生 > >CTF--2016XDCTF全國網路安全大賽之reverse2

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 學習總結

此題目沒有提示,沒有任何輸出。先得逆向分析檢視程式邏輯和功能。

要識別出干擾的花指令和去除冗餘的程式碼部分。中間出現一些的錯誤分支。

同時有檔案釋放寫入。此處資訊關鍵,主要注意學習不同檔案尾部和

頭部特徵,以及檔案流式操作,最後編碼逆序實現成功解題,

拿到音訊答案檔案。