CTFのためのプログラミング入門:小さな検証を積み重ねる

CTFでのプログラミングは、大きなアプリケーションを作るためだけのものではありません。

文字列を分ける、バイト列を変換する、同じ計算を繰り返すといった小さな処理を書くと、手作業の見落としを減らせます。

最初に身につける操作

  • 入力と出力:ファイルや標準入力から値を受け取り、途中の結果を確認できる形で出力します。
  • 文字列とバイト列:表示できる文字と、生のデータを区別して扱います。
  • 繰り返しと条件分岐:同じ規則を全ての要素に適用し、例外を明示します。
  • エラーの読解:失敗した行と値を手掛かりに、仮説を小さく修正します。

言語は一つに絞って構いません。

Python、JavaScript、Bashなどで、入力と出力を確かめる短いコードを自力で書ける状態を目標にします。

検証コードの作り方

  1. 問題から確認したい規則を一文にし、入力と期待する出力を一組だけ決めます。
  2. 規則をそのまま実装し、途中の値を表示して手計算と照合します。
  3. 境界の値、空の値、文字コードの違いなど、結果が変わりそうな条件を追加します。
  4. 期待と異なるときは、コード全体を書き直さず、最初にずれた値を探します。

一度に多くを自動化すると、誤った前提まで高速に繰り返してしまいます。

短いコードと小さな入力で仮説を確かめるほうが、問題の理解にもつながります。

読めるコードにする

変数名には、その値が何を表すかを残します。

入手したデータ、変換したデータ、最終結果を別の変数にすれば、どこで内容が変わったか追跡できます。

提出後に読み返して説明できるコードは、次の問題の雛形にもなります。

実行する対象を限定する

入手元が不明なスクリプトやバイナリを、普段使う端末でそのまま実行するわけにはいきません。

チャレンジの配布物でも、問題文の指示と演習環境の範囲を確認し、機密情報を含むファイルを入力にしないでください。

安全な利用条件は責任ある利用方針にまとめています。

次に読むページ