脱出ゲームのすゝめ

黒曜

@kokuyouwind

$ whoami

  • 黒曜 / @kokuyouwind
  • 株式会社Misocaに転職して半年
  • ふだんのギークバーは初
  • アナログゲームナイトによく出没
  • 現職: Ruby on Rails/React
  • 前職: PHP/Scala
  • 趣味: OCaml

さくらインターネットとも

コミュニティとも

全く関係ない話をします

リアル脱出ゲーム

リアル脱出ゲーム

ある部屋にあなたは突然閉じ込められる。

周りには同じ境遇の人たちがたくさんいる。
部屋にはさまざまなアイテム、暗号、パズルが隠されているようだ。


暗号を解き、鍵を開き、箱を開け、

制限時間内に最後の鍵を手に入れることができれば
あなたは脱出に成功する。

楽しい!

自分も作りたい!

作った

作った

  • プログラマ向けの謎解き
  • Githubで公開
  • ファイルを編集したり
    コマンドを打ったりして
    進行するゲーム
  • プログラミング系の知識
  • 脱出ゲームのひらめき
  • gitならではの仕掛け

例題

例題

アクセサヒープクラスフラグ

マクロコンパイラマージクロージャ

アセンブラバブルブールコメント

整列の前後を読め

例題

アクセサヒープクラスフラグ

マクロコンパイラマージクロージャ

アセンブラバブルブールコメント

整列の前後を読め

(ソート)

例題

アクセサヒープクラスフラグ

マクロコンパイラマージクロージャ

アセンブラバブルブールコメント

整列の前後を読め

(ソート)

例題

アクセヒープラスフラグ

マクロコンパイマージロージャ

アセンブバブルールコメント

整列前後を読め

(ソート)

例題

アクセヒープラスフラグ

マクロコンパイマージロージャ

アセンブバブルールコメント

整列前後を読め

(ソート)

答え:さくらクラブ

「謎解きを作る」という謎解き

謎解きを作るという謎解き

Q.

  正しい入力のときだけ出力が得られるスクリプトを書け。

  ただし、ファイルを見ただけでは入力も出力も

  わからないようにせよ。

  また、1スクリプトに対し正しい入力は数種類あり、

  それぞれ別の出力を返すようにせよ。

謎解きを作るという謎解き

$ cat key
invalid
$ ./run.sh
error: invalid key
$ echo 'key1' > key
$ ./run.sh
これは正しいkeyです
$ echo 'key2' > key
$ ./run.sh
これは別の正しいkeyです

謎解きを作るという謎解き

#!/bin/sh
cd `dirname $0`
file=$(md5sum key | cut -c 1)
openssl aes-256-cbc -d -in data/$file \
  -pass file:key

謎解きを作るという謎解き

謎解きを作るという謎解き

Q.

  正しいkeyを設定したはずなのに復号に失敗した。

  なぜか。

謎解きを作るという謎解き

Q.

  正しいkeyを設定したはずなのに復号に失敗した。

  なぜか。

A.

  keyの終端に改行が入っていた。

  opensslではpassは最初の行しか使用しないが、

  md5sum値が変わって別の入力ファイルを見ていた。

謎解きを作るという謎解き

#!/bin/sh
cd `dirname $0`
cat key | tr -d '\n' > key
file=$(md5sum key | cut -c 1)
openssl aes-256-cbc -d -in data/$file \
  -pass file:key

謎解きを作るという謎解き

Q.

  ファイルを実行したらkeyファイルが空になった。

  なぜか。

謎解きを作るという謎解き

Q.

  ファイルを実行したらkeyファイルが空になった。

  なぜか。

A.

  出力ファイルは新規モードでオープンするので、

  入力が空になった。

謎解きを作るという謎解き

#!/bin/sh
cd `dirname $0`
cat key | tr -d '\n' > key2; mv key2 key
file=$(md5sum key | cut -c 1)
openssl aes-256-cbc -d -in data/$file \
  -pass file:key

謎解きを作るという謎解き

他にも色々ありましたが、時間がないので割愛…

まとめ

  • 作ったので遊んでみてね!
  • 謎を解くのも楽しいけど、謎を作るのも楽しい​
    • ただしシェルスクリプトはつらい
  • 新しい謎解きゲームも考えていきたい
    • 協力者募集!(制作とかテストプレイヤーとか)