phase_3

Hello world,hello blog!

Posted by 吴柚 on March 29, 2019

phase_3

汇编指令

  • jg 有符号大于则跳转
  • ja 无符号大于则跳转
  • je 等于则跳转

    解题过程

  1. 首先弄清楚要输入的字符串是什么类型,使用断点功能,得到解题所需的字符分别为整型、字符、整型共三个字符。

  1. 按照解题惯例,直接跳转到call 8048860 __isoc99_sscanf@plt处继续研究代码。

  2. 由此段代码猜测,第一个数是个大于等于2、小于等于7的数。

  1. 继续向下分析。jmp *0x804a260(,%eax,4)调用了一个switch case开关。每一段00标志下都为一段case,共6段。

  2. 查看了所有的case段后,发现最后字符应该都是存储到%eax里面,故因此往回找线索。

  3. 发现两个指令,分别是 mov $0x75,%eax和cmpl $0x1d7,0x2c(%esp)

  • 前者是16进制数,猜测其存储的就是那个字符,并猜测是ASCII码,查表后发现是u。
  • 后者决定了如果不等于0x1d7,则直接爆炸,故后者为第三个整型,转化为十进制为471.
  • 由于之前猜测第一个数的范围是2-7,故一个个进行尝试,发现全部错误,因此猜测错误。
  1. 由于三个数分别是整型、字符、整型,因此在上面两个指令前寻找线索,发现jmp *0x804a260(,%eax,4)指令中括号里面是三个数,可以与要输入的结果对应上,并且第一个数没有进行声明,由于整型的默认值为0,因此,猜测第一个值为0,故进行尝试。

  2. 结果正确。

再考虑其他方法验证第一个数,使用断点功能找到8048c52点处eax寄存器内的值。