パスワードを忘れた? アカウント作成
16734 story

ゼルダの伝説のROMにソースコード 114

ストーリー by nabeshin
GB版のゼルダの伝説は押入れにあるかも 部門より
本家のストーリによると、ゲームボーイ「ゼルダの伝説」のROMにソースコードが見える部分があるとのこと。リンカーがパディングする際、メモリ上のデータで埋めてしまったことが原因のようです。この得られた情報からの考察がネタ元のGame Development Archeology: Zelda on Game Boy comes with sourceで読めます。
解析対象のイメージがROMそのままではなく、ROM抽出後の何かしらのハックの残骸ではないのかという可能性もありますが、リリースにソースを残してしまうこと自体はあり得そうな話です。もしかすると、ほかのゲームや製品にもソースが見えるものがあるかもしれませんね。
実行中にBreakが利いてしまってlistコマンドでソースが見えたゲームもありましたが、もし、類似のものに心当たりある方がいらっしゃいましたら、ネタ投下と思って、この場で懺悔(暴露?)されてはいかがでしょう?
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 最近の例 (スコア:5, 興味深い)

    by imp (25825) on 2007年11月27日 14時38分 (#1256323) ホームページ
    Playstation等の光学メディアを採用したゲーム機では、ゲームデータの読み込みを高速化する為に
    ダミーデータを内周に置き、ゲームデータを外周に置くというような格納方法をしている物が多々あります。

    そのダミーデータは大抵中身が空ですが、偶にゲームのデータを繰り返しコピーしてダミーを作ってたり、
    ダミーデータの目的サイズに近いようなデータを適当に持ってきたと見られるような製品があったりもします。

    で、当方が見た中で一番酷かったのは
    「ゲームのソースコードを丸々LHA圧縮してダミーデータとして格納している」
    という、まるで冗談のような製品がありました。

    ……もう大分前のゲームなんでバラしちゃうと、KONAMIのPlaystation用ソフト 「beatmania BEST HITS」です。('x`)
    そのゲームそのもののソースコードではなく、過去のバージョン(5th)のソースコードが丸々入ってました。
    確認したのは初期版なので、その後修正されたかどうかは不明です。

    #入っちゃってたもんはしょうがないのでID
  • オライリーの「セキュアプログラミング」の中で Solaris 2.0 の tar のセキュリティホールが紹介されていました。

    あらゆる tarball に /etc/passwd ファイルの一部が含まれているというもので、確保されたバッファがゼロクリアされていなかったことが原因だそうです。

    確保されたバッファに tar プログラム自身が読み込んだ /etc/passwd のデータの一部があったので、tarball に含まれてしまったとのことだそうです。

    今回の件と似てるような似てないような。
  • 懺悔(フラッピー) (スコア:5, すばらしい洞察)

    by Anonymous Coward on 2007年11月27日 22時11分 (#1256559)
    もう時効だろうし、めくじら立てる人も居ないと思う(思いたい)ので白状すると
    20年以上前、X1版FLAPPYで200面解くと認定証が限定で貰えた奴で、
    ゲーム中プログラムが暴走してダンプ眺めたら各面のパスワードの羅列を発見し、
    最後の200面”だけ”自力で解いて認定証を貰いました。
    (暴走の理由は夏の暑さでテープが延びてバグったw)

    認定証が届いてから自分のした事に罪悪感に苛まれた子供時代・・・
    今と違って心がピュアだった(苦笑
  • BASIC書き換え (スコア:4, おもしろおかしい)

    by Anonymous Coward on 2007年11月27日 14時09分 (#1256298)
    「蒼き狼と白き牝鹿」の変数を書き換えてオルドしますたorz
    「ファイナル○リータ」も書き換えますたorz

    って、コンパイルすらされてないんだから別の話だよなあ。
  • by TarZ (28055) on 2007年11月27日 14時27分 (#1256312) 日記
    リンカーがパディングする際、メモリ上のデータで埋めてしまったことが原因のようです。

    昨今は携帯ゲーム機でもこんな有様なのですか。爺は情けのうございまするぞ。
    爺の子供の頃は、メモリの1バイトは血の一滴、数バイトをめぐって担当者間で…

    # …というような経験は私にはないのですが、ある人はぜひ語ってください。
    • by shiba (273) on 2007年11月27日 22時13分 (#1256560) ホームページ
      >メモリの1バイトは血の一滴、数バイトをめぐって担当者間で…

      知人から「1バイトのメモリには8人の仏様がいる」という話なら聞いたことがある.

      # 昔,メモリをとるか実行速度をとるかよく悩んだが...
      # いつも結果は大差ない場合がほとんどだった.
      親コメント
    • 24年ほど前の話です。小生が10歳くらいの頃。

      行番号BASICでゲーム(マインスイーパもどき)を作っていたのですが、
      メモリが512バイトしかなく、1バイトでも削れるものは削っていました。

      幸いにも、printコマンドを記号の“?”に換えることが可能でして、
      すべての画面出力部分を“?”で記述して、カセットテープに保存していました。
      4バイト分得します。

      ほかには行番号とコマンドの間のスペースを省いたりしてました。

      ちなみにlistコマンドでプログラムをみる事が出来るのですが、
      一度でも実行してしまうと、行番号とコマンドの間にスペースが挿入され、
      せっかく書いた“?”が“print”に展開されて表示されてしまいます。
      プログラムの最後から(4バイトד?”個数)+(行数)分のバイトが自動的に消去され、
      runするとsyntaxエラーが出まくりでした。

      こんなんでどうでしょうか。

      あ、なんか読みにくい文になってしまった。
      もう寝ます。お休み。
      親コメント
    • 14年前のモノクロ8bit機に「昨今は」も無いと思いますが・・・。

      ともあれ、「リンカーがパディングする際」と聞くと、主人公がなにかを切ってるのかと思った。
      親コメント
  • by tarosuke (2403) <webmaster@tarosuke.net> on 2007年11月27日 14時33分 (#1256319) 日記
    PC-9801Fに付いてたフライトシミュレータはプロテクトがかかっててソースが見えないがBIOSを直接叩くとソースが丸見え。なのでそれでソースを吸い出してプロテクトを解除した15の夏みたいなの?それともSORCERIANやYs2のブートブロックを弄って(検閲)した18の冬?
    # いや、別に懺悔するようなことじゃないけどさ。
  • by Anonymous Coward on 2007年11月27日 20時39分 (#1256508)
    実際に夢を見る島のROMを吸い出してMD5を比較してみるといいです。

    一致しませんから。もちろんソースもない。

    実際にこのデータが見つかるROMは、(勝手にハックして作られた)純正品ではない中国の海賊版ROMですよ。

    このサイトの中の人は、任天堂から発売されていないはずの中国語版ゼルダ(とかX-MENとか)のROMをどこからか買ってきて吸い出して、ソースが入ってるぜひゃっほい!とか叫んでるわけですか?

    おめでたいですね。

    • by Anonymous Coward on 2007年11月27日 21時04分 (#1256527)
      コメント群を読めば分かるけど、殆どの人にとっては元記事の真偽なんてどうでもいいんです。
      それに関する話題でワイワイ騒げればそれでいいんです。
      親コメント
  • おお! (スコア:2, おもしろおかしい)

    by 127.0.0.1 (33105) on 2007年11月27日 16時00分 (#1256359) 日記
    ついに任天堂もGPLを採用する時代になったとは!(全然違
  • ゼルダなだけに (スコア:2, おもしろおかしい)

    by Anonymous Coward on 2007年11月27日 17時56分 (#1256416)
    (ソースコードは)ミンナニハ ナイショダヨ
  • by stricting (30765) on 2007年11月28日 7時25分 (#1256671)
    出荷前のビルド手順に米国防省レベル2手順でのスラック抹消が入ってました.
    ロード○ナークあたりまではやってたんですがね. 後は知らん.

    ダイ○ソアはShiftJISでダンプするとスタッフクレジットが入ってます.
    あの蝶が空に昇ってる最中に出る予定でした.

    高円寺のあの18禁ゲーム会社から来たフロッピーにADV5のソースが.
    少しは消せよと.
  • by Anonymous Coward on 2007年11月27日 14時16分 (#1256301)
    プロテクトを外すときにFD直接読んだら、未使用のセクタにメッセージがあったり
    バイナリダンプしたら愚痴がいっぱい書いてたり。
    • by gonta (11642) on 2007年11月27日 17時46分 (#1256411) 日記
      ROM解析って、やってみたいなぁ。

      プロテクトをはずすことに生きがいを感じていたやつによると、光栄の信長シリーズ(3作以降ね)は大変だったらしい。プログラム一面に「プロテクトはずせるもんならはずしてみろ」的メッセージがずらっと。

      その先どうやったか教えてくれなかったけど、ちゃんとプロテクトをはずすという目的は達成したらしい。
      --
      -- gonta --
      "May Macintosh be with you"
      親コメント
      • by Anonymous Coward on 2007年11月27日 18時12分 (#1256424)
        某木屋さんの後チェックには泣かされますた。

        そういえばエメラルドドラゴンだったか、物語が途中まで進んだところでヒロインから
        「あなた、コピーしたでしょ!」と言われ、「私たちもうお別れね、さよなら!」
        っていうのがあったなあ。
        親コメント
      • by Anonymous Coward on 2007年11月27日 19時52分 (#1256487)
        プロテクトも途中から全くの同一を作る方向から
        書き換えの手法が一般化しちゃったから、
        そんなに難しくなくなってきたんだけどね。

        Wizardのファイラーとか、別売りのドキュメント読んだらだいたい作れるようになったし。

        FDCのリセットとかGAPの利用とかいっぱい方法があったよねぇ。
        親コメント
      • コピー対策で面白かったのはシステムソフトの大戦略(多分2)だったなぁ
        普通にプレイ始められるんですが、数ターン進むといきなり
        核ミサイルが自陣に向けて発射されて絶対勝てないという(笑
        親コメント
    • by Anonymous Coward on 2007年11月27日 14時24分 (#1256308)
      ごとうきよはる てめェー だよ てめェー
      親コメント
  • by Anonymous Coward on 2007年11月27日 14時24分 (#1256307)
    ファイルの入っていない空きエリアに、「MIFES」のヘルプファイルの断片がある [ipc-tokai.or.jp]という話が有ったり、個人的にはスーファミとアーケードのROMで同じようなの(開発環境のメモリイメージ)を見たことありますね。

    # まぁこういう [geocities.jp]人間向けメッセージを意図的に埋めたというのが一番多い気がするが
  • と思ってググってみたら、「ゼルダの伝説~夢を見る島」 [asahi-net.or.jp]のことなんですね。
    英文の方でタイトルにDXって付いてるし、GB Color対応とも書いてあるからこっち [nintendo.co.jp]か。
  • これは1938年にチリの大統領になった急進党のペドロ・アギレ・セルダ [wikipedia.org]を
    主人公にした壮大な歴史ifゲームなんだよ!
  • 今回たまたまソースだったみたいだけど、メモリ内のデータ適当にとかだったら、最悪個人情報とか

    ・・・ってのは、さすがにないか。
  • by pastel_you_me (21769) on 2007年11月27日 18時11分 (#1256422) 日記
    ゼルダだからこそニュースを作るのはリンクなのか
    気付かなかった…やっぱり任天堂はすごいよ
  • PC-9801のDISK-BASICでsave "hogehoge",pと、プロテクト指定して保存されたBASICのプログラムは、def seg=&hfe00:poke &hcd7,0 でプロテクト解除できて、そのままプログラムが読めるようになる…

    セグメント指定値があやふやなんだよなぁ。
    当時はX-1のテープ版マカダムのデータをゴニョゴニョ…

    #この手のネタはおっさんホイホイだわな。専用のアイコンが欲しくなる(苦笑)

    --

    /* Kachou Utumi
    I'm Not Rich... */
    • >セグメント指定値があやふやなんだよなぁ
      def seg=&h60 ですよ
      N88BASIC(86)のシステム環境変数が0060:0000から始まっているので
      そこの&hcd7がpオプションセーブされてたかどうかのフラグだったんです

      fe00:0000はたしかVRAMのアドレスじゃなかったかな?
      親コメント
    • おおよそ似たようなことが他のBasicの実装でもありましたね。
      その当時はF-Basicを使っていたのですが、同じような方法で不可視化されたBasicのソフトに対して、
      Basicのワークエリアのある部分を書き換えることで、リストが見られるようになる、と。

      その後はお金持ちになったり、超ベテランになったり・・・と、まぁやることは同じですな。

      #今でも白本あるから調べようと思えば調べられるけど、需要はないよね?
      親コメント
      • BASIC ってプロテクト(不可視化)あったんですね。忘却の彼方だ。

        FM-7 のゲームって、Kコンパイラで造られていたものもあって、 雑誌 I/O のダンプ・リストの逆アセで、初期化処理で機数「3」に している箇所がなんとなく推測できて、 大きめの数値に変えると、いくらやられても Game Over に はならず、延々と続けられた。
        ゲーム・バランス崩せりゃなんとかなる事を知ってしまうと、ゲームに のめり込む事が馬鹿らしく思えてた頃だ。

        親コメント
typodupeerror

コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell

読み込み中...