Jane Streetの難問リバースエンジニアリングに挑む!攻略の全貌を徹底解説
Solving the Jane Street reverse engineering challenge
Solving the Jane Street reverse engineering challenge
Jane Streetが公開したリバースエンジニアリング・チャレンジに挑戦しました。この難攻不落のパズルをどう攻略したのか、そのプロセスと分析結果を詳しくまとめました。エンジニア魂をくすぐる技術的な裏話が満載です。
HNのみんな、こんにちは。最近Jane Streetの逆アセンブルチャレンジ[0]を解いて、その過程についてのブログ記事を書いたよ。
そこそこテクニカルで、(願わくば)読んでいて面白いプロセスになっていると思う。私がこのチャレンジを楽しんだのと同じくらい読者にも楽しんでもらえたら嬉しいな(記事にも書いたけど、かなりフラストレーションの溜まる作業でもあったんだけどね)。GitHubも記事に載せてあるから、私のソリューションの詳細に興味があれば見てみて。今後はもっと踏み込んだ内容のフォローアップ記事も書くつもり。ぶっちゃけ、書いたコードはかなり汚いんだけど、目的は達成できたから良しとしてる。
これが初めてのブログ投稿だから、もしフィードバックがあれば教えてほしい。執筆もコードも、すべて自分自身の手で、Vimを使ってやり遂げたよ。
本物のチップ(精度の高い画像がある場合)に対してこうしたタスクを行うなら、Degate[1][2]っていうオープンソースソフトウェアがあるよ。
いいじゃん!私はKLayoutのPython APIを使ってGDSの解析とネットリストの抽出をしたよ。これ、実際に使ってみるとかなり便利だった。
あと、yosysには「アサーションチェック」のサポートがあって、ソリューションの中でそれを使ったんだ:
https://sunaabh.com/systems/2026/08/18/jspuzzle.html
これほどひどいNIH症候群(Not Invented Here:自社開発至上主義)のケースは初めて見たかも。まあ何はともあれ、攻略おめでとう!
Chrisさん、参考情報までに:https://en.wikipedia.org/wiki/GDSII を見るとGDSフォーマットについて分かるよ。Graphic Data System IIの略らしい(もともとは1970年代後半にCalmaが開発したもの)。
「z3」っていうツールに行き着いた。魔法みたいじゃない?ソリューションが見つかるたびに、最高にテンションが上がるんだ。
これ、すごく共感する。初めてオペレーションズ・リサーチの講義を受けたときに同じような感覚を覚えたよ。一見すると理解不能な複雑な問題を、単純な制約の塊として定義して解を得るっていうのが、まさに魔法のように思えたんだ。
z3は最高だよね。去年、ニューラルネットワークに偽装されたハッシュアルゴリズムを解くJane Streetのパズルで初めて使ったよ。仕事ではMCMCをよく使うから、z3によるMCMCモデルの形式検証についても少し調査したけど、実戦投入には至っていない。今回の記事に触発されて、また再開してみようかな。
彼らがチップ設計用に独自のオープンソースOCamlツールチェーンを持っているのは興味深いね。業界の定説としては、みんな未だに恐ろしく使いにくいベンダーのツールチェーンに縛られているものだと思っていたから。これって、本番環境レベルのチップ設計においても現実的な代替手段になり得るのかな?
うわぁ...
あのニューラルネットのエンジニアリングチャレンジ、めちゃくちゃ最高だったよね。すごくハマってしまって、時間を使いすぎた挙げ句、解けたときには自分でもびっくりした。あれ以来、ハードウェアに興味が出てきちゃったよ。誰か助けて。
これを簡単にこなす知識とスキルを持っていて、なおかつそれを生業にしている世界中の人々の大半は、極東にいるって言っても過言じゃないと思うよ。