2025-10-04
逆向工程
00
请注意,本文编写于 62 天前,最后修改于 62 天前,其中某些信息可能已经过时。

目录

EasyXor 逆向分析报告
题目背景
XOR加密原理(图解):
分析工具
详细解题思路
初始分析阶段
核心逻辑定位
解密算法推导
验证与优化
四步解题法
步骤1:启动分析工具箱
步骤2:发现核心密码锁
步骤3:理解加密原理
步骤4:提取加密数据
步骤5:编写解密脚本
步骤6:获取flag
验证结果

EasyXor 逆向分析报告

题目背景

"程序使用XOR加密技术保护flag,就像密码锁一样。我们要通过逆向分析找到正确的密码!"

XOR加密原理(图解):

原始字符 'S' (83) → XOR运算 → 加密数据 83 ⊕ 密钥=i ↑ 位置序号 0 (0) ← 反向XOR ←

分析工具

  1. IDA Pro:专业"程序解剖镜",查看程序内部结构
  2. Python:编写"解密钥匙"的编程语言

详细解题思路

初始分析阶段

plaintext
1. 题目提示涉及XOR加密 -> 重点查找异或运算代码模式 2. 连接IDA Pro获取文件元数据: - 文件大小8.5KB -> 小型程序,逻辑应较简单 - 无函数名提示 -> 需定位入口点

核心逻辑定位

plaintext
3. 列出函数发现main函数(0x790) -> 程序入口点 4. 反编译main函数发现: - v8数组含22个数字 -> 疑似加密数据 - 循环中v8[i] != (i ^ s[i]) -> XOR验证逻辑 - 输入长度22 -> flag长度线索

解密算法推导

plaintext
5. 逆向验证逻辑: 原始公式:v8[i] == (i ^ flag[i]) => flag[i] = v8[i] ^ i 6. 提取v8数组完整数据

验证与优化

plaintext
7. 编写Python脚本验证算法 8. 首次运行即获正确flag -> 算法正确

四步解题法

步骤1:启动分析工具箱

连接IDA Pro

获取程序基本信息:

  • 文件名:EasyXor_.easyxor_
  • 文件大小:8.5KB
  • 加密方式:XOR(异或运算)

步骤2:发现核心密码锁

main函数分析

关键密码验证逻辑:

c
// 初始化加密的flag数据 v8[0] = 83; v8[1] = 116; v8[2] = 111; // 验证用户输入 for (i = 0; i < v7; ++i) { if (v8[i] != (i ^ s[i])) // XOR解密验证 v4 = 0; // 标记错误 }

步骤3:理解加密原理

程序的核心加密是简单的XOR运算:

加密数据 = 原始字符 ^ 位置序号

要解密只需反向操作:

原始字符 = 加密数据 ^ 位置序号

步骤4:提取加密数据

从代码中提取出22个加密数字: 83, 116, 111, 96, 112, 99, 125, 78, 87, 103, 57, 110, 104, 82, 102, 106, 113, 32, 123, 125, 115, 104

步骤5:编写解密脚本

python
# 加密数据 encrypted = [83, 116, 111, 96, 112, 99, 125, 78, 87, 103, 57, 110, 104, 82, 102, 106, 113, 32, 123, 125, 115, 104] # 解密:每个字符 = 加密数据 ^ 位置索引 flag = ''.join([chr(encrypted[i] ^ i) for i in range(len(encrypted))]) print(f"解密成功!flag是: {flag}")

步骤6:获取flag

运行脚本得到最终flag:

Sumctf{I_n3ed_hea1ing}

验证结果

在程序中输入这个flag,会显示"Heros never dieVictory",验证通过!

本文作者:晏秋

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!