Rev Lab 1:Rev 基础 ¶
本节 Lab 包含 3 道题目,总分为 115 分,多出的 15 分作为本节 Lab 的 bonus
Task 1:rev_begin (57%)¶
Compilation (24%)¶
平台上提供了 rev_begin.cpp 文件,你需要对其进行编译,复现课上讲的 gcc 和 clang 的编译执行流程,通过截图等方式在报告中写明:
- (如未安装)在 linux 系统中安装 gcc 和 clang 编译工具
- 使用 g++ 对代码进行预处理(宏展开)
- 使用 g++ 将代码编译为汇编代码
- 使用 g++ 将代码汇编(不链接)为目标文件
- 使用 g++ 进行链接,生成可执行文件,并尝试运行
- 使用 clang++ 生成文本格式的 LLVM IR
- 使用 clang++ 生成二进制形式的 LLVM Bitcode
- 使用 clang++ 生成可执行文件,并尝试运行
Analyze and Tool Use (33%)¶
你可以先根据给出的代码,逆推出 flag
然后,使用静态分析工具(如 IDA 或者 ghidra
- 两种编译器对
std::views::iota分别是如何处理的 - 两种编译器如何实现 lambda 表达式,是否有较大区别
接着,熟悉一下动态调试工具(如 gdb 或者 IDA 动态调试)的操作,你可以输入正确 flag 或者 随机字符串,尝试对程序进行动态调试
- 报告中可以配上截图,说明自己使用的命令和快捷键,以证明自己已经了解了动态调试工具的使用方法
- 报告中可以选取感兴趣的内容进行详细的动态调试的记录和说明
Task 2:rev_more (31%)¶
本次作业提供了一份 go 语言编写的 linux 可执行文件,请尝试通过逆向解出此题,没有解出也请尽量详细说明自己的尝试过程,会根据过程给予一定分数
- 在报告中详细分析自己的逆向过程,并说明 flag 的校验逻辑 (26%)
- 编写代码,连接题目远程环境并解出 flag (5%)
- 推荐使用 LLM 辅助解题,但需要以截图等方式给出自己与 LLM 的交互过程,且需要在自己理解的基础上编写报告
Task 3:rev_again (27%)¶
本次作业提供了一份 windows gui 可执行文件,请尝试通过逆向解出此题,没有解出也请尽量详细说明自己的尝试过程,会根据过程给予一定分数
- 在报告中详细分析自己的逆向过程,并说明 flag 的校验逻辑 (22%)
- 编写代码,解出 flag (5%)
- 推荐使用 LLM 辅助解题,但需要以截图等方式给出自己与 LLM 的交互过程,且需要在自己理解的基础上编写报告