Project 1 逆向工程实践

 

0. 截止时间

2025年4月15日23:59

 

1. 任务概览

实践是检验逆向工程能力的重要手段。本次PJ旨在通过解决精心设计、难度适中的逆向题,来帮助大家巩固之前所学的逆向工程知识和技能。

本次我们一共准备了6道题目,每道题都会包含一个或多个答案(称为flag)。同学们需要根据题目描述,独立解题。在完成解题后,需要编写解题报告,介绍完整的解题思路,并展示解出的Flag。

 

2. 评分标准

本次实验根据报告打分,每道题的解题报告分值均为100分,其中部分题目对解题报告有特殊阅读,请仔细阅读要求。除了题目特定的要求外,我们对解题报告还有以下通用要求:

  1. 逻辑清晰,步骤完整地介绍解题过程,必要时可以结合代码、截图展开说明。
  2. 清晰地展示题目flag。
  3. 严禁抄袭flag

 

3. 报告模版

以下是Markdown格式的解题报告,最终报告需提交PDF版本

注意:在导出PDF时,需要检查PDF内容的完整性,避免报告内容被截断。

 

4. 逆向题清单

 

以下是本次PJ的逆向题清单及题目描述。

 

题目一:Guess Master

题目描述: guessMaster是一个aarch64下的ELF可执行程序。该程序的预期行为依次接收两个数字,并进行校验,但是由于程序编写的逻辑错误,该程序无法执行到预期逻辑,即无法输出Congratulations! You win!字符串。请你分析程序,使程序输出目标字符串,并在报告中详细说明求解过程。

评分说明

运行方法: 在虚拟机命令行运行qemu-aarch64 -L /usr/aarch64-linux-gnu ./guessMaster-arm.out,会输出Direct run is blocked. Game over.,你需要结合静态分析和使用GDB修改程序运行逻辑来使得最后输出Congratulations! You win!字符串。

 

GDB调试命令

 

题目二:HiddenPNG

题目描述: magic是一个aarch64下的ELF可执行程序,它能够通过魔法将PNG文件进行加密。我们在Alice和Bob的通讯记录中截获了一个加密过后的PNG文件magic.png.magic,你能帮助我们恢复出原始图片中的内容吗?解密图片内容即可获取本题flag。

评分说明

运行方法: 在虚拟机命令行运行qemu-aarch64-static -L /usr/aarch64-linux-gnu ./magic [原始图片内容],运行后会产生一个加密后的图片,magic.png.magic就是这么产生的。

注意: 解出正确的PNG文件头,但图片是坏的(包括但不限于图片查看器无法打开PNG文件,图片查看器显示画面中没有出现图片和flag),说明你解题有误,请检查解密逻辑和magic number是否正确。

 

题目三:MathGame

题目描述: mathgame是一个aarch64下的ELF可执行程序。该程序接收一个flag作为输入。若输入正确的flag,程序会输出:Congratulations! The flag is solved correctly.

评分说明

:在题目中藏了一个hint,能够帮助大家大幅减少分析难度。

运行方法: 在虚拟机命令行运行qemu-aarch64-static ./mathgame,运行后程序会提示你输入数字。具体输入什么数字就要通过逆向求解啦。

 

题目四:PoREMon

题目描述: 成为PoREMon训练大师吧!本题提供了一个任天堂GBA游戏的ROMporemon.gba,请你逆向和游玩游戏,获取两个藏于其中的flag。

评分说明:本题有2阶段,每个阶段都有一个flag,格式为flag{xxx...xxx}

运行方法:

  1. 在电脑上下载mGBA模拟器
  2. 打开mGBA模拟器,选择File ➢ Load Rom ➢ 选择gba文件即可加载运行。

poremon.gba格式特殊,反编译器可能无法正常加载该程序;因此我们提供了poremon.elf程序,该程序是arm32位ELF程序,可以用反编译器加载和分析,但不能被正常运行。

提示:以下是一些GBA模拟器相关的宏定义。KEY_AKEY_B的默认按键分别为XZKEY_UPKEY_DOWNKEY_LEFTKEY_RIGHT的默认按键为键盘方向键上下左右。

 

题目五:Puzzle

题目描述: puzzle程序是一个aarch64的ELF程序。输入你的flag通过程序检查。本题无需对二进制文件进行修改。flag会随学号不同而不同。

提示:flag格式为 flag{[stuid]xxx......xxx},即外面用flag包围,内部开始11位为你的学号。余下的是一些字符。

评分说明

运行方法: 在虚拟机中执行qemu-aarch64-static ./puzzle。程序会提示你输入flag: Please input your flag:

 

题目六:SeparatedMaze

题目描述: maze程序是一个aarch64的ELF程序,其中蕴含了一个迷宫游戏,逆向程序找到正确的flag。flag格式为flag{xxx...xxx}

评分说明

运行方法: 在虚拟机中执行qemu-aarch64-static ./maze。在漫~~的等待后进入游戏。