2025年4月15日23:59
实践是检验逆向工程能力的重要手段。本次PJ旨在通过解决精心设计、难度适中的逆向题,来帮助大家巩固之前所学的逆向工程知识和技能。
本次我们一共准备了6道题目,每道题都会包含一个或多个答案(称为flag)。同学们需要根据题目描述,独立解题。在完成解题后,需要编写解题报告,介绍完整的解题思路,并展示解出的Flag。
本次实验根据报告打分,每道题的解题报告分值均为100分,其中部分题目对解题报告有特殊阅读,请仔细阅读要求。除了题目特定的要求外,我们对解题报告还有以下通用要求:
以下是Markdown格式的解题报告,最终报告需提交PDF版本。
注意:在导出PDF时,需要检查PDF内容的完整性,避免报告内容被截断。
x# 解题报告
* 姓名: 小张
* 学号: xxx
## 题目一:Guess Master
详细的解题步骤...
* flag1:
* flag2:
## 题目二: ...
以下是本次PJ的逆向题清单及题目描述。
题目描述: 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调试命令:
xxxxxxxxxx
qemu-aarch64 -L /usr/aarch64-linux-gnu -g 1234 ./.out
xxxxxxxxxx
gdb-multiarch -q --nh -ex 'set architecture aarch64' -ex 'file a.out' -ex 'target remote localhost:1234' -ex 'layout split' -ex 'layout regs'
题目描述: magic
是一个aarch64下的ELF可执行程序,它能够通过魔法将PNG文件进行加密。我们在Alice和Bob的通讯记录中截获了一个加密过后的PNG文件magic.png.magic
,你能帮助我们恢复出原始图片中的内容吗?解密图片内容即可获取本题flag。
评分说明:
magic
对图片的加密逻辑;magic
的具体加密函数逻辑并写出其对应的解密函数逻辑;magic.png
被加密时所使用的magic number
;运行方法: 在虚拟机命令行运行qemu-aarch64-static -L /usr/aarch64-linux-gnu ./magic [原始图片内容]
,运行后会产生一个加密后的图片,magic.png.magic
就是这么产生的。
注意: 解出正确的PNG文件头,但图片是坏的(包括但不限于图片查看器无法打开PNG文件,图片查看器显示画面中没有出现图片和flag),说明你解题有误,请检查解密逻辑和magic number
是否正确。
题目描述: mathgame
是一个aarch64下的ELF可执行程序。该程序接收一个flag作为输入。若输入正确的flag,程序会输出:Congratulations! The flag is solved correctly.
评分说明:
注:在题目中藏了一个hint,能够帮助大家大幅减少分析难度。
运行方法: 在虚拟机命令行运行qemu-aarch64-static ./mathgame
,运行后程序会提示你输入数字。具体输入什么数字就要通过逆向求解啦。
题目描述: 成为PoREMon训练大师吧!本题提供了一个任天堂GBA游戏的ROMporemon.gba
,请你逆向和游玩游戏,获取两个藏于其中的flag。
评分说明:本题有2阶段,每个阶段都有一个flag,格式为flag{xxx...xxx}
运行方法:
注:poremon.gba
格式特殊,反编译器可能无法正常加载该程序;因此我们提供了poremon.elf
程序,该程序是arm32位ELF程序,可以用反编译器加载和分析,但不能被正常运行。
提示:以下是一些GBA模拟器相关的宏定义。KEY_A
和KEY_B
的默认按键分别为X
和Z
,KEY_UP
、KEY_DOWN
、KEY_LEFT
、KEY_RIGHT
的默认按键为键盘方向键上下左右。
xxxxxxxxxx
// 默认按键为X
// 默认按键为Z
题目描述: puzzle
程序是一个aarch64的ELF程序。输入你的flag通过程序检查。本题无需对二进制文件进行修改。flag会随学号不同而不同。
提示:flag格式为 flag{[stuid]xxx......xxx},即外面用flag包围,内部开始11位为你的学号。余下的是一些字符。
评分说明:
运行方法: 在虚拟机中执行qemu-aarch64-static ./puzzle
。程序会提示你输入flag: Please input your flag:
题目描述: maze
程序是一个aarch64的ELF程序,其中蕴含了一个迷宫游戏,逆向程序找到正确的flag。flag格式为flag{xxx...xxx}
评分说明:
运行方法: 在虚拟机中执行qemu-aarch64-static ./maze
。在漫~长~的等待后进入游戏。