ykore::tech_memo

技術的な事を適当に書きます

Apex Legends のチート戦略

筆者はここ最近は Apex Legends にドハマリしていて、有名配信者やVtuberを何人もチェックしている。Season 8 から始めて1年程度でソロダイヤを達成できて歓喜した程度の実力である。 せめて恒常的にダイヤランクを回せる程度の実力にはなりたいところである。

FPSゲームチーターの多いゲームである。筆者もランクマッチにて複数回チーターと遭遇したことがあるし、配信者がチーターと遭遇した場面は何度も見たことがある。

ある日、ふと、チートの実装について考えたことがあり、調査を始めた。 これらの調査は技術的興味から来ているものであり、当然ながらチートの利用をしたことは一度も無いことは明示しておく。 万一実行すると偽計業務妨害となる可能性がある。

チートの基本

いくつかの公開されているチートプログラムをソースコードを確認したが、基本的には以下の戦略によってチートを実行している。

  1. 何らかの方法で Apex Legends プロセスのメモリを探索する
  2. メモリに格納されたゲームオブジェクトの各種パラメータを監視・変更する
  3. 他のプレイヤーの情報等をゲームウィンドウにオーバーレイ表示する(オーバーレイ表示用のアプリを起動することが多い)

アンチチートの検出を回避するための戦略

チートが蔓延るゲームではアンチチートプログラムが一緒に実行されていることが多い。APEXではEasy Anti-Cheatが採用されている。チートプログラムはこれらの検出を回避する必要がある。以下にチートプログラム側の主な戦略を挙げる。

Kernel Driver

メモリの読み書きを行うためチートプログラムがカーネルドライバーとして振る舞う方式。こちらは検出は容易と思われる。 これは検出を回避するための戦略ではないが、プロセスのメモリを Read/Write するためのベーシックな方法なので紹介する。

DLL Injection

以下のURLに載っている方法である。

https://www.ired.team/offensive-security/code-injection-process-injection/dll-injection

Windows 起動後、Injectorと呼ばれるプログラムと、メモ帳などの任意の64ビットプロセスを起動する。

Injector からリモートスレッド機能にて、起動した任意プロセスにDLL化された本体となるチートプログラムをアタッチする.。

あたかも正常なプロセスが動作しているかのように振る舞う。実際は正常なプロセスへ注入されたチートプログラムが動作している。DLLというモジュールが存在する以上は、検出は容易な部類と思われる。

UEFI + DLL Injection

上記 DLL Injection のとおりDLLをアタッチする。

違いとしては、DLL が直接メモリを読み書きするのではなく、UEFI プログラム が DLL の代わりにメモリ Read/Write を担当する。

あらかじめ UEFIブートにて、メモリへの読み書きを担当するプログラムをロード・常駐させておく。

DLL がアタッチされると、Windows カーネル(ntoskrnl.exe)から、PsLookupProcessByProcessId カーネルAPIなど、Apex Legendsプロセスやメモリ配置を把握するための各種APIエントリポイント(メモリアドレス)を探索し、その位置などを UEFI プログラム にドライバ命令として送信する。

UEFIプログラムは渡されたそれらのアドレスをもとにWindowsカーネルAPIを実行し、メモリから各種情報を得る。

処理の難読化

メモリにロードされる処理の一部を実行時以外は XOR 等で難読化処理を施す。 アンチチートプログラムの特定文字列や特定バイト列による検出から保護することが目的である。

KVM/QEMU/VMware等の仮想化技術

仮想化ゲストOSにて APEX Legends を、ホストOSにてチートプログラムを動作させる。 チートプログラムには memflow や vmread など、ゲストOSのメモリの読み書きができる機能を有するライブラリを使用する。 通常、仮想化環境ではグラフィック性能が制限されるが、GPU Passthrough 機能を有するソフトウェアを使用してパフォーマンスを向上させることができる。 仮想化環境ではハードウェアIDを匿名化することができる。

考えうる対策

以下は筆者の妄想であり、こうしたら少しはマシになるんじゃないかと思う対策案である。

セキュアブートの強制

何かとトラブル報告の多いセキュアブートだがUEFIチートが防止できる点では有効と思われる。

Windows Defender 等の強制

販売されているチートの中には、動作要件の中に Windows Defender も含めたセキュリティ機能の無効化を求めるものがある。 これらの動作を強制することで防止できるのではと思われる。

仮想化プログラムの実行検知

先に挙げた代表的な仮想化プログラムの内部でAPEXが起動されていればロビーおよびマッチからの強制退出が考えられる

ゲームオブジェクトのメモリ配置のランダム化

チートコミュニティではAPEXクライアントが更新されるたびに、ゲームオブジェクトのメモリ上の配置が書かれたファイルが配布されている。 ゲームの起動ごとに配置をランダム化することで、こうした対応を不可能にさせられるかもしれない。

最後に

開発元である Respawn社が対策に本腰を入れてほしいことを願うばかりである。