# HW4 ## AMessageBox ### 觀察&解題 本題先依照助教上課所說設定好斷點 ![](https://i.imgur.com/Fzvl6TA.png) 之後按F9兩次執行程式,並輸入flag,此時x64-dbg也會停在我預設的斷點 而我則去呼叫堆疊那邊,點擊amessagebox_904ac0c699abc2f6.00351108 ![](https://i.imgur.com/3ek67Js.png) 如此即可跳到執行比較那邊的組語 這邊會拿使用者的input的每個Byte做三件事: 1. 循環左移3個Bit 2. 跟0x87做xor 3. 與某常數做比較 ![](https://i.imgur.com/dflvL4f.png) 此常數內容如下 ![](https://i.imgur.com/3MCqoVA. 將這常數還原成FLAG字串就行了!! ![](https://i.imgur.com/kCbkMGy.png) ## OOXX ### 觀察&解題 此題ooxx其實只要下贏電腦就會獲得FLAG,但實際上下不贏,所以需要用動態分析方式修改變數來取得勝利 因為輸贏的判斷是由某個函式決定的,這邊我採取IDA分析找出決定勝負的函式 ![](https://i.imgur.com/2JNPz5C.png) 這個函式反編譯後長這樣 ![](https://i.imgur.com/h3fenhZ.png) 他會先檢查X方是否勝利,在檢查O方是否勝利,在檢查是否平手,若都不是則表示局尚未下完,Continue 如果O方勝利,會將對應暫存器的值改成1 而我們的目標就是在檢查完O是否勝利後下斷點,修改暫存器的值 修改的暫存器如下:PF:1->0 TF:1->0 RAX:0->1 ![](https://i.imgur.com/dmQXKA9.png) 之後繼續執行即可贏得勝利 可以在程式跟x64-dbg上看到FLAG ![](https://i.imgur.com/CRMsax3.png) ![](https://i.imgur.com/s3lRlWp.png) ## trojan ## 觀察&解題 本題直接執行沒有任何事情發生 拿到IDA分析後發現下圖為一個Socket的函式,會做socket、bind、accept ![](https://i.imgur.com/LQbrDYw.png) 而透過Wireshark打開題目的pcapng檔,發現三個packet特別大,猜測裡面應該是圖片的內容。 ![](https://i.imgur.com/rJ6q6Mo.png) 綜合上述資訊,猜測這支程式會將電腦畫面截圖後再把圖片透過socket傳送 由於之前猜測packet資料內容是放圖片的16進位,但透過header看不出來是一張圖片,可能是被xor過,隨便拿一張圖片的前4 Byte跟packet資料內容的前4 Byte做xor,得到0vCh ![](https://i.imgur.com/tpeqq8S.png) 由於四個Byte透過xor轉過來的都是ASCII字元,所以又回去分析了一下IDA看看有沒有0vCh的存在,發現了下圖 ![](https://i.imgur.com/WBz8jJE.png) 這函式會把圖片的每個Byte去xor "0vCh8RrvqkrbxN9Q7Ydx" 而我透過相同邏輯將圖片轉回來,其中packet字串就是Wireshark封包內的資料部分 ![](https://i.imgur.com/Jngj1GN.png) 如此操作後就得到FLAG!! ![](https://i.imgur.com/THSEZZZ.png)