"程序使用XOR加密技术保护flag,就像密码锁一样。我们要通过逆向分析找到正确的密码!"
原始字符 'S' (83) → XOR运算 → 加密数据 83 ⊕ 密钥=i ↑ 位置序号 0 (0) ← 反向XOR ←
plaintext1. 题目提示涉及XOR加密 -> 重点查找异或运算代码模式 2. 连接IDA Pro获取文件元数据: - 文件大小8.5KB -> 小型程序,逻辑应较简单 - 无函数名提示 -> 需定位入口点
plaintext3. 列出函数发现main函数(0x790) -> 程序入口点 4. 反编译main函数发现: - v8数组含22个数字 -> 疑似加密数据 - 循环中v8[i] != (i ^ s[i]) -> XOR验证逻辑 - 输入长度22 -> flag长度线索
plaintext5. 逆向验证逻辑: 原始公式:v8[i] == (i ^ flag[i]) => flag[i] = v8[i] ^ i 6. 提取v8数组完整数据
plaintext7. 编写Python脚本验证算法 8. 首次运行即获正确flag -> 算法正确
获取程序基本信息:
EasyXor_.easyxor_关键密码验证逻辑:
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; // 标记错误
}
程序的核心加密是简单的XOR运算:
加密数据 = 原始字符 ^ 位置序号
要解密只需反向操作:
原始字符 = 加密数据 ^ 位置序号
从代码中提取出22个加密数字:
83, 116, 111, 96, 112, 99, 125, 78, 87, 103, 57, 110, 104, 82, 102, 106, 113, 32, 123, 125, 115, 104
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}")
运行脚本得到最终flag:
Sumctf{I_n3ed_hea1ing}
在程序中输入这个flag,会显示"Heros never dieVictory",验证通过!
本文作者:晏秋
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!