Skip to content

Rev Lab 2:动态调试 / 异架构逆向

本节 Lab 分为必做和选做部分:

本次 lab ddl 在发布两周以后即 7 24 日晚 23:59,请注意安排时间。在做题过程中遇到任何问题,都请及时联系,对于共性问题会考虑继续放出 hint。私聊提问时请务必说明你目前的进度及已经尝试的方法等。

Challenge

我们本节课主要还是以许多例子讲了逆向的基本过程和一些工具的使用,同时介绍了一些进阶的逆向内容,如动态调试、x86_64 之外的架构逆向及其他语言的逆向。

这一部分主要考验你对课堂内容的掌握,以及对逆向工具的熟练使用。

Challenge 1: static-1 (20%)

一个简单的静态链接程序,我们在课上展示了如何使用 IDA 分析其结构。

  • 这个程序采用的加密方式是什么?这种加密方式的特点是什么?有什么缺点?(10%)
  • 请完成题目,在比赛平台提交 flag,并在实验报告中写出你的逆向解题过程和结果。(10%)

Challenge 2: strip (25%)

也是较为简单的静态链接,不过我们使用了 strip 命令来去除符号表。

  • 这个程序采用的加密方式是什么?这种加密方式的特点是什么?有什么缺点?(10%)
  • 请完成题目,在比赛平台提交 flag,并在实验报告中写出你的逆向解题过程和结果。(15%)

Challenge 3: exchange (25%)

我们在课上展示了当遇到不认识的函数时,通过 lddstrace 来分析程序的依赖和行为。这个程序使用 OpenSSL 库来进行一些密码学操作。你需要了解 X25519 密钥交换算法,以及 OpenSSL 的使用。

请完成题目,在比赛平台提交 flag,并在实验报告中写出你的逆向解题过程和结果。如果无法解出题目,也请将你的尝试写在报告中(你已经学到的相关知识也可以写进去,我们会根据你的进度给部分分。

Challenge A: ZJU dorm (30%)

我们在课上提到,非 C 系编译型语言可能并不遵循 __libc_start_main 的规范。请你尝试分析这个 Golang 编写的程序。

请完成题目,在比赛平台提交 flag,并在实验报告中写出你的逆向解题过程和结果。如果无法解出题目,也请将你的尝试写在报告中(你已经学到的相关知识也可以写进去,我们会根据你的进度给部分分。

Challenge B: apk1.67 (40%)

Android 逆向基本是关于 Java 逆向的。我们在课上展示了用 Bytecode Viewer 来反编译 APK。当然,也可以使用 Jadx

请完成题目,在比赛平台提交 flag,并在实验报告中写出你的逆向解题过程和结果。如果无法解出题目,也请将你的尝试写在报告中(你已经学到的相关知识也可以写进去,我们会根据你的进度给部分分。

Hint

这道题也需要你有一定的 misc 知识。这个 APK 不能被解压,这是为什么呢?

Challenge C: minus10 (45%)

我们上课提到,逆向不仅仅是 x86_64 的逆向,还有其他架构的逆向。这个题目是一个 MSP430 的逆向题目。鉴于我们仍然对其他架构的逆向知识了解不多,你可以尝试按下面的步骤逐步回答问题。

  • 请用 IDA Ghidra 成功加载所给出的 firmware.hex,展示你得到的结果。MSP430 是大端还是小端?(10%)
  • 请展示这个程序判断 flag 是否正确的逻辑。(10%)
  • 请完成题目,在比赛平台提交 flag,并在实验报告中写出你的逆向解题过程和结果。(15%)
  • minus10.sr 文件中隐藏着什么信息?我们在课上提到其他文件都是从这个文件中提取出来的,你可以尝试做到这一点吗?(10%)

Hint

MSP430 的指令集较为简单,因此即使 IDA 无法直接将其反编译为 C 代码,你也可以通过观察汇编代码来理解程序的逻辑。一个程序判断 flag 是否正确的逻辑都是相通的。