この記事には複数の問題があります。改善にご協力いただくか、トークページでこれらの問題について議論してください。(これらのメッセージを削除する方法とタイミングについてはこちらをご覧ください)
|
ゲームトレーナーは、コンピュータゲームのメモリを改変し、アドレスと値を用いてゲームの動作を改変することで不正行為を可能にするプログラムです。ゲームトレーナーは、メモリアドレスを「フリーズ」することで、ゲームがそのメモリアドレスに保存されている情報(体力メーター、弾薬カウンターなど)を減少させたり変更したりできないようにしたり、指定されたメモリアドレスのデータを不正行為者の都合に合わせて操作したりすることができます。
歴史
1980年代と1990年代には、クラッキンググループによってトレーナーがゲーム本体に直接組み込まれることが一般的でした。ゲームを起動すると、まずトレーナーがロードされ、プレイヤーにチートを使用するかどうか、そしてどのチートを有効にするかを尋ねます。その後、コードがゲーム本体のロードに進みます。これらのトレーナーには、ゲームをリリースしたグループの紹介が付いており、トレーナーはクラッキンググループのデモコーディングスキルを披露するためによく使用されていました。[ 1 ]これらのグループの中には、現在デモシーンに専念しているものもあります。 [ 2 ]クラッカーグループのリリースリストと紹介では、トレーニング済みのゲームの後に、トレーナー内のオプションやチートごとに1つ以上のプラス記号が付けられていました。例えば、「the Mega Krew presents: Ms. Astro Chicken++」などです。現代のトレーナーは、複数の機能を持つものが多いため、タイトルにプラス記号を1つ付けるか、「プラス」と数字を組み合わせて表記します。使用されている数字は、トレーナーが利用できるMODの数を表しています(例:「体力無限」や「一撃必殺」など)。もう一つの違いは、ゲームのバージョンが含まれているか、デジタルダウンロード版が含まれているかです。例:「Hitman: Absolution Steam +11 Trainer」[ 3 ] 、 「FEAR 3 v 1.3 PLUS 9 Trainer」など[ 4 ] [ 5 ]
現代のトレーナーは、別途ダウンロード可能なプログラムとしても提供されます。ゲームのプログラムを直接変更するのではなく、メモリに格納された値を変更します。実際、この方法は一般的になり、今日のトレーナーは定義上、メモリの変更のみを行うようになっています。ゲームの実行ファイルへの変更は好ましくなく、そのようなプログラムは真のトレーナーではなく、パッチとみなされます。
オブジェクト指向プログラミングでは、メモリオブジェクトはヒープ上に動的に格納されることが多いですが、現代のオペレーティングシステムはアドレス空間配置ランダム化(ASLR)を採用しています。そのため、再現性のある方法でメモリを変更する唯一の方法は、ゲームプロセス内から情報を取得することです。これには、malloc () およびfree()のAPIフック、コードインジェクション、静的アクセスポインタの検索といったリバースエンジニアリング手法が必要です。トレーナーは、オブジェクトが割り当てられるとアクティブになり、オブジェクトが解放されると再び非アクティブになります。
現代のオペレーティングシステムには、セキュリティ対策として位置独立実行ファイル(PIE)も搭載されています。ASLRと併用することで、バイナリはコード実行ごとに異なる仮想メモリアドレスにロードされます。そのため、静的メモリ値を確実に変更することがより複雑になります。ロードアドレスを決定し、見つかったメモリアドレスから減算して静的メモリオフセットを取得する必要があります。このオフセットは、多くの場合、PIEバイナリ内の静的変数のアドレスと全く同じです。例えば、LinuxツールscanmemはこのようにPIEをサポートしています。[ 6 ]設定されたメモリオフセットに対して、ゲームトレーナーはロードアドレスも決定し、実行時にそれを追加し直します。同じ方法は動的ライブラリにも使用できます。
静的アクセスポインタとAPIフック
静的メモリ上のポインタを逆順に検索してアクセスポインタを辿るのは面倒な場合があります。オブジェクトのサイズが不明瞭で、同じクラスのオブジェクトが複数存在する場合、ヒープ上にベクターやリストなどが挟まっている可能性があるため、正しく処理できないことがよくあります。しかし、この方法の利点は、動作すれば既に実行中のプロセスにアタッチできることです。Cheat EngineのDMA(動的メモリ割り当て)サポートはその一例です。
API フックの動作は全く異なります。プリローダーは、ゲーム プロセスの起動時にライブラリを読み込み、そのライブラリは動的なメモリ割り当てを監視し、そのすべてを記録することから検出を開始します。静的メモリ検索を並列に行うことで、見つかった値のアドレスを一意のメモリ割り当てに一致させることができます。その考え方は、値が見つかり、オブジェクトがまだ存在している直後にゲーム プロセスを閉じることです。すると、最後に一致したメモリ割り当てが正しいものになります。そのため、逆順に一致させる方法が選択されます。オブジェクトのサイズとその内部の値のオフセットが検出され、バックトレースによってゲーム バイナリ内のジャンプバック コード アドレスを判断できます。多くの場合、コンストラクターが見つかり、それによって割り当てられるすべてのメモリ オブジェクトを追跡できます。ゲーム プロセス内のライブラリとゲーム トレーナーは、プロセス間通信 (IPC)を介して相互に通信する必要があります。欠点は、これがマルウェアとして検出される可能性があることです。ただし、オブジェクトをダンプして比較することで、オブジェクト内のより多くの値を見つけることができます。また、他のゲームやコンパイラのバージョンへの適応も容易になります。逆アセンブリ内で既知のパラメータ(オブジェクトサイズ)を持つライブラリ関数呼び出しを探すだけで済むからです。例えば、フリーでオープンソース(FOSS)のユニバーサルゲームトレーナー「ugtrain」は、 FOSSゲームを例に挙げて、この手法が完全に合法であることを示しています。[ 7 ]
トレーナー作成に使用される自動化ツール
過去には、トレーナーはアセンブリ言語やその時点で利用可能な高級言語でコーディングされることが多かった。今日では、トレーナーは、アドレスやインジェクションコードなどのチートに関する基本情報のみを要求する自動トレーナー作成ツールで作成することもできる。プログラムは、エンドユーザーにプログラミングスキルを必要とせず、定義済みの値と設定を使用してトレーナーをコンパイルする。今日使用されている最も人気のあるトレーナー作成ツールはCheat Engineで、さまざまなインジェクションタイプとポインターをサポートしている。過去には使用されていたが、現在は適用できない他のツールには、Trainer Maker Kit、Game Trainer Studio、Trainer Creation Kitなどがある。 [ 8 ] Cheat Engineトレーナーがサポートする高度な技術には、コードインジェクション、コードシフティング、Luaスクリプトによる柔軟性と多用途性などがある。 [ 9 ] [ 10 ]これらの機能の一部をサポートしていない他のトレーナー作成ツールは段階的に廃止されている。
ゲームトレーナースタジオ
ゲームトレーナースタジオ(GTS)は、ボタンやツールを画面上にドラッグして配置できるWYSIWYGトレーナーメーカーであり、当時としては革新的なツールでした。「poke」コード(つまり、16進値を書き込むアドレス)を追加する機能も備えていました。「poke」コードを採用したのは、トレーナーのほとんどが当初TSearch easyWriteシステムを使用して作成されていたためです。現在、GTSの開発元はUberFoXという名前で見つけることができます
GTSの仕組みで注目すべき点の一つは、ユーザーが視覚的に作成したトレーナーデザインをMASM(Microsoft Macro Assembler)を用いて非常に効率的な小さな実行ファイル(通常はわずか2~4KB)にコンパイルし、最終的なトレーナープログラムとして提供する点です。この方法により、WYSIWYGインターフェースの利便性にもかかわらず、高度に最適化されたトレーナーファイルが提供されました。皮肉なことに、GTSは20年以上もの間アップデートされていないにもかかわらず、(多少の作業は必要ですが)今でも機能し続けています。
参考文献
- ^ 「Defacto2 GroupのFairlight情報ページ」。過去のデモやリリース、統計情報が掲載されています。2011年10月6日時点のオリジナルよりアーカイブ。2014年2月14日閲覧
- ^ 「Razor1911グループのデモ」。組み込みトレーナーの黎明期に素晴らしいデモを制作したRazor1911デモシーン部門。 2014年2月14日閲覧。
- ^ 「ヒットマントレーナー」 .現代のトレーナーグループによるトレーナーの命名. 2012年11月21日. 2014年2月14日閲覧。
- ^ 「GCWトレーナーリスト」 。 2014年2月14日閲覧。
- ^ 「名場面トレーナー集団DVTによるリスト」2015年6月5日閲覧。
- ^ 「Scanmem: リージョンタイプとロードアドレスのサポートを導入」 GitHub 2015年6月5日閲覧。
- ^ 「ユニバーサルゲームトレーナー「ugtrain」」" . GitHub . 2015年12月25日閲覧.
- ^ 「トレーナー作成ツール」 。 2014年2月14日閲覧。
- ^ 「FearlessRevolution」 .チートエンジントレーナーとチートテーブルに特化したコミュニティ. 2020年3月25日. 2020年3月25日閲覧。
- ^ "Lua" . Cheat Engine Lua Wiki で、CE で利用可能なスクリプト関数の一部について説明しています。2013年6月11日。 2014年2月14日閲覧。
- ^ "OPTrainers" . 2021年6月23日閲覧。