0x01.查壳和查看程序的详细信息
    image.png
    32位 ELF文件
    0X02.使用IDA对程序进行分析
    image.png
    查看字符串并没有与flag有关的字符串,直接分析main函数
    image.png
    通过观察,可以判断authenticate这个函数与flag有关,其中有个decrypt函数,应该用来生成flag的,将生成的结果返回给s2,之后将我们的输入与s2(flag)比较,接下来就去分析flag这个函数
    image.png
    虽然不是特别明白flag是怎么生成的,但是可以看到dest肯定是用来存储flag的,因为这个函数是将flag的值返回给s2的,那么他的返回值dest此时肯定已经是正确的flag了,
    这里有两种思维方式:
    一,直接分析decrypt函数的运算逻辑,写脚本,自己将flag生成出来
    二,用动态调试直接查看flag
    这里我先用第一种
    之后直接查看decrypt函数的汇编代码,看flag会被存储在哪个地方
    image.png
    这里选择从下往上分析,因为函数返回的时候flag已经生成完毕,准备返回给s2了,这个时候在函数要释放空间之前,肯定会将返回值保存起来(以前听师兄说过好像一般都会放在eax中,这个有点忘记了,还是多做点题积累经验吧)
    0x03.用GDB进行调式
    image.png
    选择在函数结束的地方下断点,因为此时eax中保存的会是flag的值,
    用x/6ws $eax查看寄存器的值(PS:x/ 命令要好好学一下,不太会用)
    image.png

    成功!!!

    这里再补充一下x命令吧

    x/200wx $eax
    x:就是用来查看内存中数值的,后面的200代表查看多少个,wx代表是以word字节查看看,$eax代表的eax寄存器中的值

    x/6sw $eax
    6:显示6行数据
    s:字符串形式
    w:word(4字节)形式