2024铁人三项决赛CTF RE - crazyaes 解题笔记
题目信息
- 题目名称:crazyaes
- 平台名称:玄机靶场(xj.edisec.net)
- 题目类型:REVERSE(逆向)
- 难度:极难
- 赛事:2024年第一届"长城杯"信息安全铁人三项赛线下决赛
初步分析
拿到题目附件后,首先用 file 命令确认文件类型:
$ file crazyaes.exe
crazyaes.exe: PE32+ executable (console) x86-64, for MS Windows
是一个64位 Windows PE 可执行文件。先用 strings 提取可打印字符串,发现了几个关键信息:
UPX0、UPX1节名 → 文件被 UPX 加壳checkdata→ 存在名为 checkdata 的数据段/2flag:→ flag 输出标记wrong!→ 错误提示字符串
确认是 UPX 壳之后,尝试用 upx -d 脱壳,但发现 UPX 头部被修改过,标准脱壳工具报错。于是转而直接用 PE 解析工具分析节信息,发现程序包含自定义的 checkdata 节,里面存放的是加密后的密文数据。
逆向分析
用 IDA Pro 加载脱壳后的二进制,定位到主逻辑函数。程序的核心流程如下:
- 读取用户输入(即 flag)
- 对输入进行加密处理
- 将加密结果与
checkdata段中的密文进行比较 - 匹配则输出 flag,不匹配则输出
wrong!
重点分析加密函数,发现整体结构是 AES,但有两处关键改动:
改动一:SubBytes 替换盒被修改
标准 AES 的 S-Box 是固定的 256 字节查找表,但程序中的 S-Box 与标准值不同,是自定义的替换盒。这意味着直接用标准 AES 解密无法还原明文。
改动二:MixColumns 系数被修改
标准 AES 的 MixColumns 操作使用固定的矩阵 {2,3,1,1} 等系数,程序中的矩阵系数同样被替换成了自定义值。
这种对 AES 内部结构进行局部修改的手法在 CTF 逆向题中比较常见,通常称为"魔改 AES"。
解题思路
由于加密算法是魔改 AES,直接调用标准库无法解密,需要根据逆向分析的结果还原自定义的解密流程:
- 提取程序中实际使用的 S-Box(正向和逆向)
- 提取修改后的 MixColumns 矩阵
- 提取密钥扩展逻辑(Key Schedule)
- 按照 AES 解密流程,依次执行 AddRoundKey → InvShiftRows → InvSubBytes(用自定义逆 S-Box)→ InvMixColumns(用自定义逆矩阵)
- 对
checkdata中的密文执行上述解密,得到明文
实现解密脚本后,对密文数据进行解密,输出结果即为 flag。
Flag
flag{Re_1ts_f0n}
总结
本题的核心考点是对魔改 AES 的识别与逆向还原能力。解题关键有两点:一是要能快速识别出 AES 的整体结构,即使 S-Box 和 MixColumns 被修改,AES 的轮结构(AddRoundKey、SubBytes、ShiftRows、MixColumns)依然保留;二是要耐心提取程序中实际使用的自定义参数,逐一替换标准 AES 中的对应部分,构造出正确的解密流程。
对于此类魔改密码学算法的题目,建议优先关注以下几点:查找表是否被替换、运算系数是否被修改、轮数是否有变化、密钥扩展是否有改动。逐一排查后,通常能较快定位到改动点。
212

被折叠的 条评论
为什么被折叠?



