Category - Starctf2019

题目描述:Do you love yy ?
下载后查看文件类型,为64位程序

  1. $ file yy
  2. yy: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=a48620628ac444471e5ed0844b04d501eb5fd6ed, not stripped

拖进IDA分析:
main

  1. int __cdecl main(int argc, const char **argv, const char **envp)
  2. {
  3. size_t flag_len; // rax
  4. printf("give me flag:", argv, envp, argv);
  5. __isoc99_scanf("%255s", flag); // lower、number、{、}、_、C、T、F
  6. flag_len = strlen(flag);
  7. yyin = fmemopen(flag, flag_len, "r");
  8. yyparse();
  9. return 0;
  10. }

主要逻辑是读取flag,求出flag长度,调用yyparse函数判断flag是否正确。
函数名一栏中,发现大量与yy有关的变量、函数。
function_name
通过搜索,发现与lex(词法分析器)、yacc(语法分析器)有关,属于编译原理的知识,由于没学过,直接搜索相关例子分析一下:
如下:
test.lex

  1. %{
  2. int wordCount = 0;
  3. int spaceCount = 0;
  4. int numberCount = 0;
  5. %}
  6. chars [A-Za-z\_\'\.\"]
  7. numbers ([0-9])+
  8. delim [" "\n\t]
  9. whitespace {delim}+
  10. words {chars}+
  11. %%
  12. {words} {wordCount++;}
  13. {whitespace} {spaceCount++;}
  14. {numbers} {numberCount++

附件是段.swf影片
用工具得到各帧
共441=21*21帧
21帧一行,按顺序逐行排列,得到二维码,扫出前半段flag

把.swf转换为.mp3
使用Audacity打开,将波形图转换为频谱图,得到后半段flag