# THJCC_2024_Winter_write_up
本來以為是新手快樂賽沒想到是通靈大賽XD
早上8.爬起來搶了兩題welcome的first blood然後發現其他都好難所以繼續睡😴
## Welcome
### Welcome 0x2
歡迎來到 THJCC ,這次的 welcome 沒有像上次一樣簡單, 我準備了一個小遊戲,相信你剛剛進來網頁也有看到,
沒錯!你必須在主頁的小遊戲達到 10000 分就可以獲得 FLAG!趕快去挑戰!!
#### 解法
這題我算是作弊吧,還是這是早鳥福利,反正大概比賽開始前一週只要100分所以...

怎麼會在比賽開始之前就解出來了XD
:::spoiler flag
THJCC{Sn4ke_G4me_Mast3r}
:::
### Discord 0x2
使用 get_flag 指令獲取 FLAG,對相信我
#### 解法
這題之前有過
可以在私人聊天用指令

:::spoiler flag
THJCC{🇩 🇮 🇸 🇨 ⭕ 🇷 🇩 🚀 🚀 🚀 💥 💥 }
:::
## Crypto
### S-box
In cryptography, an S-box (substitution-box) is a basic component of symmetric key algorithms which performs substitution. In block ciphers, they are typically used to obscure the relationship between the key and the ciphertext, thus ensuring Shannon's property of confusion. Mathematically, an S-box is a nonlinear vectorial Boolean function.
#### 解法
```python=
FLAG = "THJCC{}"
import base64
Sbox = [
0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
]
# 創建 Sbox 的逆映射
inverse_Sbox = [0] * 256
for i in range(256):
inverse_Sbox[Sbox[i]] = i
# 密文 (十六進制)
cipher_hex = "b16e45b3d1042f9ae36a0033edfc966e00202f7f6a04e3f5aa7fbec7fc23b17f6a04c75033d12727"
# 將密文轉換為字節
cipher_bytes = bytes.fromhex(cipher_hex)
# 使用逆向 Sbox 解密
decoded_bytes = bytes(inverse_Sbox[ch] for ch in cipher_bytes)
# 解碼 Base64
decoded_base64 = base64.b64decode(decoded_bytes)
# 輸出解密後的 FLAG
print(decoded_base64.decode())
```
:::spoiler flag
THJCC{1t_INDE3d_C0nFuSed_Me}
:::
### girlfriend?
Kohiro拿到了一段女友給的密文,但是他不知道這是什麼請幫她解密
```bash!
WkdsWmIwbFRSazFaUkVKTFdIcHdhazFFTVdaa01EUTk=
```
#### 解法
這題也是通靈題,一度懷疑解密方式沒有規律。
但總之一開始是base64.decode三次
會得到
```bash!
v&(!!L`0J_:c0=_wN
```
這時應該可以看出來`v&(!!L`會對應到`THJCC{`
所以很明顯是一個替換式密碼。
但要找出他是怎麼替換的
首先我是想到用ascii當密碼表做位移
然後因為如果全部用34會發現部分印不出來或很奇怪
所以我假設他答案是I_LOVE_YOU然後去猜
理想的話會像是這樣
```bash!
THJCC{1_l0vE_y0U}
```
我還用excel去算

c那邊怎麼算都不太對
除非用大寫的C然後+34等於e
但這怎麼看都不像一個規律的加解密
最後真的是爆破解解掉的
這題真的有夠XX
:::spoiler flag
THJCC{1_l0v4_y0U}
:::
希望最後看官方writeup的時候可以知道他是甚麼規律
如果沒有規律真的會覺得很問號
更: 欸真的有規律 rot47 對不起我是井底之蛙

三次base64之後rot47再rot13
## MISC
### Happy College Life
Where is this place ???
把拍照位置的經緯度座標放到 THJCC{} 裡面,並且單位保留到分,像是 24°59'57.8"N 121°19'34.4"E 要被表示成 THJCC{2459N,12119E

#### 解法
這題其實蠻有趣的,也不會太通靈
首先是這跟柱柱

讓我覺得應該是英語系國家
然後後面的櫃狀物有個LB

最有趣的是 chatgpt 跟我說
這個像金字塔的東西應該是 California State University Long Beach 的體育館

查了一下 好像對了欸

看圖片中剛好是位於稜角的方位
扣掉他有兩個角伸出去就超過學校範圍了
那應該是左下或右下這塊

在左下這邊找到形狀很像的樹

都是歪歪的 然後也可以看到有一根很像那根柱子的物體
視角對過去的dining hall也很像圖中的建築

最後比照一下 他應該是在這塊拍的照片


:::spoiler flag
THJCC{3346N,11807W}
:::
好想去美國留學喔
## REVERSE
### BMI Calculator
After sitting in front of the computer for a long time, it’s time to take a look at your health!
#### 解法
直接IDA
main:

decrypt_flag:

decode.py
```python=
v7 = [
0x581E51696960627E,
0x1942755F1A537519,
0x571553421D461E
]
flag_bytes = b""
for num in v7:
flag_bytes += num.to_bytes(8, byteorder='little')
def decrypt_flag(flag_bytes):
return bytes([b ^ 0x2A for b in flag_bytes])
decrypted_flag = decrypt_flag(flag_bytes)
print(decrypted_flag.decode())
```
:::spoiler flag
THJCC{4r3_y0u_h34l7hy?}
:::
## WEB
### notepad+++
I made a notepad+++ in python!
http://cha-thjcc.scint.org:10001/
#### 解法
看了app.py發現可能跟目錄遍歷有關
那用burp試個

:::spoiler flag
THJCC{tmp_1n_🐍_01b4c87cabcca82b}
:::
## 沒寫出來的
### proxy revenge
Have you played [CGGC 2024](https://github.com/Jimmy01240397/My-CTF-Challenges/tree/master/cggc-2024/proxy)? please access secret.flag.thjcc.tw to get the FLAG!!?
http://cha-thjcc.scint.org:10068/
## 解法
先嘗試了幾次弄出一個200搞懂大概要幹嘛

他要用http拜訪,但又會擋http

但可以用`hTtp://`繞過
另外,他會在host後面亂塞東西

所以應該是我要想辦法截斷讓後面那串被硬加上去的不要被讀進去
## 結語
其實我覺得這次的難度很像AIS3 PreExam
有難題也有簡單 鑑別度做得不錯
但不知道為什麼好多easy都比baby簡單
