PolarCTF 春季个人挑战赛 re全解
字数 1672 2025-08-29 08:29:58
PolarCTF 春季个人挑战赛逆向工程全解教学文档
1. "解码器"题目解析
题目描述
- 程序运行后输出一段加密字符
- IDA分析发现是对字符串"SELUTE TO LEGEND"进行加密
解题步骤
- 使用IDA静态分析程序
- 发现加密逻辑简单
- 直接提交原始字符串无效
- 尝试MD5加密后提交成功
关键点
- 简单的加密算法可能只是幌子
- 注意题目可能需要二次处理(如MD5)
- 静态分析可以快速识别简单加密
2. "reserve_fib"题目解析
题目描述
- 程序要求输入flag和一个数字
- 输入后对flag进行加密
- 提示信息暗示"不想加班"的怨气
解题步骤
- IDA分析发现斐波那契相关代码
- 动态调试定位关键加密点:
*((_BYTE *)&v20[55] + v6) = Buffer[v6] - v7; - 直接爆破明文
- 得到明文"wobuxiangjiaban"
- MD5加密后提交
关键点
- 注意程序提示信息可能包含线索
- 单字节减法加密容易爆破
- 动态调试定位关键加密代码
- 可能需要二次处理(MD5)
3. "Snake 2025"题目解析
题目描述
- 加壳的贪吃蛇游戏
- 需要达到2025分才能获得flag
解题步骤
- 查壳发现加壳程序
- 使用ESP定律脱壳(x32环境)
- 找到OEP(原始入口点)
- 转储并修复程序
- IDA分析字符串发现flag相关线索
- 动态调试修改分数数据
- 直接获取flag
关键点
- 加壳程序需要先脱壳
- ESP定律是常用脱壳技术
- 游戏类题目常通过修改内存数据快速解题
- 字符串分析是快速定位关键点的有效方法
4. "aomo"题目解析
题目描述
- 解压程序包含多个txt文件和图片
- 运行后需要输入内容
- 实际是Python打包的程序
解题步骤
- 使用pyinstxtractor解包Python程序
- 解压pyc文件
- 分析发现使用cryptography的Fernet模块加密
- 密钥来自"7XdJjIn.txt"文件
- 解密后得到桌宠源码
- 分析发现输入"糖果"输出flag
- 获取flag:
flag{e013db5722b4f71a8d374a2cbe6b8d9d}
关键点
- Python打包程序逆向方法
- pyinstxtractor工具使用
- Fernet对称加密分析
- 输入触发点是常见解题思路
5. "ReverseGame"安卓逆向解析
题目描述
- 安卓应用程序
- 初始有输入验证
- 包含隐藏游戏
解题步骤
- 使用雷电模拟器运行
- MT管理器搜索字符串发现验证逻辑
- 修改smali代码绕过验证
- Jadx分析发现四个MainActivity
- MainActivityKt中发现flag痕迹
- 发现"hiddengame"需要特殊条件解锁
- 点击系统信息10次
- 进入hiddengame后需要点击2025.2025次
- 修改判断逻辑绕过
- 分析flag解密逻辑:
- 密文格式":前为IV,:后为密文"
- 在线解密获取flag:
flag{02ccbd637f9f2e477dcec5850a93617a}
关键点
- 安卓逆向常用工具链(模拟器、MT管理器、Jadx)
- smali代码修改技巧
- 隐藏功能常通过特殊条件触发
- 加密算法分析需要识别IV和密文格式
6. "openwrt"题目解析
题目描述
- OpenWRT相关固件
- 需要提取特定信息
解题步骤
- 使用binwalk提取固件
- 进入/lib/apk/packages目录
- 查看list文件发现自定义包路径
- 提取对应脚本到相同路径
- 运行脚本直接获取flag:
flag{38f15cee4cdb204de5ca6a9373b73603}
关键点
- 固件逆向常用binwalk工具
- 注意自定义包和脚本
- 路径一致性很重要
通用逆向技巧总结
-
静态分析优先:
- 字符串搜索
- 函数交叉引用
- 加密算法识别
-
动态调试辅助:
- 关键点断点
- 内存数据修改
- 执行流跟踪
-
常见加密处理:
- 识别加密算法
- 查找密钥
- 注意IV和密文格式
-
特殊技巧:
- 加壳程序脱壳
- Python程序解包
- 安卓smali修改
- 固件提取分析
-
二次处理:
- MD5哈希常见
- Base64编码
- 其他简单编码
通过以上详细分析,可以系统性地解决各类逆向工程挑战赛题目。