---
# System prepended metadata

title: HW4

---

# 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)











