# THJCC_2024_Winter_write_up 本來以為是新手快樂賽沒想到是通靈大賽XD 早上8.爬起來搶了兩題welcome的first blood然後發現其他都好難所以繼續睡😴 ## Welcome ### Welcome 0x2 歡迎來到 THJCC ,這次的 welcome 沒有像上次一樣簡單, 我準備了一個小遊戲,相信你剛剛進來網頁也有看到, 沒錯!你必須在主頁的小遊戲達到 10000 分就可以獲得 FLAG!趕快去挑戰!! #### 解法 這題我算是作弊吧,還是這是早鳥福利,反正大概比賽開始前一週只要100分所以... ![image](https://hackmd.io/_uploads/BkM0e74Vye.png) 怎麼會在比賽開始之前就解出來了XD :::spoiler flag THJCC{Sn4ke_G4me_Mast3r} ::: ### Discord 0x2 使用 get_flag 指令獲取 FLAG,對相信我 #### 解法 這題之前有過 可以在私人聊天用指令 ![image](https://hackmd.io/_uploads/Sy5p2AcNyx.png) :::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去算 ![image](https://hackmd.io/_uploads/S1a1Eg3Vkx.png) c那邊怎麼算都不太對 除非用大寫的C然後+34等於e 但這怎麼看都不像一個規律的加解密 最後真的是爆破解解掉的 這題真的有夠XX :::spoiler flag THJCC{1_l0v4_y0U} ::: 希望最後看官方writeup的時候可以知道他是甚麼規律 如果沒有規律真的會覺得很問號 更: 欸真的有規律 rot47 對不起我是井底之蛙 ![image](https://hackmd.io/_uploads/Byf9ngpEkx.png) 三次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 ![image](https://hackmd.io/_uploads/Hk2akls41g.png) #### 解法 這題其實蠻有趣的,也不會太通靈 首先是這跟柱柱 ![image](https://hackmd.io/_uploads/ByuVlxo4Jl.png) 讓我覺得應該是英語系國家 然後後面的櫃狀物有個LB ![image](https://hackmd.io/_uploads/HJ77geiEyg.png) 最有趣的是 chatgpt 跟我說 這個像金字塔的東西應該是 California State University Long Beach 的體育館 ![image](https://hackmd.io/_uploads/SynIlesVJe.png) 查了一下 好像對了欸 ![image](https://hackmd.io/_uploads/HyEpeejEyl.png) 看圖片中剛好是位於稜角的方位 扣掉他有兩個角伸出去就超過學校範圍了 那應該是左下或右下這塊 ![image](https://hackmd.io/_uploads/BkFZbgj4Je.png) 在左下這邊找到形狀很像的樹 ![image](https://hackmd.io/_uploads/SJ_XZlsV1l.png) 都是歪歪的 然後也可以看到有一根很像那根柱子的物體 視角對過去的dining hall也很像圖中的建築 ![image](https://hackmd.io/_uploads/SJmPbgoVJl.png) 最後比照一下 他應該是在這塊拍的照片 ![image](https://hackmd.io/_uploads/B1hRbesEye.png) ![image](https://hackmd.io/_uploads/SJnyMxoVye.png) :::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: ![image](https://hackmd.io/_uploads/HJ9XfzjNke.png) decrypt_flag: ![image](https://hackmd.io/_uploads/BkbHfGiVJg.png) 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試個 ![image](https://hackmd.io/_uploads/H1iIQxsE1l.png) :::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搞懂大概要幹嘛 ![image](https://hackmd.io/_uploads/SJM4e-sVJe.png) 他要用http拜訪,但又會擋http ![image](https://hackmd.io/_uploads/rkF6eWoE1l.png) 但可以用`hTtp://`繞過 另外,他會在host後面亂塞東西 ![image](https://hackmd.io/_uploads/HyVHe-iVkg.png) 所以應該是我要想辦法截斷讓後面那串被硬加上去的不要被讀進去 ## 結語 其實我覺得這次的難度很像AIS3 PreExam 有難題也有簡單 鑑別度做得不錯 但不知道為什麼好多easy都比baby簡單 ![image](https://hackmd.io/_uploads/Syg0wmIhEye.png)