自分のプロジェクトには、あるパターンが何度も出てくる。何かが存在し、それは役に立ち、しかしどう動くのかは教えてくれない。私は調査の練習としてBalsamiq Mockups の keygenを書いた——ライセンスキーがどう導出されるかをC#で調べた研究で、何も配布はしていない。国ごとの統計をWikipediaのインフォボックスから取り出すスクレイパーも作った。インフォボックスは同じ事実を15通りの書き方でエンコードしている。自分のSoundCloudプレイリストをバックアップするサーバーレスのジョブも作った。これは、文書化された入口が存在しないために、ページからclient IDを無理やり抜き出す作業だった。関係のない3つのプロジェクト、その下にある活動はひとつだ。システムが何をするかを観察し、仮説を立て、それを検証し、わかったことを書き留める。
私たちはリバースエンジニアリングを、セキュリティ研究者やDRMを破る人たちのものであるかのように語る。しかし、自分が作っていない何かと統合するなら、あなたは絶えずそのバージョンを実行している。ドキュメントは古い。エラーメッセージは嘘をつく。必須と書かれたフィールドは任意で、任意のほうが全体を支えている。あらゆる統合は一部が考古学であり、うまくいかない統合はたいてい、誰かがそうならないと決めてかかったものだ。
手法に高度なところは何もない。入力をひとつ変えて、何が動くかを見る。ネットワークタブを開いたままにして、ページが出すすべてのリクエストを読む。期待していたものだけではない。ある操作の前と後でレスポンスを保存し、差分を取る。エンドポイントに拒否されたら、その拒否をデータとして読む——知らなかったルールを今しがた渡されたのだ。作業のほとんどは絞り込みだ。このフィールドは重要、あれは飾り、この2つの呼び出しの順序が全体を支えていて、誰もそれを書いていない。
人が飛ばすのは、進めながら書き留める部分だ。頭の中に持っている仮説は、セッションのあいだに劣化する。テキストファイルの中の、それを証明したリクエストの隣にある仮説は生き延びる。私のスクレイパーの半分は、実際にはそのファイルにコードを巻きつけたものだ——「こう見えるなら、こういう意味だ」という、驚くたびに一項目ずつ増えていくリスト。半年後に元のシステムが変わったとき、そのファイルが午後ひとつと書き直しの差になる。
どこでやめるかも学ぶ。システムの完全なモデルは要らない。目の前のタスクを終わらせ、前提が崩れたときに気づけるだけあればいい。一度しか触らないものの完全な理解を追いかけるのは、それ自体がひとつの無駄だ。
これが最も効いた仕事の一部は、ここで詳しく書けない仕事だ——他人のために、詳細を非公開に保つ条件のもとで行った。手法は上に書いたすべてと同じで、欠けているのは報告だけだ。
これに頼る価値があるのは、それが外部の人間の入口だからだ。許可も、提携も、サポート契約も要らない——必要なのは忍耐と、正解にたどり着く前に何度か間違える耐性だ。いったん慣れてしまえば、「無理だ、APIがない」という一群が、静かに「午後を1回くれ」に変わる。
線はあり、実務ではめったに曖昧にならない。何かがどう動くかを調べること——自分のマシン上のライセンス済みのコピー、自分のブラウザの中のレスポンス——は、触る許可のないシステムに侵入することとも、学んだことから作ったものを配って回ることとも違う。私はこちら側にとどまる。上に書いたことはすべて、許されたものを読めるようにする話であって、禁じられたものに手が届くようにする話ではない。
土台はできた。あとは建てるだけだ。