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

Diablo III の所持金増殖バグ、原因は整数値のオーバーフロー 36

ストーリー by reo
バグレン 部門より

hylom 曰く、

人気オンラインゲーム「Diablo III」で 5 月 7 日にゲーム内貨幣を増殖させることができるバグの存在が明らかになり、波紋を広げている (Game*Spark の記事より) 。

通常のオンラインゲームではこのようなバグが発見された場合、バグによって生成されたゲーム内貨幣を没収したり、サーバーデータのロールバックを行うことで対策を取ることが多いのだが、Diablo III ではゲーム内のアイテムをリアルマネーで売買できる「リアルマネーオークションハウス」というシステムが存在するためこのような対策を取りにくい点も騒動に拍車をかけている。

さて、5 月 10 日時点で問題は解決され、オークションハウスも現在では復旧しているのだが、この問題の原因は「整数値のオーバーフロー」にあったことも明らかになった (本家 /. 記事より) 。

問題のバグはリアルマネーオークションで一定額以上のゲーム貨幣 (ゴールド) を出品してキャンセルすると、出品した金額以上のゴールドが戻ってくるというもの。具体的には、2 の 31 乗 (2,147,483,648 ゴールド) 以上の金額を出品すると「出品金額を 2 の 31 乗で割った余り」が手持ちのゴールドから引かれるにもかかわらず、キャンセルすると出品金額全額が戻ってくるということらしい。2 の 31 乗という数字から、出品金額関連の処理途中のどこかで 32 ビット整数型の変数が使われており、オーバーフローが発生していると推測できるとのこと。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • ゲームでも現実でも同じですね。
    • by Anonymous Coward

      スラド運営はこのスコアチート野郎取り締まれよ

    • by Anonymous Coward

      「一定額以上のゲーム貨幣 (ゴールド) を出品してキャンセルする」
      て書いてあるから、お金ができなくてもできるでしょ

      お金持ちになれるかは、気づけるか気付けないかの差じゃないかな

      • by Anonymous Coward

        このゲームやったことないけど、2,147,483,648 ゴールドって多分、
        RMTなしで集めるのは相当大変な額じゃないのかな。

        • by Anonymous Coward on 2013年05月15日 22時32分 (#2381005)

          度重なる調整の結果ゲームの難易度が初期より劇的に下がり、
          ゲーム内通貨であるゴールドを含む戦利品を入手しやすくなった一方で
          ゲーム内で流通する通貨を回収する手段が貧弱なため、
          Diablo3経済はインフレの真っ最中です。公式がシステム面で想定しているレート下限をぶっちぎるレベルで。

          このバグに必要な額も、そこそこ長いこと遊んでいるか転売しまくるか運が良ければ
          RMTなんぞしなくても届く数字です。RMにしても数千円の小遣い銭レベルですし。

          ・・・まあ普通に遊んでいたら手にしないし、手にする必要のない額なのは確かですが。
          ラスボスを倒せる程度の装備ならオークションハウスで本当にお安く手に入るし、
          拾ったものは基本的に使えないし売れないので・・・

          親コメント
        • by Anonymous Coward

          オンラインゲーム、オフラインゲームを問わず、ゲーム内で1億すら稼いだ試しがない。

  • カジノのコインを買う時にゴールド計算が桁あふれして、
    大量のコインを安価に買えちゃうバグがあったなぁ。

    あと、こないだあった
    http://it.srad.jp/story/13/02/14/0814239/ [srad.jp]
    32768両編成とか。

    #所持金32ビット整数でも足りないのか……

  • by s02222 (20350) on 2013年05月15日 10時36分 (#2380497)
    C言語だと未定義動作に当たるので、実装がCだったら、所持金が増えるどころか世界が終わってた可能性もある深刻なバグか・・・
    • by tnka (39757) on 2013年05月15日 10時45分 (#2380506) 日記

      新キャラクター「鼻から出る悪魔」ですか。

      # 討伐は最終クエスト

      親コメント
    • by Anonymous Coward on 2013年05月15日 19時55分 (#2380936)

      C99は符号付きのオーバーフローも未定義動作じゃないよ。
      実装定義の値が得られるか実装定義のシグナルが起きる。
      C++は実装定義の値。
      C11はどっちだったかな?

      親コメント
    • by Anonymous Coward

      自キャラが画面外に消えたり、崩れた背景を突き進んだり、壁に向かって歩き続けたりしながら
      メモリやレジスタを書き換えつつ、気付いたらスタッフロールが呼び出されているわけですね。

      TASさんがやってるのをよく見ます。

  • by Anonymous Coward on 2013年05月15日 11時41分 (#2380543)

    で、「-1 * 2^31」とかにならなくて良かったっすね。

    • by Anonymous Coward

      それは出品時にお金がもらえてキャンセル時にもお金がもらえるとゆー。
      運営的にはどっちでも変わらんし、ユーザー的にはそっちの方が良いな。

  • by Anonymous Coward on 2013年05月15日 13時40分 (#2380670)

    なぜこんな中途半端な数値で折り返したのか。
    ぴったり20000000じゃだめだったのか。
    この謎の数値に製作者からのメッセージが隠れている気がする。

  • by Anonymous Coward on 2013年05月15日 16時25分 (#2380799)

    このバグによる被害者は一般ユーザー全員で、損害はゲーム内通貨のインフレによる資産の目減りってことになるのかな?

    タレコミ文の通りだと、出品→キャンセルを繰り返すごとに 2^31 を超えた分が倍々ゲームで増えてくってことですよね。
    ゴールドの換金レートも、あっと言う間に落ち込んだんじゃないのかな。

    • by t-wata (10969) on 2013年05月15日 17時36分 (#2380854) 日記

      > タレコミ文の通りだと、出品→キャンセルを繰り返すごとに 2^31 を超えた分が倍々ゲームで増えてくってことですよね。

      2,147,483,648+1ゴールドを出品すると、所持金から1ゴールドしか引かれず、キャンセルすると2,147,483,648+1ゴールド戻ってくる、って話だと思います。

      親コメント
typodupeerror

UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie

読み込み中...