iT邦幫忙

2025 iThome 鐵人賽

DAY 17
0
自我挑戰組

新手挑戰 picoCTF:資安入門紀錄系列 第 17

PW Crack 2 — XOR 解密 flag

  • 分享至 

  • xImage
  •  

今天挑戰的是:
https://ithelp.ithome.com.tw/upload/images/20250929/20178898YYtLLcslxH.png
題目給了兩個檔案:一個密碼檢查程式 level2.py,以及被 XOR 加密的 flag 檔 level2.flag.txt.enc。
這題的重點是 讀懂程式碼,把檔內組合密碼的邏輯還原成可輸入的字串,然後用程式內的 XOR 邏輯把 flag 還原出來。


解題步驟
一、確認檔案:
ls -l level2.py level2.flag.txt.enc
https://ithelp.ithome.com.tw/upload/images/20250929/20178898hGsTNSWPCi.png

二、閱讀"level2.py"程式碼:
cat level2.py
https://ithelp.ithome.com.tw/upload/images/20250929/201788984gDCtPxI4A.png
"level2.py"中的關鍵段落如下(節錄):

if( user_pw == chr(0x64) + chr(0x65) + chr(0x37) + chr(0x36) ):
    decryption = str_xor(flag_enc.decode(), user_pw)
    print(decryption)

說明:
chr(0x64)、chr(0x65)、chr(0x37)、chr(0x36) 分別代表字元 'd','e','7','6',串在一起就是密碼 de76。
str_xor 函數會把 key 循環延伸到與密文等長後,對應位元做 XOR,得到明文。

三、把 chr(...) 轉成可讀字元(驗證密碼):
python3 - <<'PY'
print(chr(0x64)+chr(0x65)+chr(0x37)+chr(0x36))
PY
#輸出:de76
https://ithelp.ithome.com.tw/upload/images/20250929/20178898uCy9iqkXfI.png

四、用原程式互動式執行:
#互動式:程式會要求你輸入密碼
python3 level2.py
#在提示出現時輸入:de76
https://ithelp.ithome.com.tw/upload/images/20250929/20178898l6tHnLNFW0.png
結果(最終 Flag):picoCTF{tr45h_51ng1ng_489dea9a}


原理小解
chr(0xNN) 是把十六進位數轉成相對應 ASCII 字元,讀程式能直接把密碼還原出來,這題就是考你會不會閱讀程式碼。

str_xor 是很常見的輕量對稱加密(把 key 重覆直到和訊息等長再做 XOR);只要 key(密碼)正確,就能把密文恢復為明文。


我學到
練習找 chr()、hex、base64 出現的位置,學會把它們還原成可讀字串。
把任意字串做 XOR 加密/解密,理解「同一 key XOR 兩次會回到原文」這個特性。
不懂時把程式的關鍵行複製到 Python 或線上 REPL,實驗幾次就會懂。


上一篇
PW Crack 1 — 閱讀程式找密碼
系列文
新手挑戰 picoCTF:資安入門紀錄17
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言