PolarCTF 春季个人挑战赛 re全解
字数 1672 2025-08-29 08:29:58

PolarCTF 春季个人挑战赛逆向工程全解教学文档

1. "解码器"题目解析

题目描述

  • 程序运行后输出一段加密字符
  • IDA分析发现是对字符串"SELUTE TO LEGEND"进行加密

解题步骤

  1. 使用IDA静态分析程序
  2. 发现加密逻辑简单
  3. 直接提交原始字符串无效
  4. 尝试MD5加密后提交成功

关键点

  • 简单的加密算法可能只是幌子
  • 注意题目可能需要二次处理(如MD5)
  • 静态分析可以快速识别简单加密

2. "reserve_fib"题目解析

题目描述

  • 程序要求输入flag和一个数字
  • 输入后对flag进行加密
  • 提示信息暗示"不想加班"的怨气

解题步骤

  1. IDA分析发现斐波那契相关代码
  2. 动态调试定位关键加密点:
    *((_BYTE *)&v20[55] + v6) = Buffer[v6] - v7;
    
  3. 直接爆破明文
  4. 得到明文"wobuxiangjiaban"
  5. MD5加密后提交

关键点

  • 注意程序提示信息可能包含线索
  • 单字节减法加密容易爆破
  • 动态调试定位关键加密代码
  • 可能需要二次处理(MD5)

3. "Snake 2025"题目解析

题目描述

  • 加壳的贪吃蛇游戏
  • 需要达到2025分才能获得flag

解题步骤

  1. 查壳发现加壳程序
  2. 使用ESP定律脱壳(x32环境)
  3. 找到OEP(原始入口点)
  4. 转储并修复程序
  5. IDA分析字符串发现flag相关线索
  6. 动态调试修改分数数据
  7. 直接获取flag

关键点

  • 加壳程序需要先脱壳
  • ESP定律是常用脱壳技术
  • 游戏类题目常通过修改内存数据快速解题
  • 字符串分析是快速定位关键点的有效方法

4. "aomo"题目解析

题目描述

  • 解压程序包含多个txt文件和图片
  • 运行后需要输入内容
  • 实际是Python打包的程序

解题步骤

  1. 使用pyinstxtractor解包Python程序
  2. 解压pyc文件
  3. 分析发现使用cryptography的Fernet模块加密
  4. 密钥来自"7XdJjIn.txt"文件
  5. 解密后得到桌宠源码
  6. 分析发现输入"糖果"输出flag
  7. 获取flag: flag{e013db5722b4f71a8d374a2cbe6b8d9d}

关键点

  • Python打包程序逆向方法
  • pyinstxtractor工具使用
  • Fernet对称加密分析
  • 输入触发点是常见解题思路

5. "ReverseGame"安卓逆向解析

题目描述

  • 安卓应用程序
  • 初始有输入验证
  • 包含隐藏游戏

解题步骤

  1. 使用雷电模拟器运行
  2. MT管理器搜索字符串发现验证逻辑
  3. 修改smali代码绕过验证
  4. Jadx分析发现四个MainActivity
  5. MainActivityKt中发现flag痕迹
  6. 发现"hiddengame"需要特殊条件解锁
    • 点击系统信息10次
  7. 进入hiddengame后需要点击2025.2025次
  8. 修改判断逻辑绕过
  9. 分析flag解密逻辑:
    • 密文格式":前为IV,:后为密文"
  10. 在线解密获取flag: flag{02ccbd637f9f2e477dcec5850a93617a}

关键点

  • 安卓逆向常用工具链(模拟器、MT管理器、Jadx)
  • smali代码修改技巧
  • 隐藏功能常通过特殊条件触发
  • 加密算法分析需要识别IV和密文格式

6. "openwrt"题目解析

题目描述

  • OpenWRT相关固件
  • 需要提取特定信息

解题步骤

  1. 使用binwalk提取固件
  2. 进入/lib/apk/packages目录
  3. 查看list文件发现自定义包路径
  4. 提取对应脚本到相同路径
  5. 运行脚本直接获取flag: flag{38f15cee4cdb204de5ca6a9373b73603}

关键点

  • 固件逆向常用binwalk工具
  • 注意自定义包和脚本
  • 路径一致性很重要

通用逆向技巧总结

  1. 静态分析优先

    • 字符串搜索
    • 函数交叉引用
    • 加密算法识别
  2. 动态调试辅助

    • 关键点断点
    • 内存数据修改
    • 执行流跟踪
  3. 常见加密处理

    • 识别加密算法
    • 查找密钥
    • 注意IV和密文格式
  4. 特殊技巧

    • 加壳程序脱壳
    • Python程序解包
    • 安卓smali修改
    • 固件提取分析
  5. 二次处理

    • MD5哈希常见
    • Base64编码
    • 其他简单编码

通过以上详细分析,可以系统性地解决各类逆向工程挑战赛题目。

PolarCTF 春季个人挑战赛逆向工程全解教学文档 1. "解码器"题目解析 题目描述 程序运行后输出一段加密字符 IDA分析发现是对字符串"SELUTE TO LEGEND"进行加密 解题步骤 使用IDA静态分析程序 发现加密逻辑简单 直接提交原始字符串无效 尝试MD5加密后提交成功 关键点 简单的加密算法可能只是幌子 注意题目可能需要二次处理(如MD5) 静态分析可以快速识别简单加密 2. "reserve_ fib"题目解析 题目描述 程序要求输入flag和一个数字 输入后对flag进行加密 提示信息暗示"不想加班"的怨气 解题步骤 IDA分析发现斐波那契相关代码 动态调试定位关键加密点: 直接爆破明文 得到明文"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编码 其他简单编码 通过以上详细分析,可以系统性地解决各类逆向工程挑战赛题目。