2 min read

西電 CTF 終端 - Python writeup (zh-TW)

西電 CTF 終端 - Python writeup (zh-TW)

題目資訊

  • 分類: 安全雜項/計算機基礎
  • 描述: Python是CTF中最常用的编程语言,不管是学习哪个方向都离不开Python。本题你需要配置一个能够编译运行Python程序的环境,并且运行题目给出的代码来获取flag。
  • 附件: Python.py
  • 題目連結: https://ctf.xidian.edu.cn/training/13?challenge=488

解題過程

Step 1: 查看源代碼

def rol(x):
    return ((x >> 3) | (x << 5)) & 0xff

enc = [233, 184, 152, 112, 248, 104, 137, 129, 168, 41, 136, 96, 82, 153, 217, 2, 217, 114, 28, 184]
key = 'Python'
flag = ''

僅列出部分程式碼~

🔍 關鍵發現

  • 這是一個解密腳本
  • 使用三層解密:ROL → 減法 → XOR
  • 密鑰是 'Python',循環使用

Step 2: 理解 ROL 函數

ROL (Rotate Right) - 循環右移 3 位:

def rol(x):
    return ((x >> 3) | (x << 5)) & 0xff

運作原理

原始: 11101001 (233)
右移3: 00011101 (29)  ← 右邊掉出的 3 位
左移5: 00100000 (32)  ← 把掉出的位元移回左邊
合併:  00111101 (61)

因為 3 + 5 = 8,所以實現了 8 位元的循環移位!

Step 3: 手動解密一個範例

enc[0] = 233 為例:

① ROL 循環右移

原始: 11101001 (233)
右移3: 00011101 (29)  ← 右邊掉出的 3 位
左移5: 00100000 (32)  ← 把掉出的位元移回左邊
合併:  00111101 (61)

② 減去索引

61 - 0 = 61

③ XOR 密鑰

key[0] = 'P' → ord('P') = 80
61 ^ 80 = 109 → chr(109) = 'm'

第一個字元是 'm'

Step 4: 執行腳本

python3 Python.py

🎉 成功獲得 Flag!

學習重點

1. 循環移位操作

  • ROL (Rotate Left): 循環左移
  • ROR (Rotate Right): 循環右移

2. 多層加密的逆向思維

加密流程(反推)

明文 → XOR密鑰 → 加索引 → ROR → 密文

解密流程(題目給的)

密文 → ROL → 減索引 → XOR密鑰 → 明文

每一步都是可逆的:

  • XOR 可逆:A ^ B ^ B = A
  • 加減可逆:(A + i) - i = A
  • 移位可逆:ROL ↔ ROR

3. 密鑰循環使用

key = 'Python'  # 6 個字元
key[i % 6]      # 當 i ≥ 6 時會循環回來

經驗分享

這題可以透過直接運行得到flag,但也希望可以了解其中的原理,仔細討論會發現,這就是一個密碼學中常見的多層加密概念。實際應用中,多層加密可以大幅提升破解難度。