セキュリティ
SECCON 2017 putchar music
Seiya Kobayashi
先日行われた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
参考
- http://meandering-through-mathematics.blogspot.jp/2012/12/algorithmic-music.html
- http://royal-paw.com/2012/01/bytebeats-in-c-and-python-generative-symphonies-from-extremely-small-programs/
ありがとうございました。