🗒️从CTF.Show签到题入手尝试逆向题
2023-5-3
| 2023-6-22
0  |  Read Time 0 min
type
status
date
slug
summary
tags
category
icon
password

gdb 调试

首先给执行权限 chmod +x re1,然后进入 gdb re1。由于没有代码,所以这里只用 layout asm 即可。

解法

做这种题有几种解法,我们浅浅执行一下,发现他是让我们比较字符串,然后才返回flag。因为我们不知道字符串,在观赏汇编代码以后,发现有几种方法来解决:
  • 修改 strcmp 的返回值
  • 修改标志寄存器的值
  • 直接读取比较的字符串

修改strcmp的返回值

首先用 b main 给main函数加个断点,然后ni走到strcmp后面,等到call完strcmp后,会test一次eax,我们把eax的结果改为0(eax是strcmp的返回值,为0的时候表明相等)
notion image
此时eflags中有ZF,表明返回两个strcmp的值是相等的,继续往下执行,可以得到flag

修改标志寄存器的值

直接设置ZF为1,使其不通过jmp
直接运行到main+91,然后运行 set $eflags |= (1 << 6)
然后n,获得flag

直接读取比较的字符串

通过x/s或x/32c或x/32x,可以分别读取某个寄存器所在地址的字符串、字符和十进制,这里我们用x/s
notion image
得到flag~

致谢

💡
U2F sdGVkX1
 
 
学习思考
  • 学习
  • 逆向
  • CTF
  • Makefile 规则与语法学习理解栈溢出并使用 gdb 来调试 C 语言程序
    • GitTalk
    Catalog