私は最近、プログラマがGame Dev Tycoonの作成者など、海賊からゲームを保護する巧妙な方法についての記事を読んでいました。これは私に興味をそそりました。実行中のゲームのコピーが実際には技術レベルでの海賊版であることをどのように検出するのですか?私がいくつかの調査で見つけた最も近い答えは、SNESカートリッジが海賊版であるかどうかを検出する方法でしたが、その戦術は明らかにPCには当てはまりません。
私は最近、プログラマがGame Dev Tycoonの作成者など、海賊からゲームを保護する巧妙な方法についての記事を読んでいました。これは私に興味をそそりました。実行中のゲームのコピーが実際には技術レベルでの海賊版であることをどのように検出するのですか?私がいくつかの調査で見つけた最も近い答えは、SNESカートリッジが海賊版であるかどうかを検出する方法でしたが、その戦術は明らかにPCには当てはまりません。
回答:
まず最初に、ファイルが海賊版かどうかをコンピュータが知る方法はありません。海賊行為は法的/道徳的な用語であるため、1と0のみで構成されるファイルには意味がありません。
とはいえ、海賊行為の防止と対策は、通常、ユーザーがゲームのコピーを購入した場合にのみ取得できるもの(通常はオブジェクト)を持っているかどうかを確認し、それを複製するのを難しくすることに焦点を当てています。これを行うには多くの方法があり、それぞれに利点と欠点があります。いくつか言及します。
初期のゲームでは、ゲームマニュアルから単語を入力するようユーザーに求めていました。これは、ゲームボックスを購入した場合にのみ取得する必要があります。しかし、コピー機やスキャナーはこの手法を簡単に打ち負かします。
最近では、メディアチェックがより一般的です。ゲームを実行するには、ゲームCDをドライブに入れる必要があるという考え方です。これを実装するには、たとえば、ゲームを実行できないCDから重要なデータファイルにアクセスするか、単にCD内のファイルの存在を確認します。これは、CDの複製が困難な場合はかなりうまくいきましたが、CDコピー機、および最近ではドライブエミュレータを使用して、これらの手法を簡単に無効にすることができます。
ただし、CDのコピーは完全ではないため、他の多くの手法は、CDが元の押されたCDであるか、コピーであるかを検出することに焦点を当てています。これを実装するために、ゲームはプレス時にゲームディスクに挿入された非標準要素をチェックできますが、CD-R上のCDバーナーで簡単かつ確実に複製することはできません。これを行う一般的な方法は次のとおりです。
マスタリング中にCDにダミーの「ゴースト」ファイルを作成します。これはCDファイルシステムからはアクセスできませんが、存在し、どこにあるかを知っていれば読むことができます。このデータは、ファイルごとのディスクコピーにはありません。ただし、ディスクイメージ全体をコピーすると、これらのファイルがコピーされます。
別の方法は、意図的にディスクにエラーを挿入することです。CDにはエラー修正コードが含まれています。ディスクリーダーで透過的に修正できるエラーをデータに挿入すると、ディスクは正常に動作しますが、エラーはCD-Rにコピーされません。これらの意図的なエラーを探すことで、ゲームはCDを元の押されたコピーと見なすことができます。ただし、RAWディスクイメージコピーはこれを無効にします。
同じアドレスで異なるデータを持つツインセクタを挿入すると、データを前後にシークするときに異なる結果が得られます。これの存在を確認することは可能です、そして、これらの双子セクターでCDを複製することは非常に難しいです。
CDのピットの実際の位置を測定します。繰り返しますが、同じ位置にピットがあるCDを複製することは非常に困難です。
ただし、Daemon ToolsやAlcohol 120%などの多くのCDエミュレーターは、これらの機能を実際にエミュレートできます。このため、多くの出版社はCDエミュレーター検出ステップを含めることを選択し、エミュレーターが検出された場合にゲームが実行されないようにします。ただし、エミュレーター検出器の実装は、この回答の範囲外です。
物理CDの確認の代わりに、またはそれに加えて、ゲームはユーザーにプロダクトキーなどのデータの入力を要求できます。プロダクトキーを使用する方法は次のとおりです。
キーの数学的特徴を確認します。ただし、これによりキーの重複が防止されるわけではなく、チェックアルゴリズムが発見またはリバースエンジニアリングされた場合、海賊はゲームで正当と思われる新しいキーを自由に作成できる可能性があります。自由にキーを作成するソフトウェアは、「keygens」と呼ばれます。
ユーザーのハードウェアに基づいてハッシュを生成し、このハッシュとプロダクトキー(通常は「インストールキー」と呼ばれる組み合わせ)をゲーム会社が所有するサーバーに送信し、ハッシュとシリアルに基づいてアクティベーションキーを作成します。一方向の数値メソッド(モジュラー算術、楕円曲線を使用した一部のメソッドなど)を使用すると、ゲームはアクティベーションキーがハッシュコードとシリアルコードに一致するかどうかを確認し、一致する場合にのみ実行できます。この手法は「アクティベーション」と呼ばれます。
アクティベーションを使用すると、サーバーは同じシリアルコードを持つ複数のハードウェアハッシュのアクティベーションキーの提供を拒否する場合があります。このため、シリアルコードとアクティベーションキーがコピーされても、アクティベーションキーは一致せず、ゲームは他のコンピューターで実行されません。
これらの手段はすべて、ユーザーが購入したゲームのコピーを所有しているかどうかを確認することを目的としています。ただし、それらを実装するには、これをチェックするプログラムコードが必要です。海賊は、コピー防止メカニズム自体を攻撃する代わりに、ゲームコードを変更してチェックを無効化またはバイパスすることができます。海賊版対策チェックを削除するためにゲームバイナリを変更する行為は、「クラッキング」と呼ばれます。
クラッキングは、ゲームの実行可能ファイルを逆アセンブルし、関連するチェックが行われる場所を見つけ、それを変更してチェックを無効にするか、結果を無視して再アセンブルするだけで構成できます。クラッキングに対処する方法は次のとおりです。
ハッシュを使用してバイナリを確認します。ただし、ハッシュをチェックするプログラムが必要であり、これも同様にクラックされる可能性があります。
プログラム、または単にチェックルーチンを暗号化し、実行時に解読します。これにより、1つ以上の追加の復号化ステップが含まれるため、逆アセンブリがより困難になります。復号化キーがプログラムに含まれている場合(それがないとゲームを復号化できないため)、海賊版は復号化をリバースエンジニアリングし、ルーチンを見つけ、コピー保護を解除できます。
このため、ゲームパブリッシャーとして、キーをできるだけ見つけにくくし、オプションで復号化アルゴリズムを理解しにくくしたいと考えています。キーを見つけにくくするいくつかの方法は次のとおりです。
奇妙な方法で作成して、あいまいにします。これにより、クラッキングプロセスが単純に遅くなります。
上記のシリアル保護と同様のマシンごとのマスターキーを作成します。
ただし、キーの作成に使用する方法に関係なく、復号化の進行中はキー自体がメモリ内にあります。メモリインスペクタ、デバッガ、およびエミュレータは、海賊がメモリ内にある間にキーを見つけてコピーするのに役立ちます。メモリピークは、いくつかの方法で攻撃される可能性があります。
指定された領域でメモリアクセスを検出し、別の場所にアドレス指定をリダイレクトする特権サービスがある。これにはリング0アクセスが必要であり、これを行うプログラムはそれほど正当ではない目的でより一般的に使用されるため、ウイルス対策ソフトウェアは通常それらをブロックします。(これが、多くのゲームや他のソフトウェアが実行中にウイルス保護をオフにするように要求する理由です)。これを正しく実行するソフトウェアを作成することは非常に難しく、ホストOSの安定性とセキュリティを簡単に損なう可能性があります。XCPのスキャンダルは、この方法ゴーン間違っているの実装の良い例です。
最新のハードウェアとオペレーティングシステムは、メモリカーテン、セキュリティで保護されたメディアパス、TPモジュールなどのツールを提供し、メモリ検査に耐えながらデータを解読するプログラムを簡単に作成できるようにします。
些細なものから難解なものまで、海賊行為を攻撃するための多くの技術があります。残念ながら、これらの手法のすべてが本物のコピーを認識できない可能性があり、通常、より積極的な手法がより高い偽陽性率を持っています。
ゲームパブリッシャーとしては、通常、実装コスト、予想されるクラッキング時間、および誤検知率が予想と一致する一連のテクニックを選択します。
違法コピー防止は完全に解読不可能であるというのは一般的な誤解です。ほとんどのゲーム販売はリリース後最初の数か月で行われるため、海賊版保護スキームは、それを破るのがゲームパブリッシャーが破られる前に大量の利益を集めるのに十分な時間を消費する場合に有効であると通常考えられます。
Game Dev Tycoonに関しては、海賊版対策技術を使用していません。あなたが言及した記事の冒頭で述べたように、彼らは単に「壊れた」ビルドを作成し、それをBitTorrentに配布しました。
それは非常に簡単です。自分の実行可能ファイルでMD5またはSHA256を実行するだけで、最終リリースのビルド後に署名がバイナリにハードコーディングされたものから変更されたことを検出すると、明らかに誰かが実行可能ファイルをハッキングしました。その後、ほとんどの企業は、「壊れたPE」または「ウイルスが検出された」というポップアップを表示するだけでなく(以前はそうでした)、ゲームを終了します。ダイアログのメッセージループでゲームが一時停止されるため、ダイアログがポップアップされたブランチのためにすぐに確認でき、条件チェックでコードを変更してブランチをバイパスします。
今日、企業はゲームのプレイに非常に微妙な変更を加えています。モンスターの寿命を増やしてゲームをプレイできないようにしたり、この管理ゲームに信じられないほど巧妙に統合したりしています。そこでは、ゲーム会社を経営し、プレイヤーが多すぎてゲームを海賊版にしているため、最終的には負けてしまいます。この場合は、すてきな約束です。会社のサーバーに赤い旗がアップロードされるだけで、サポートのために電話をかけたいときは、スピーチをしたり、身元を明らかにすることにとらわれたりすることがあります。
しかし、これはすべてのトピックであり、テクニックはハッシュです。また、これらのチェックはバイナリ内の多くの場所で実行できるため、ハッカーがそれを見つけてクリアしても十分ではありません。
編集:ゲームをそのままコピーする場合、ゲームに著作権侵害対策がまったくない場合は機能する可能性があります。CDバーナー時代以前の非常に古いゲームで動作していました。そのため、ほとんどの場合、コピーするインストールフォルダーだけでなく、ゲームを実行するためにインストールする必要があります。これには、システム内のあらゆる場所に隠されたファイルとレジストリキーが含まれます。ゲームはこれらのものの存在を確認します。これらはインストーラーによってのみ作成できます。また、インストーラーはCDからのみ実行できます。これは、ディスクの最初のバイトのエラー修正コードシステムを考慮しない不規則なビットのため、コピーできません。nero of alcoholなどの一部のコピーソフトウェアは、エラーを無視することを提案しますが、それらが書き込むのは修正されたコピーであり、インストーラーはそれを検出し、そこに戻ります。
EDIT2:
Q:ファイルをハッシュした後、ハッシュを変更するファイルにハッシュを挿入する方法は?
@ Byte56:くそーここでインテリジェントなコメントを取得しています:)はい、それはパラドックスであり、解決できません。したがって、ハッシュはバイナリのハッシュを含まない部分で作成する必要があります。そして、チェックコードはそれを知って、自己チェックにハッシュするときにそのゾーンを除外する必要があります。~~ #### [put here here] #### ~~などのタグを使用してハッシュを囲み、除外する人々を見てきました。しかし、ハッカーが見つけやすいという欠点があるため、ハッシュをスクランブルし、複数の場所に分散させる必要があります。暗号化されていても、そうではなく、同じカモフラージュ操作で秘密鍵が保存されます。
Macゲームにextパーティションを置くことはできません
macsはextを読むことができません