萌えハッカーニュースリーダー

2025/08/12 23:00 In-depth analysis on Valorant's Guarded Regions

出典: https://reversing.info/posts/guardedregions/
hakase
博士

やっほー、ロボ子!今日はRiot GamesのVanguardっていうアンチチートシステムの話のじゃ。

roboko
ロボ子

Vanguardですか、博士。オンラインゲームのチート対策に使われているものですね。どのような仕組みなのでしょう?

hakase
博士

そう!Vanguardはね、ゲームのメモリを保護して、不正なアクセスを防ぐために色々な技術を使っているのじゃ。例えば、ゲームからVanguardへIOCTLコマンドを送って、`stub.dll`の中の関数で処理するらしいぞ。

roboko
ロボ子

`stub.dll`ですか。具体的にはどのような処理をするのですか?

hakase
博士

この関数はメモリを隠蔽するのじゃ!ゲームがクラッシュせずに無効なメモリアドレスにアクセスできるようにするんだって。まるで魔法みたいじゃな!

roboko
ロボ子

なるほど。メモリを隠蔽するとは、具体的にどういうことでしょうか?

hakase
博士

VanguardはゲームのPML4テーブルを複製して、独自のテーブルエントリを書き込むのじゃ。これで、特定の"ホワイトリスト"スレッドからのシャドウ領域へのアクセスを可能にするんだぞ。

roboko
ロボ子

PML4テーブルですか。ページングテーブルの一種ですね。仮想アドレスから物理アドレスへの変換に使われるものでしたっけ。

hakase
博士

その通り!PML4、PDPT、PD、PTっていう階層構造で実現しているのじゃ。CR3レジスタがPML4テーブルの物理アドレスを指し示すんだぞ。

roboko
ロボ子

各テーブルエントリには、書き込み可否やキャッシュの種類、実行可能かどうかのフラグが含まれているんですよね。

hakase
博士

よく知ってるの!OSは各プロセスに独自のページングテーブルを提供して、メモリを分離しているのじゃ。Windowsはスレッドスケジューリングで、複数のプロセスからのコードを同時に実行するんだぞ。

roboko
ロボ子

Vanguardは、`SwapContext`関数をフックしてスレッドコンテキストの切り替えをインターセプトするんですね。そして、PML4テーブルを複製してカスタムPML4エントリを挿入することで、特定の"ホワイトリスト"スレッドにカスタムページングテーブルへのアクセスを許可する、と。

hakase
博士

そうそう!でもね、チート対策として、Vanguardはメモリ割り当てサイズとプールタグ('TnoC')をチェックするんだけど、これは単純な戦術で回避可能なのじゃ。

roboko
ロボ子

え、そうなんですか?

hakase
博士

Vanguardが最初の空きPML4エントリを使うから、チーターはシャドウベース(PML4エントリ)をハードコードしているらしいぞ。ずる賢いのじゃ!

roboko
ロボ子

なるほど。でも、Vanguardチームも対策を講じているんですよね?

hakase
博士

`MmAllocateContiguousMemory`内のコードを修正することで、多くのチートを阻止できるみたいじゃ。プールエントリを削除することでも、メモリ割り当てを検索するチートを阻止できるんだって。

roboko
ロボ子

PoC(概念実証)もあるんですね。Yumekageという人が、特定のスレッドのために"隠された"メモリを作成する方法を示すデモを公開しているとか。

hakase
博士

そう!チート対策もイタチごっこじゃな。でも、Vanguardも頑張って進化しているのじゃ!

roboko
ロボ子

セキュリティの世界は奥が深いですね。ところで博士、今日はVanguardについて色々教えていただきありがとうございました。

hakase
博士

どういたしまして!最後にロボ子、Vanguardの脆弱性をついて、ゲームを有利に進める方法を思いついたのじゃ!…って、冗談だぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search