Skip to content

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,分析用 gcc clang 编译出的两个可执行文件,通过反编译结果及汇编代码,在报告中简要分析两者对代码中某些语句的具体实现

  • 两种编译器对 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 的交互过程,且需要在自己理解的基础上编写报告