实验吧whatamitoyou writeup

根据题目和前期出现的字符串,可以搜索到一首歌My Best Friends InThe World(What Am I To You?)。对比这首歌可以看出我们得到的歌词顺序是乱序。

一大堆赋值结束后,在0x401890处把第一句歌词的内存地址放到了[rbp-0x8]的位置,0x00007ffd54ce2290(为了书写方便,之后不写7ffd54ce了)。


取了输入的第一个字符,存到了[rbp-0x11],比较是否为0

 

从0x004018db到0x4018f1,根据[输入的第一个字符-65+32]得到了下一句歌词。下一句歌词的地址是存储在内存地址rax+rdx*0x8处的。[rbp-0x8]存储的是第一句歌词的地址,这里有一个mov rax,[rbp-0x8]的操作,把第一句歌词的地址给了rax。rax=0x2290

实验吧whatamitoyou writeup_第1张图片

根据搜索到的歌曲,得到下一句歌词是“I should have just told you”,查看它所在位置。从下图中可以看到,0x1b70处存储的是这句歌词,而存储这个地址的内存有两个,一个是0x2268另一个是0x23a0。也就是说rax+rdx*0x8=0x2268 or 0x23a0,而已知rax=0x2290,因此rax+rdx*0x8=0x23a0,由此推断出rdx=0x22=34。

       rdx=输入-65+32,因此输入的第一个字符是67=‘C’。

       若输入的第一个字符为A,则得到0x2390->what I lost

       若输入的第一个字符为B,则得到0x2398->what am I to you

       若输入的第一个字符为D,则得到0x23a8->Am I a joke,your knight,oryou brother?

      

       根据下一句歌词所在的位置可以推断出相应的输入。

实验吧whatamitoyou writeup_第2张图片

      

       第三句歌词是What I lost... was a piece of your hair!在Ishould have just told you下方有四句歌词。What I lost是第二句,因此输入的第二个字符是B。

       whatI lost的下一句歌词是Now it’s gone;goneforever,在第四句,因此输入的第三个字符是D。

实验吧whatamitoyou writeup_第3张图片

依次类推,得到剩下的输入。

完整的输入为CBDABCADBCCABBABBABACBCCABDADBABABB

加上这个参数运行程序得到flag


参考的writeup:

http://sibears.ru/labs/TJCTF-2016-whatamitoyou/

你可能感兴趣的:(writeup)