WhaleCTF-crackme(ais3)

  • 下载下来文件以后发现是一个64位ELF文件。
  • 64位IDA载入后查看主函数,F5查看伪代码。

  • 需要在执行的时候传入参数。
1
if ( (unsigned int)verify(argv[1], argv, envp) )
  • 这是一个关键判断,跳进去看看。

  • 双击encrypted 进入对应数据段。

  • 根据题意,如果所传参数在执行对应操作以后与encrypted数据段的数据对应相等,则提示成功。如果有一处不等,则提示错误。

  • 写得算法如下。

  • 但是经过调试,发现有几个位置无法进行输出,如2 、4 、 6 、7等。
  • 苦思冥想无果以后请教大佬。

  • 一句这TM用了溢出, 点醒了梦中人。

  • 因为算法中执行了位操作,所以极有可能导致溢出,所以算法有缺陷。

  • 在后面加上&0xff以后, 运行结果便正常了。

0xff表示取后两位。 例如: 0x1d1&0xff 就是0xd1。