ヒント
ヒント 1見る
open/openat の戻り値が fd 番号です。どのパスがどの fd で開かれたかを控えます
ヒント 2見る
中身の読み込みは read(<fd>, "...")、標準出力への出力は write(1, "...") です(write(2, ...) は標準エラー)
ヒント 3見る
標準出力に出た中身ごとに、同じ中身を read した fd を探し、その fd を直前に開いた openat のパスに . で始まるディレクトリがあるかを確かめます
System Call Tracing - strace Debugging
ソースコードのないプログラム `/app/mystery_program` を strace でトレースした記録 `/challenge/strace.log` を解析します。プログラムはトークンらしい中身(`KINOCO{...}` の形)のファイルをいくつも読み込みますが、(1) 隠しディレクトリ(名前が `.` で始まるディレクトリ)の中のファイルであり、かつ (2) `read` したその中身をあとで標準出力(fd 1)に `write` している、という2条件を両方満たすものはただ1つです。その中身がフラグです。普通のディレクトリにあるドットファイルは (1) を満たしません。fd 番号は `close` の後に使い回されます。
open/openat の戻り値が fd 番号です。どのパスがどの fd で開かれたかを控えます
中身の読み込みは read(<fd>, "...")、標準出力への出力は write(1, "...") です(write(2, ...) は標準エラー)
標準出力に出た中身ごとに、同じ中身を read した fd を探し、その fd を直前に開いた openat のパスに . で始まるディレクトリがあるかを確かめます