西電 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,但也希望可以了解其中的原理,仔細討論會發現,這就是一個密碼學中常見的多層加密概念。實際應用中,多層加密可以大幅提升破解難度。
Member discussion