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

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

西普CTF-whatamitoyou-以夕阳落款

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

西普CTF-whatamitoyou-以夕阳落款

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

西普CTF-whatamitoyou-以夕阳落款

根据搜索到的歌曲,得到下一句歌词是“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?

 

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

西普CTF-whatamitoyou-以夕阳落款
西普CTF-whatamitoyou-以夕阳落款

第三句歌词是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。

西普CTF-whatamitoyou-以夕阳落款

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

完整的输入为CBDABCADBCCABBABBABACBCCABDADBABABB

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

西普CTF-whatamitoyou-以夕阳落款

参考的writeup:

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

Flag:

温馨提示: 此处内容需要评论本文后刷新才能查看,支付2元即可直接查看所有Flag。

小广告:关于获取西普实验吧所有Writeup请点击这里查看索引

查看所有Flag需要付费,需要获取所有Flag的童鞋请访问这里成为付费用户,可以自助把自己的注册邮箱加入网站白名单,即可免回复看到本站所有Flag

Flag大全地址:所有Flag

PS:本站不是实验吧的官方站点,纯粹是个人博客,收取Flag费用仅是维持服务器费用,做站不易,且行窃珍惜,如果喜欢我的博客,愿意捐赠的,可以扫描下面的二维码

微信二维码:
支付宝二维码: