Alikas-0x01
题目:实验吧whatamitoyou

用IDA打开,进入main函数,F5。(F5重度依赖者,菜了)

分析可知,memset语句后数据应为数组。对每组都按快捷键Y修改类型,改为char a[0x128]
[记得从后往前改(即从v5开始)]

 memset(&v5, 0, 0x128uLL);v5 = 2334397743343431513LL;v6 = 2338620985787316589LL;v7 = 2338323056846008934LL;v8 = 8583972389067452009LL;v9 = 199253324399LL;v3 = &v10;memset(&v10, 0, 0xD8uLL);
//修改后memset(v5, 0, sizeof(v5));strcpy(v5, "You are my best friends in the world.");//这里字符转换了,快捷键Rv3 = &v5[40];memset(&v5[40], 0, 0xD8uLL);*(_DWORD *)&v5[288] = 3;

根据题目提示“你会唱歌吗”和题目内出现的字符串,可以搜索到一首歌My Best Friends InThe World(What Am I To You?)。对比歌词可知,题目内的歌词是乱序的。

修改类型后可看到后面的赋值语句发生变化。分析可知,该数组内,前256个字节存储歌词,后用存储三个指针,分别指向三句不同的歌词。

 *(_QWORD *)&v5[256] = &v245;*(_QWORD *)&v5[264] = &v237;*(_QWORD *)&v5[272] = &v86;*(_QWORD *)&v5[280] = &v214;

创建数据结构lyric,内含两个成员,一个是char a[256],储存歌词;一个是lyric *q[3],存放3个指向下一句歌词所在的数据结构的地址。[插入数据结构在IDA的Structures窗口中,插入教程就在窗口内注释部分]

00000000 ; Ins/Del : create/delete structure
00000000 ; D/A/*   : create structure member (data/ascii/array)
00000000 ; N       : rename structure or structure member
00000000 ; U       : delete structure member
00000000 ; [00000018 BYTES. COLLAPSED STRUCT Elf64_Sym. PRESS CTRL-NUMPAD+ TO EXPAND]
00000000 ; ---------------------------------------------------------------------------
00000000
00000000 lyric           struc ; (sizeof=0x118, mappedto_6)
00000000 a               db 256 dup(?)
00000100 q               dq 3 dup(?)             ; offset
00000118 lyric           ends
00000118
00000000 ; [00000018 BYTES. COLLAPSED STRUCT Elf64_Rela. PRESS CTRL-NUMPAD+ TO EXPAND]
00000000 ; [00000010 BYTES. COLLAPSED STRUCT Elf64_Dyn. PRESS CTRL-NUMPAD+ TO EXPAND]

对数组进行再一次修改类型lyric a,修改后如下:

 memset(&v5, 0, 0x128uLL);strcpy(v5.a, "You are my best friends in the world.");v3 = &v5.a[40];memset(&v5.a[40], 0, 0xD8uLL);

接下来分析计算flag算法

v80 = &v41; //&41 为第一句歌词地址v79 = 1;v78 = 0;
while ( 1 ){v77 = *a2[1];//a2即为输入的字符串if ( !v77 )break;if ( v79 & 1 )  v78 *= v79;elsev78 /= v79;v78 += (v77 - 32) * *&v80[1].a[8]; v80 = *&v80->a[8 * (v77 - 65 + 32LL)];// 根据[8*(输入的字符-65+32)]得到了下一句歌词++v79;v3 = a2[1] + 1;a2[1] = v3;}if ( v80 == &v65 )//由这句猜测,将歌词从第一句开始到最后一句即可得flag{printf("Your password is tjctf{", a2, v3, a2);while ( v78 ){v76 = v78 % 16;v78 /= 16;putchar(v76 + 97);}puts("}");}else{puts("Nope.");}

由上述分析即歌词顺序可知:

例:歌词第一句为”Everyone, Bubblegum I’m so dumb,”,下一句是”I should have just told you”,

由[8*(输入-65+32)]可知输入的第一个字符是67=‘C’。

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

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

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

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

完整的输入为CBDABCADBCCABBABBABACBCCABDADBABABB

Linux下运行,即得flag:
附上:歌词

RE-实验吧whatamitoyou相关推荐

  1. 实验吧 writeup

    实验吧 WP 有几个题没做完,正在不断更新中,欢迎提问,如果 markdown 格式有错误也请呼我 WEB 认真一点! 没做出来~~~~~~~~~~~~~~~~~ 过滤了union sleep and ...

  2. 合肥工业大学—SQL Server数据库实验四:数据库的分离和附加

    数据库的分离和附加 1. 数据库分离 2. 数据库附加 1. 数据库分离 当SQL Server服务器运行时,该服务器上所有的数据库自动处于运行状态,而运行中的数据库文件是无法进行数据库文件的拷贝的. ...

  3. 解读模拟摇杆原理及实验

    解读模拟摇杆原理及实验 Interpreting Analog Sticks 当游戏支持控制器时,玩家可能会一直使用模拟摇杆.在整个体验过程中,钉住输入处理可能会对质量产生重大影响.让来看一些核心概念 ...

  4. legend位置 pyecharts_实验|pyecharts数据可视化分析-1

    1. 实验介绍 本实验主要介绍pyecharts基本特点与属性. 1.1. 实验目的 了解pyecharts功能.特点.与安装方式. 1.2. 知识点 pyecharts特点 pyecharts图表 ...

  5. 2019春第二次课程设计实验报告

    2019春第二次课程设计实验报告 一.实验项目名称: 贪吃蛇游戏编写: 二.实验项目功能描述: 这个实验主要是实现游戏的正常运行,实现的目标是对小蛇移动的控制, 同时对小蛇数据的保存,如何实现转弯的效 ...

  6. 汇编语言程序设计 实验九

    实验内容 实验一: 补全程序t1.asm,完成在屏幕上输出内存单元中的十进制两位数 ; 在屏幕上输出内存单元中的十进制两位数 assume cs:code, ds:data data segmentd ...

  7. 20172324 2018-2019-1《程序设计与数据结构》实验2报告

    20172324 2018-2019-1<程序设计与数据结构>实验2报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 曾程 学号:20172324 实验教师:王志强 ...

  8. JAVA第二次验证设计性实验报告

    [实验任务一]:素数输出 (3)实验报告中要求包括程序设计思想.程序流程图.源代码.运行结果截图.编译错误分析等内容. 1.   实验内容 (1)计算并输出3~100之间的素数. (2)编程满足下列要 ...

  9. 20172329 2017-2018-2 《程序设计与数据结构》实验五报告

    这是这学期最后一次实验了,也是学到了很多东西,希望自己可以可以善始善终,加油! 让我们开始这一篇博客吧! 20172329 2017-2018-2 <程序设计与数据结构>实验五报告 课程: ...

最新文章

  1. pytorch 维度变化的时候应该使用什么方法permute
  2. wxWidgets:wxMBConv概述
  3. Java面试题 Java中sleep和wait的区别?
  4. 马斯克又开始了,喋喋不休,吊足大家胃口
  5. Spring框架学习-Spring和IOC概述
  6. Leetcode 53.最大子序列和
  7. How far away ? HDU - 2586 trajan算法lca
  8. Html+Css实现三栏布局响应式
  9. dtools: error while loading shared libraries: libicui18n.so.55: cannot open shared object file
  10. MSCNN论文解读-A Unified Multi-scale Deep Convolutional Neural Network for Fast Object Detection
  11. Temporal Pyramid Network for Action Recognition(CVPR2020)
  12. 安装Anaconda出现Error opening file for writing错误最简单有效的办法
  13. 华为手机手电筒怎么改变颜色_华为手机设置手电筒亮度 华为手机手电筒设置...
  14. python中排序从小到大_python怎么从小到大排列
  15. 安卓虚拟键盘_Logitech罗技 key to go蓝牙键盘使用体验
  16. 先做接口测试还是功能测试
  17. 利用vscode高效阅读《You Don't Know JS》
  18. @程序员:GitHub这个项目快薅羊毛
  19. JAVA中用流进行文件分割
  20. matlab实验报告七,matlab实验报告七

热门文章

  1. django 实现简单的搜索功能
  2. 完美解决IE浏览器下下载功能
  3. win10 关机变注销重启_如何在Windows 10中更改Windows 10注销,登录和关机声音
  4. 择时策略 —— 基于扩散指标的沪深300指数择时
  5. java实验项目代码_java web 期末项目实验源码20套,自用学习非常不错!
  6. UE4 扩展详细信息面板
  7. bzoj3219 巡游
  8. 聚观早报|网易开放暴雪游戏退款申请通道;鱼跃医疗回应被罚270万
  9. 河源做java_河源:一座水做的城市
  10. instagram h账号_如何在Instagram上使用多个帐户