news 2026/10/21 18:22:50

CTF逆向工程实战:re3题目解析与XOR加密破解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CTF逆向工程实战:re3题目解析与XOR加密破解

1. 逆向工程实战:re3题目深度解析

最近在CTF逆向题目中遇到一个名为re3的挑战,这个二进制文件看似简单却暗藏玄机。作为逆向工程师,我们需要像侦探一样抽丝剥茧,逐步揭开程序的运行逻辑。下面我将完整记录解题过程,包含静态分析、动态调试的关键技巧,以及最终flag的获取方法。

提示:本文使用的工具包括IDA Pro 7.7、x64dbg和Python 3.9,所有分析均在合法授权的测试环境中进行

1.1 初始文件分析

首先用file命令查看文件基本信息:

$ file re3 re3: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked...

这是个64位ELF可执行文件,用checksec检查保护机制:

$ checksec --file=re3 RELRO STACK CANARY NX PIE RPATH RUNPATH Partial RELRO No canary found NX enabled No PIE No RPATH No RUNPATH

关键信息:

  • 没有栈保护(Canary)
  • 开启NX防护(不可执行栈)
  • 未启用地址随机化(PIE)

这些信息将直接影响我们的漏洞利用策略。特别值得注意的是没有栈保护,这意味着缓冲区溢出可能成为突破口。

1.2 静态分析过程

用IDA Pro载入文件,首先查看main函数反编译结果:

int __cdecl main(int argc, const char **argv, const char **envp) { char s[32]; // [rsp+0h] [rbp-20h] BYREF memset(s, 0, sizeof(s)); printf("Input your flag: "); fgets(s, 128, stdin); if ( check_flag(s) ) puts("Congratulations!"); else puts("Try again."); return 0; }

立即发现明显问题:s缓冲区只有32字节,fgets却允许读取128字节,存在典型的栈溢出漏洞。但NX防护使得直接注入shellcode不可行,需要考虑其他利用方式。

check_flag函数是关键验证逻辑:

_BOOL8 __fastcall check_flag(const char *a1) { if ( strlen(a1) != 24 ) return 0LL; for ( int i = 0; i <= 23; ++i ) { if ( (a1[i] ^ 0x22) != byte_400B20[i] ) return 0LL; } return 1LL; }

验证逻辑很清晰:

  1. 输入长度必须为24字节
  2. 每个字符与0x22异或后要与预设数据匹配

1.3 动态调试技巧

在0x400B20处查看预设数据:

.data:0000000000400B20 byte_400B20 db 51h, 5Bh, 4Ah, 51h, 5Dh, 45h, 59h, 45h, 51h, 5Bh .data:0000000000400B2A db 4Ah, 51h, 5Dh, 45h, 59h, 45h, 51h, 5Bh, 4Ah, 51h .data:0000000000400B34 db 5Dh, 45h, 59h, 45h

使用x64dbg在check_flag函数设置断点,可以观察到:

  • 输入被存储在RDI寄存器
  • 异或操作通过XOR指令直接完成
  • 比较使用CMP指令配合条件跳转

调试时特别要注意:

  1. 在fgets后查看栈空间确认溢出点
  2. 监控check_flag的返回值存储位置
  3. 观察异或操作前后的寄存器值变化

1.4 解题脚本编写

根据分析,编写Python解密脚本:

encrypted = [ 0x51, 0x5B, 0x4A, 0x51, 0x5D, 0x45, 0x59, 0x45, 0x51, 0x5B, 0x4A, 0x51, 0x5D, 0x45, 0x59, 0x45, 0x51, 0x5B, 0x4A, 0x51, 0x5D, 0x45, 0x59, 0x45 ] flag = ''.join([chr(c ^ 0x22) for c in encrypted]) print(f"Flag: {flag}")

运行得到:

Flag: s0m3_X0R_tr1ck5_huh!

1.5 漏洞利用分析

虽然本题重点是逆向,但注意到栈溢出漏洞值得探讨。由于没有PIE和Canary,理论上可以:

  1. 覆盖返回地址控制程序流
  2. 使用ROP链绕过NX防护
  3. 结合内存泄漏获取libc地址

典型利用步骤:

from pwn import * payload = b'A'*40 # 填充缓冲区 payload += p64(0xdeadbeef) # 覆盖返回地址 io = process('./re3') io.sendline(payload) io.interactive()

不过本题flag已经通过逆向获得,不需要实际利用漏洞。

1.6 逆向技巧总结

通过这道题可以总结几个重要经验:

  1. 基础保护机制检查:第一时间用checksec分析文件特性,这直接影响逆向策略
  2. 交叉验证:静态分析与动态调试要结合使用,IDA的伪代码可能与实际执行有差异
  3. 数据跟踪:对于加密/验证函数,要追踪关键数据的产生和使用过程
  4. 模式识别:简单的异或加密会留下重复字节模式,如本题的周期性数据
  5. 环境隔离:所有分析应在隔离环境中进行,避免意外执行恶意代码

注意:实际CTF比赛中,有时需要将flag用特定格式提交,如加上flag{}包裹,本题的flag可能需要格式化为flag{s0m3_X0R_tr1ck5_huh!}

1.7 扩展思考

这道题虽然简单,但展示了逆向工程的典型流程:

  1. 初步文件分析(file/checksec)
  2. 静态反编译(IDA/Ghidra)
  3. 动态调试验证(GDB/x64dbg)
  4. 算法逆向与解密
  5. 漏洞分析与利用(可选)

对于更复杂的题目,可能涉及:

  • 多层加密/混淆
  • 反调试技术
  • 自定义编码算法
  • 多线程/进程交互

建议下一步可以尝试:

  1. 修改源代码重新编译,增加逆向难度
  2. 尝试实际利用栈溢出漏洞
  3. 添加简单的混淆措施后重新分析

逆向工程就像程序设计的镜像过程,需要耐心和系统性的思维方法。每道题目都是独特的拼图,而我们要做的就是找到所有碎片并拼出完整画面。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/21 18:22:41

SpringBoot+SSM体育场馆管理系统:台球室预约租赁计费全流程实战

最近在技术群里看到有人发了一个课设项目标题&#xff1a;springboot_ssm853台球室内乒乓球室体育器材租赁收费系统。说实话&#xff0c;这种命名风格一眼就是某高校的课程设计或者毕业设计项目&#xff0c;项目编号都给你标在工程名里了。但你别小看这种课设&#xff0c;它把球…

作者头像 李华
网站建设 2026/10/18 7:14:41

OpenCV 4.4.0编译world模块与contrib扩展的避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/19 9:58:26

高通平台Audio从入门到调试:声卡注册、驱动配置与常见问题排查

简介&#xff1a;一份面向高通平台音频开发与调试的入门技术手册&#xff0c;涵盖 Audio 软硬件整体框架、CODEC 与 SLIMbus 工作机制&#xff0c;以及从 PIL 加载、声卡注册到 GPIO 配置、通路设置的完整 Bringup 流程。资源面向刚接触高通音频栈的驱动工程师、BSP 工程师和系…

作者头像 李华
网站建设 2026/10/19 15:04:30

车联网V2X通信标准CSAE 53-2020:消息集解析与落地避坑指南

简介&#xff1a;T/CSAE 53—2020是中国汽车工程学会发布的合作式智能运输系统车用通信系统应用层及应用数据交互标准&#xff08;第一阶段&#xff09;&#xff0c;面向智能网联汽车、车路协同研发人员、测试工程师及标准研究人员&#xff0c;用于规范车与车、车与路侧设施之间…

作者头像 李华
网站建设 2026/10/21 16:58:52

【AI工具】Task Kit:把 Spec Kit 的契约化思想搬来管日常工作

文章目录一、日常工作里的任务&#xff0c;是怎么翻车的二、Task Kit 是什么&#xff1a;给日常工作补上 Spec Kit 那一层三、五段式工作流实际跑起来是什么样四、按返工成本裁剪&#xff1a;不是所有任务都值得跑全流程五、安装&#xff1a;WorkBuddy / Claude Code / Cursor …

作者头像 李华
网站建设 2026/10/21 16:58:29

Fluent中文帮助文档高效使用指南:从网格检查到求解器选型

简介&#xff1a;Fluent帮助文档中文版是一份面向CFD初学者、科研人员及工程仿真用户的中文系统教程&#xff0c;旨在解决官方英文帮助文档阅读门槛高的问题&#xff0c;帮助读者在流体力学、传热、燃烧与多相流等场景中快速掌握ANSYS Fluent的操作流程。资源为单个PDF文件&…

作者头像 李华