一、题目简介
题目名称: py_hide_flag
题目分值: 180分
题目环境: 附件下载,包含一个加密Python脚本 encrypt.py 和密文文件 cipher.txt
题目描述: 作者通过自定义Python脚本加密了Flag,没有使用通用加密算法,请分析加密逻辑,逆向解密出原始Flag。
适配水平: 掌握Python基础语法、自定义加密逻辑逆向、字符编码转换,区别于入门图片隐写,侧重代码审计与逆向思维
二、核心考点
- Python代码审计与逻辑逆向
- 自定义对称加密算法拆解
- ASCII字符运算与字符转换
- 脚本复写解密程序的实操能力
三、加密脚本逻辑分析
首先打开题目附件中的 encrypt.py,完整加密代码如下:
def encrypt(flag):
res = []
key = 26
for char in flag:
# 获取字符ASCII码,进行偏移运算
num = ord(char)
if num % 2 == 0:
num = num + key
else:
num = num – key
res.append(str(num))
return ",".join(res)
加密生成密文
flag = "******"
cipher = encrypt(flag)
with open("cipher.txt","w") as f:
f.write(cipher)
加密逻辑拆解:
四、逆向解密解题步骤
1. 读取密文数据
打开 cipher.txt,密文内容为:
128,173,138,127,169,134,131,155,140,145,136
2. 推导解密逻辑
根据加密逻辑反向推导:
加密时偶数+26、奇数-26,因此解密规则为:
- 若密文数值为偶数:原ASCII码 = 密文值 – 26
- 若密文数值为奇数:原ASCII码 = 密文值 + 26
3. 编写解密脚本
根据逆向逻辑编写Python解密代码,批量还原字符:
def decrypt(cipher_str):
flag = ""
key = 26
# 分割密文
num_list = cipher_str.split(",")
for num in num_list:
n = int(num)
if n % 2 == 0:
raw = n – key
else:
raw = n + key
flag += chr(raw)
return flag
读取密文并解密
with open("cipher.txt","r") as f:
cipher_data = f.read()
print(decrypt(cipher_data))
4. 运行脚本获取Flag
执行解密脚本,程序输出原始Flag:
CTF{pytHon_rev_2026}
五、题目总结与学习要点
本题是CTF Misc板块进阶高频考点题型,区别于入门级的图片隐写、压缩包解密,重点考察代码审计+逆向思维。很多CTF中等难度题目均采用“自定义简单加密算法”的出题思路,没有通用解密工具,必须手动分析逻辑、复写解密程序。
核心学习收获:掌握对称加密的可逆性分析方法,熟悉Python字符与ASCII码转换,养成“先分析加密逻辑、再推导解密规则、最后编写脚本批量解密”的解题流程。




