« 不具合? | メイン | オンラインゲームの著作権 »

2012年02月19日

GREEドリランドのカード複製

2chで祭り状態の複製ネタ。
2月19日にトレード停止の対策がとられたので、もう書いても良いだろう。

【GREEドリランド カード複製方法とその原因についての考察】

『複製方法』
・用意するもの
 携帯電話(スマートフォンで成功・・・ガラケーは不明)
 PC(ドリランドにログインできるようにChromeをUA偽装したもの)
 GREEアカウント(単アカで良いが、複アカあると捗る)

・複製手順
 1.複製したいカードをトレードに出し、キャンセルしてもらう(複アカならサブに出してすぐにキャンセルすれば良いが、単アカの場合は最悪24時間待つ)。
 2.スマホとPCでドリランドにログインしておく。
 3.どちらもトレード品の受け取り画面にする。
 4.タイミングを計って、2台とも「受け取り」をほぼ同時に選択する。
 5.要はトレキャン倉庫に入っているカードを2台で同時に受け取るだけ(試してないがプレゼントボックスでもできるかもしれない)。

・ポイント
 回線速度やトラフィック、スマホやPCの処理速度等を勘案して、受け取りのタイミングをずらさなければ成功しない。
 うちの環境では、スマホを操作して約0.5秒後にPCを操作すると成功した(試行錯誤するしかないが、慣れてくれば成功率は上がる)。
 単なる同時押しでは成功率は低い。


『複製したカードは消せるか?』
 カード固有のID(シリアルナンバー)が無いようなので、複製したものとそうでないものを見分けるのは難しい。
 どれがオリジナルなのかすら分からないはずだ。
 当然、オリジナルまたは複製品をショップ売りや強化の餌で消しても、他のカードは消えない。
 現状出回っている複製品に対処(カード消去)することは技術的に難しいと言わざるを得ない。
 サーバのログを解析して足跡を追っていくことは可能だが、金と時間が膨大に必要で現実的でない。


『バグの原因』
 トレキャン倉庫のDBテーブルをA表とし、個人の所有カード情報をB表とする。
 トレード品受け取りの手順は次の通り。
 手順1.A表から目的のレコードを検索
        ↓
 手順2.B表に新規レコードとして、そのレコードを挿入(INSERT)する。
        ↓
 手順3.A表からそのレコードを削除(DELETE)する。
 本来、手順1の前にトランザクションスタート、手順3の後にコミットが必要(トランザクション処理)。
 しかし、Web系ではDBのトランザクション処理は応答速度が遅くなるため好まれない。
 金銭がからむ部分(ショップやガチャ)では必須だが、単なるトレードでは必要ないと判断したものと思われる。
 
 しかし、非トランザクション処理では、次のようなことが発生する(縦方向は時系列)。
 (プロセスX)    (プロセスY)
   手順1
    ↓        手順1
   手順2        ↓
    ↓        手順2
   手順3        ↓
             手順3・・・この削除処理はエラーになるが問題ない
 プロセスXの手順3(削除)の前にプロセスYの手順1(検索)が走ってしまうと、どちらのプロセスも手順2(挿入)が問題なく実行されてしまう(つまり複製成功!)。
 
 トランザクション処理では、次のようになる(縦方向は時系列)。
 (プロセスX)    (プロセスY)
 トランザクションスタート
    ↓
   手順1
    ↓     (リクエストが来ても
   手順2        待たされる)
    ↓         ↓
   手順3        ↓
    ↓         ↓
   コミット       ↓
          トランザクションスタート
              ↓
             手順1
              ↓
             手順2
              ↓
             手順3
              ↓
             コミット
 プロセスXがコミットされない限り、プロセスYは実行できない。
 同じカードを受け取ろうとしてもプロセスYは必ずエラー(既に受け取り済みです)になるので、複製は失敗する。
 
 誰かがあるデータにアクセスしている場合、他の人を排除する仕組みを「排他制御」という。
 そのデータにロック(鍵)をかけるわけだが、レコード単体にロックをかけるのはサーバにかなりの負荷がかかる。
 ではテーブル(表)にロックをかければ良いのかというとそうでもない。
 上記A表やB表は個人個人に一つではなく、何万人もいるユーザの全てで共有されていると推測される。
 したがってテーブルにロックをかける方法では他のユーザに迷惑をかけることになる(サーバ負荷は小さい)。
 この折衷案としてページ単位(複数レコード)でロックをかける方法もある(一般的にはこのページロックが多い)。
 
 実は非トランザクション処理のプログラムをトランザクション処理に変更するのは半日もあれば完了する。
 難しいのはロックの粒度(アイソレーションレベル)をチューニングして、ユーザから不満が出ないように速度性能を調整する作業だ。
 実稼動状態においてそのテストを行なうのは非現実的であり、難しいと言わざるを得ない。
 なお、もともとこれはトランザクションにするまでもない処理であり、当初の仕様書にも求められていないと推測するが、問題は「二重ログインが可能である点」にあると思われる。
 
 複製手順の2(スマホとPCで同じアカウントを使いログインする)が実現できなければ複製は防げるはずなので、この部分を改善して頂きたい。
 改善するには半日、長くても1日あれば十分のはず。


『違法性』
 システムのバグをついてカードやアイテムを複製しても「不正アクセス禁止法」にはならない(あくまでも適法なアクセスだ)。
 電子計算機損壊等業務妨害罪や電子計算機使用詐欺罪による立件も難しいだろう。
 但し、カードデータはGREEが著作権者なので、著作権法の複製権(Copyright)侵害は確実(著作権者の許諾を得ずに無断で複製したわけだから)。
 ではすぐに警察が動くかというとそうはならない。
 著作権法侵害は親告罪(権利者の訴えがないと罪にならない)なので、GREEが訴えない限り捜査は始まらないのだ。
 しかし、訴えられれば著作財産権侵害で最悪10年以下の懲役及び1000万円以下の罰金の両方を科されることになる。
 
 個人的な実験でカードを数枚複製したとしても、それを他人に配布して利益を得ているのでなければ訴えられることはないし、訴えられても不起訴処分(微罪は訴追せず)になるだろう。
 しかし、ヤフオクや楽オクで荒稼ぎをしている場合、『逮捕・起訴・有罪確定・執行猶予付かず刑務所行き』の流れに乗ることになる。
 これは刑事訴訟の場合のみで、ほかに民事訴訟も発生する可能性がある(こちらは下手したら億単位の損害賠償請求)。
 
 大きな問題としては立件するための証拠をどう集めるか?だ。
 複製品とオリジナルを見分けることができないシステムであるため、サーバログや状況証拠に頼らざるを得ず、確実に有罪に持ち込めるかは断言できない。
 そして検察は確実に有罪に持ち込めなければ起訴しない体質だ。
 GREE側が資料提出などでどこまで検察に協力するかにかかっているが、著作権法違反事件としては不正に得た金額がかなり大きく、ぜひ立件して欲しいところだ(すでに水面下では動いているかもしれないが・・・)。

投稿者 masatsu : 2012年02月19日 14:20

コメント