[Reverse] MOECTF2025 逆向工程入门指北

👁 0 views
📅 2026-4-21 ⏱ 4 min 🏆 MOECTF2025
[Reverse] MoeCTF 逆向工程入门指北 | WP

[Reverse] MoeCTF 逆向工程入门指北

纯GDB调试版(无IDA)

Reverse / GDB调试 / 寄存器Hook 难度:简单

0x00 题目分析

附件为 ELF 64 位程序,逻辑是猜数字游戏:程序生成 0~99 随机数,允许猜 10 次,全部猜对输出 Flag。

0x01 静态反汇编分析

直接使用objdump命令提取主函数 查看 main 函数定位核心逻辑:

objdump -d attachment | sed -n '/<main>:/,/^$/p'

关键比较逻辑:

40484b:       8b 85 c4 d8 ff ff       mov    -0x273c(%rbp),%eax    # 用户输入
404851:       39 85 cc d8 ff ff       cmp    %eax,-0x2734(%rbp)    # 与正确答案比较
404857:       75 46                   jne    40489f               # 错误跳转

正确答案存放在:$rbp-0x2734

0x02 GDB 动态调试

设置 Intel 汇编格式,并在比较指令下断点:

(gdb) set disassembly-flavor intel
(gdb) b *0x404851

运行程序:

(gdb) run

随便输入数字触发断点,查看内存中的正确答案:

(gdb) x/wd $rbp-0x2734
0x7fffffffa6dc: 73

成功获取随机数,证明可以直接从内存读取答案。

0x03 GDB 自动化脚本

编写断点脚本command1,每次自动将 eax 修改为正确答案,实现 10 次连对:

(gdb) command 1
Type commands for breakpoint(1), one per line.
End with a line saying just "end".
set $eax = *(int*)($rbp - 0x2734)
silent
printf ">> Hooked! Correct value was: %d\n", $eax
continue
end

0x04 运行获取 Flag

重新运行程序,每次随便输入数字,脚本自动修正:

(gdb) run

连续猜对 10 次后输出 Flag:

Continuing.
You are right!
The flag is moectf{open_your_IDA_and_start_reverse_engineering!!}.
Thanks for your playing!

0x05 Flag

moectf{open_your_IDA_and_start_reverse_engineering!!}