前往
大廳
主題

反組譯/逆向工程研究 - Case 1

虛鹿 | 2022-07-14 22:54:35 | 巴幣 240 | 人氣 682

人生中第一次自己挑戰RE的CTF,
因此一時興起想記錄一下解題過程。

先來一首很油的歌壓壓驚(直接點擊圖片),
畢竟以下的內容會有點硬,
希望點進來看的諸君心臟承受得了。

總之,
先給我去下載CTF的檔案(檔名:ReverseMe.exe),
放心沒有毒,我有檢查過了。
無聊或有多餘的時間的話,
建議自己試試看,
畢竟體感上沒有想像中的困難。

————--—- 解法 ———————

下載完檔案後,
先執行 ReverseMe.exe 看看:

呃….毫無頭緒的說,
不過沒關係,
先把他丟進去你喜歡的分析軟體內,
來仔細看看這個PE檔內部的東東。

習慣C語言的人建議用NSA開發的Ghidra,
畢竟他的decompile結果是用C表示的;
但如果你跟我一樣對組合語言情有獨鍾,
那就來用 IDA Freeware 分析。

好,那麼先讓畫面回到IDA,
在整個流程圖的最上方,
我們可以看到程式產生了兩個分支,
也就代表著一次的邏輯判斷。

最上方那格(最大的那格)的下半部,
我們可以看到他呼叫了win32 api 的 CreateFileA,
試圖開啟一個叫做 “Keyfile.dat” 的檔案,
並 cmp 了 eax 與 0xFFFFFFFfh,
相等就往左跳,不想等就往右跳。

雖然我們不了解 0xFFFFFFFFh 代表什麼,
但根據之前寫 windows 病毒所累積的經驗,
我合理推測那個就是 Invalid_Handle_Value。

講白了,
就是想開啟一個叫做 “Keyfile.dat” 的檔案,
存取失敗或不存在的話就退出,
並印出 “Purchase new license ” 訊息。
若成功的話,
就往右繼續執行。

根據以上線索,
我們先建立一個 Keyfile.dat 檔案在他旁邊,
先用一個空的檔案試試看執行結果。

呃….好喔,
果然沒有想像中的簡單…..(T ^ T)

根據產生變化的輸出訊息,
我們可以得知到目前為止的推測都是正確的。

再次回到IDA的流程圖中,
右側的分支在用 CreateFileA 取得 handle 後,
又呼叫了 ReadFile 去讀取檔案內的訊息,
最多讀取 46h(70) bytes。

接著,
程式把 ebx、esi 進行了 xor,
在下方的格子(紅色標記)內進行了cmp判斷,
並產生兩條分支。

判斷的內容,
便是先前從 Keyfile.dat 中讀取的資料大小,
是否是一個長度為10h (16位)的字串,
而如果讀取的長度不等於16,
就印出剛剛的 “keyfile is not valid”。

如果長度為16的話,
程式就會進入一個 loop 中。

從藍色的區塊中可以得知,
他在用 [ebx] 作為讀取的資料的 index,
並把讀取的字元放到 al 暫存器,
打算使用 inc ebx 的方式,
來比對讀取的每一個字母。

而該區塊內,
專門比對現在 index 到的字母是否為0,
如果是的話,就往右跳出迴圈;
如果不是的話,就往左執行迴圈。

根據此線索,
我們可以得知 key 的最後一位必為0。

接著,進入左側迴圈,
我們可以看到,
程式在記錄 key 中 “G” (Ascii: 47h) 的數目。
不是 G 的話就跳到 loc_4010D0,
把 ebx 增加一位;
是 G 的話就先 inc esi,
再 inc ebx 。

這時,
往程式遇到 0 跳出迴圈的地方做確認,
可以發現程式在比對 esi 的數值是否為 8,
也就是 key 中是否存在 8 個 “G”。

如果成立的話,
就印出挑戰成功的訊息;
不成立的話,
就印出 “keyfile is not valid”

也就是說,key 要有16個char,
並一定要以 0 結尾,且有 8 個 G 在其中。

只要滿足以上條件,
程式都會判斷持有的 key 是 valid 的!
剩下的亂打就可以了!
就如同下圖一樣。

key: BBBBBBBGGGGGGGG0

好耶,
人生中第一次挑戰RE的CTF成功了。
開心啦幹~\(≧▽≦)/


送禮物贊助創作者 !
0
留言

創作回應

樂小呈
縮圖很棒
2022-07-14 23:05:45
虛鹿
識貨喔~
2022-07-15 14:19:23
Nero
2022-07-15 00:31:36
虛鹿
並不是
2022-07-15 14:19:32
TheWAY
2022-07-15 03:45:34
虛鹿
錯覺
2022-07-15 14:19:39
W.Dinlon
ななひら的うまぴよ超可愛!
這次的CTF主題挺有趣的,看你介紹也想來玩玩看了
2022-07-15 06:50:29
虛鹿
ななひら的聲音真的蠻有特色的,意外的適合這首歌
2022-07-15 14:21:16
dreamer0942
2022-07-15 09:29:39
虛鹿
並不是
2022-07-15 14:21:24

更多創作