Eyes, JAPAN Blog > SECCON 2017 putchar music

SECCON 2017 putchar music

Seiya Kobayashi

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

先日行われたSECCON 2017で出題されたputchar musicという問題が面白かったのでWrite upと紹介します。

問題文

putchar music
This one line of C program works on Linux Desktop. What is this movie’s title?
Please answer the flag as SECCON{MOVIES_TITLE}, replace all alphabets with capital letters, and spaces with underscores.


main(t,i,j){unsigned char p[]="###<f_YM\204g_YM\204g_Y_H #?[WKAMYJ/7hk\206\203tk\\YJAfkkk";for(i=0;t=1;i=(i+1)%(sizeof(p)-1)){double x=pow(1.05946309435931,p[i]/6+13);for(j=1+p[i]%6;t++%(8192/j);)putchar(t>>5|(int)(t*x));}}

write up

Cで書かれたコードが渡され、整形すると以下のようになる

#include <math.h>

int main() {
  int t, i, j;
  unsigned char p[] = "###<f_YM\204g_YM\204g_Y_H #<f_YM\204g_YM\204g_Y_H #+-?[WKAMYJ/7 #+-?[WKgH #+-?[WKAMYJ/7hk\206\203tk\\YJAfkkk";
  for (i = 0, t = 1;; i = (i + 1) % (sizeof(p) - 1)) {
    double x = pow(1.05946309435931, p[i] / 6 + 13);
    for (j = 1 + p[i] % 6; t++ % (8192 / j);)
      putchar(t >> 5 | (int)(t * x));
  }
}

putcharを使って音楽奏でられるらしい???
putcharで出力されたものをdataとしてうまいこと読み取ると、wavが生成できた

$ gcc music.c
$ ./a.out > a.raw

次に、

$ sox -V -r 8k -e un -b 8 -c 1 a.raw -b 16 -e si -L a.wav rate -h 44.1k gain -1 trim 0 30

とすると、wavファイルができる

聞くと、スターウォーズの音楽が流れたのでSECCON{STAR_WARS}がフラグだった

流行っていたこともあり、勘でSTAR WARSと当たられた人も多数いたみたいですw

参考

ありがとうございました。

Comments are closed.