CTF Misc 进阶:Python 自定义加密逆向分析实战——py_hide_flag

📅 2026/7/11 11:28:48 👁️ 阅读次数 📝 编程学习
CTF Misc 进阶:Python 自定义加密逆向分析实战——py_hide_flag

一、题目简介

题目名称: 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. 设定固定密钥key=26,无随机变量,属于对称可逆加密;
  2. 遍历Flag每一个字符,获取对应ASCII码;
  3. 偶数ASCII码:数值+26;奇数ASCII码:数值-26;
  4. 将所有运算后的数值用逗号分隔,写入密文文件。

四、逆向解密解题步骤

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码转换,养成“先分析加密逻辑、再推导解密规则、最后编写脚本批量解密”的解题流程。