2024铁人三项决赛CTF RE - crazyaes 解题笔记

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 提取可打印字符串,发现了几个关键信息:

  • UPX0UPX1 节名 → 文件被 UPX 加壳
  • checkdata → 存在名为 checkdata 的数据段
  • /2flag: → flag 输出标记
  • wrong! → 错误提示字符串

确认是 UPX 壳之后,尝试用 upx -d 脱壳,但发现 UPX 头部被修改过,标准脱壳工具报错。于是转而直接用 PE 解析工具分析节信息,发现程序包含自定义的 checkdata 节,里面存放的是加密后的密文数据。


逆向分析

用 IDA Pro 加载脱壳后的二进制,定位到主逻辑函数。程序的核心流程如下:

  1. 读取用户输入(即 flag)
  2. 对输入进行加密处理
  3. 将加密结果与 checkdata 段中的密文进行比较
  4. 匹配则输出 flag,不匹配则输出 wrong!

重点分析加密函数,发现整体结构是 AES,但有两处关键改动:

改动一:SubBytes 替换盒被修改

标准 AES 的 S-Box 是固定的 256 字节查找表,但程序中的 S-Box 与标准值不同,是自定义的替换盒。这意味着直接用标准 AES 解密无法还原明文。

改动二:MixColumns 系数被修改

标准 AES 的 MixColumns 操作使用固定的矩阵 {2,3,1,1} 等系数,程序中的矩阵系数同样被替换成了自定义值。

这种对 AES 内部结构进行局部修改的手法在 CTF 逆向题中比较常见,通常称为"魔改 AES"。


解题思路

由于加密算法是魔改 AES,直接调用标准库无法解密,需要根据逆向分析的结果还原自定义的解密流程:

  1. 提取程序中实际使用的 S-Box(正向和逆向)
  2. 提取修改后的 MixColumns 矩阵
  3. 提取密钥扩展逻辑(Key Schedule)
  4. 按照 AES 解密流程,依次执行 AddRoundKey → InvShiftRows → InvSubBytes(用自定义逆 S-Box)→ InvMixColumns(用自定义逆矩阵)
  5. checkdata 中的密文执行上述解密,得到明文

实现解密脚本后,对密文数据进行解密,输出结果即为 flag。


Flag

flag{Re_1ts_f0n}

总结

本题的核心考点是对魔改 AES 的识别与逆向还原能力。解题关键有两点:一是要能快速识别出 AES 的整体结构,即使 S-Box 和 MixColumns 被修改,AES 的轮结构(AddRoundKey、SubBytes、ShiftRows、MixColumns)依然保留;二是要耐心提取程序中实际使用的自定义参数,逐一替换标准 AES 中的对应部分,构造出正确的解密流程。

对于此类魔改密码学算法的题目,建议优先关注以下几点:查找表是否被替换、运算系数是否被修改、轮数是否有变化、密钥扩展是否有改动。逐一排查后,通常能较快定位到改动点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值