世界を動かす技術を、日本語で。

Power Mac G3 ROMに隠された27年目のイースターエッグを見つける

概要

  • Power Macintosh G3 のROM内に未発見のイースターエッグを発見した経緯
  • HPOEリソースと「secret ROM image」文字列の関連性
  • Ghidraによる逆アセンブル解析の手順と発見内容
  • RAMディスク名変更による隠し画像の出現方法
  • Mac OS 9.0.4まで有効なイースターエッグの詳細

Power Macintosh G3 ROMに隠されたイースターエッグ発見記

  • Power Macintosh G3 (1997~1999年モデル)のROMをHex FiendとEric Harmonの ROM Fiend テンプレートで解析
  • HPOEリソース 内にJPEG画像(開発チームの集合写真)を発見
  • 既知情報だが、実機での表示方法はこれまで未解明
  • nittリソースID43 (Native 4.3)に「.Edisk secret ROM image The Team」等のパスカル文字列を発見
  • Keith Kaisershotの Pippin研究 より、SCSI Manager 4.3のPowerPCネイティブコードと判明

解析とイースターエッグの仕組み

  • nitt43は PowerPC PEF実行ファイル と判明(先頭12バイトが“Joy!peffpwpc”)
  • Ghidra で逆アセンブルし、文字列「secret ROM image」への参照を特定
  • .EDisk(RAMディスク)ドライバを利用し、RAMディスクのボリューム名が「secret ROM image」ならHPOEリソースID1のJPEG画像を抽出
  • 画像データを “The Team” というファイル(ttxtクリエイタ/JPEGタイプ)としてRAMディスクに保存
  • 画像ファイル作成後、ドライバ制御エントリにも何らかの処理を実施

イースターエッグの発動方法

  • RAMディスクを有効化 (Memoryコントロールパネル)
  • 再起動 後、RAMディスクアイコンを選択
  • 「ディスクを消去」 を選び、ボリューム名に「secret ROM image」と正確に入力
  • 「消去」クリックでRAMディスク内に「The Team」ファイルが生成
  • ダブルクリックで SimpleText がJPEG画像を表示
  • Mac OS 8.1~9.0.4 で動作確認(9.1以降は不可の可能性)

考察と謝辞

  • 画像の存在自体は知られていたが、 発動方法は未発見 だった
  • Steve Jobs復帰後(1997年)、イースターエッグ禁止令が出たため、これが最後期の隠し要素と推測
  • 発見協力者 ^alex に感謝
    • Infinite Mac上のエミュレータで再現・検証に成功
  • 当時のApple開発チーム関係者への呼びかけ

関連リンク・参考情報

  • Pierre Dandumont による2014年のHPOE画像記事
  • Keith Kaisershot のPippin SCSI Manager解析
  • Infinite Mac (DingusPPCエミュレータ)での実機再現方法

  • Power Macintosh G3 のROMには、 特定条件下でのみ出現する画像イースターエッグ が存在
  • RAMディスク名を「secret ROM image」に変更し消去 することで、「The Team」画像ファイルが現れる仕組み
  • Macの歴史的な隠し要素 として、今後も語り継がれる価値

Hackerたちの意見

どうやって誰かがこれを見つけたんだろう?こういうものが見つかるって、地球上の人類の集団的な生産性についての面白い発見だよね。みんなが知識の限界を押し広げてる。どこかの地下室で、ある科学者が世界のほんの一部を研究するために一生を捧げてるかもしれないし、もしかしたら素晴らしい発見につながるかも。人類、頑張れ!

生のファイルをじっくり見て、面白いパターンや文字列を探してる感じかな。古いOSの方がちょっと楽だと思う。現代のOSはすごく大きいからね(この記事で使われてるPowerMac G3のMacOS 8は120MB、MacOS 11は約35GB必要だし)。でも、楽しさが減っちゃうのもあるかも。この記事によると、このイースターエッグは1997年にジョブズが戻ってきたときに削除されたらしいし。

いったいどうやってこれを見つけたんだろう?この人たちはコンピュータ考古学者だね。正式なカテゴリーかはわからないけど、そう思ってる。彼らは過去のソフトウェアやハードウェアを深く掘り下げて、電子廃棄物の波に飲まれる前に貴重なものを取り戻してくれるんだ。

ResEditを使ったことある?すごく便利なツールで、今ならghidraみたいなツールが必要なプログラムやファイルの色んな部分を見せてくれるんだ。ResEditはAppleから出てるんだけど、めちゃくちゃ使いやすいよ。

これは「専門家を困らせる」にはうってつけだったのに…仕方ないね。

なんかクールだし、企業の背後には本当に人がいるってことを示してるよね。お金持ちの人たちが「俺が作った」って言って、小さな人たちの功績を奪うこともあるけど、本当の小さな人たちは歴史に「いや、これを実現するために魂を込めたのは俺たちだ」ってメモを残すんだよね。もちろん、スティーブ・ジョブズはこれを禁止するだろうけど。

俺はジョブズの大ファンじゃないけど、彼は時々描かれる悪役よりもずっと複雑だったと思う。この特定のトピックに関しては、むしろ彼がこれの発端だったんだよね:https://www.folklore.org/Signing_Party.html だから「もちろん」ってわけじゃないよ。あと、マイクロソフトは2000年代初頭から「イースターエッグ禁止」ポリシーを持ってたことも忘れないで。これは本当にジョブズのことじゃない。

もう、お願い。危機に瀕したアップルに戻ったジョブズが、秘匿されたアセンブリコードの中に埋もれた obscure ROM イメージを個人的に知っていたとは考えにくいよ。もっと可能性が高いのは、そういう「本当の人たち」の一人が掃除をしているときにそれを削除したってこと。ジョブズはアップルで働く素晴らしい人たちについて、定期的に公に話してたし、ウォルト・モスバーグと一緒に素晴らしいチームを作ることの重要性や創造性を育むことについて語ってた。

利益は無給労働の盗みだと固く信じてるけど…メタ給料の話になると、昔の「Mad Men」のシーンが思い出される。「それが金の意味だ!」ってやつ。

誰かがiPadでイースターエッグを共有したことがあって、プレイグラウンドアプリでちょっとしたコードを書いたら、ROMから次のロゴを引き出せたんだよね。あの時再現できたけど、それ以来参照を見つけられない。これ、6年くらい前の話。

「俺たちがアミガを作ったのに、あいつらが台無しにした!」ってメッセージを思い出すな。 https://arstechnica.com/gadgets/2007/12/amiga-history-part-5...

すごいね。誰かがこのイースターエッグのトリガー機構を見つけるまでにそんなに時間がかかったのが面白い。リバースエンジニアリングって難しいよね。どこで学べるか気になるな。どこから始めればいいの?オンラインチュートリアルとか本のおすすめある?

ビデオゲームはいいスタート地点だと思う、特にNESみたいな古いコンソール。実験の影響がすぐに見えるし、シンプルなデバイスだからね(ただ、ハードウェアの「API」は現代のプログラマーにはちょっと直感的じゃないかも)。ハッキングやリバースエンジニアリング用のツールもたくさんあるし、Mesenでお気に入りのNESゲームを読み込んで、ブラウザでnesdev.orgを開きながらデバッグツールをいじってみて。もし作業しているゲームが他の誰かによってすでにリバースされていたら、https://datacrystal.tcrf.net で役立つ情報が見つかるかも。もっと現代のソフトウェアをリバースするのは難しいけど、昔書いたGamecubeゲームのハッキングについての記事があるから、よかったら見てみてね:https://www.smokingonabike.com/2021/01/17/hacking-super-monk... https://www.smokingonabike.com/2021/02/28/hacking-super-monk... HNのディスカッションもあるよ:https://news.ycombinator.com/item?id=26315368

なんか気になるんだけど、彼は「The Team」って読むのに、「The Team Break at Event Match - Native」っていうフルの文字列は読まないんだよね。意味がわからん。

これらは2つの別々の文字列だよ。ヘックスダンプを見ると、間にある文字はスペース(0x20)じゃなくて、表示できない制御文字(0x1D)だってわかる。この記事ではこれを「Pascal文字列」と呼んでる。Cスタイルの文字列とは違って、ヌル終端じゃなくて、長さがプレフィックスになってるんだよね。最初のバイトが文字列の長さを保存してるから、「The Team」は確かに1つの文字列で、長さが8(0x08でエンコード)から始まって、その後に「Break at Event Match - Native」が長さ29(0x1Dでエンコード)で続くんだ。

「The Team」は、イースターエッグを成功裏に実行したときにROMディスク上に露出するファイルだよ。

これめっちゃいいね。古い機械にはイースターエッグの創造と発見を刺激する何かがある。30年後にMacBook AirのEFIとか掘り返してる人なんていないだろうな。そもそも何か見つかるのかも怪しいけど。

何か見つかるかどうかもわからないけど。でもそれがポイントだよね。誰かが検索するまでわからない。

このイースターエッグは「初期デスクトップPC時代」の雰囲気を感じさせるね。すごく人間味があって、顔と名前を持った人たちが作ったものを使ってるって実感させてくれる。昔は熱心なオタクたちの情熱プロジェクトだったんだよね。でも、今は製品の抽象化レイヤーを透過させたくないみたい。プロダクトの人たちは製品の全体像をコントロールしたいから、リストが大きすぎたり、その中の人が望ましくなくなったりするリスクを避けるために、人間味を排除するのが一番安全なんだろうな。今の時代、どうなるんだろうね。iPhoneにちょっとしたイースターエッグがあって、毎回起動するたびに開発に関わった人たちがランダムに表示されるとか、めっちゃいいけど、プロダクトの人たちには受け入れられないだろうな。

あなたのプロダクト関係の変な問題はわからないけど、これはプロダクト(マネジメント)とは全く関係ないよ。ソフトウェアは昔は少数の人で作られてたけど、今は組織全体で何千人も関わってる。良くも悪くも、そういうもんなんだ。大規模なソフトウェアプロジェクトで、ほんの数人を強調するイースターエッグなんて、今の時代には合わないよ。

アジャイルの前にもっとこういうのがあったのかなとも思う。締切に追われる開発だと、チームの一部が仲間が何かを終わらせるのを待っている状況に陥ることがあるから、マイルストーンを超えるのが難しくなる。バックログをどれだけいじっても限界があるし、退屈さを感じたり、ちょっとした余計なことを入れることでロードマップに影響を与えていないと合理化できると、もっと「動機と機会」が生まれるんだよね。

記事で紹介されてたInfinite Macブラウザツールを使ってFirefoxで再現できなかったけど、すごくクールな発見だね。今のAppleがこんな楽しいものを入れる勇気があるのか気になるな。

参考までに、Firefoxで2回目の挑戦でできたよ。