GSD の仕組みについてのレポート

DirectX の API フックライブラリ GSD の仕組みについてのレポートです。関連事項として、VAC(Valve のチート対策システム)のチート検出についてもメモします。

GSD について

DirectX の API フックをして、任意のピクセルを上書きできるライブラリです。DirectX の API をフックしているため、対象となるアプリケーションが DirectX を使っていないと意味がありません。たとえば Minecraft など OpenGL で映像を描画しているソフトでは使えません。

GSD を利用したソフトウェアについて:

ライセンスについて

GSD はソースを含め、gsd.dllgsd.lib.vcgsd.h が公開されているので、これらを使用して自分のアプリケーションに組み込むことができます。ライセンスは LGPL なので、DLL を外部からリンクする(使用する)だけなら、GPL のように利用側のソースを公開する義務はなく、比較的気軽に利用できます。

GSD_Crosshair

GSD を利用した習作として、画面の中央に crosshair(照準)を描画するソフトを作ってみました。GSD によって描画する画像データが小さければ、それほど処理は重くなさそうです。

Killing Floor のウィンドウ中央に GSD_Crosshair が緑の crosshair を描画している様子。右下に「GSD Crosshair (APIフック中)」のダイアログ

参考画像の原寸版:gsd_crosshair_ingame.png

GSD_Crosshair はチートかどうか

結論から言えば、限りなくチートに近いがチートではない、という存在だと思います。たとえば、字幕表示ソフトはやっていることがまったく同じです。しかし BAN されていません。他にも Sound Blaster 社の Creative ALchemy の仕組みも手法は同じで、DirectSound の DLL の API フックをしています。DLL に存在する主要な関数 (API) のアドレスを書き換えて、自分のプログラムを経由させるようにしているのです。

つまり、こういった手法がチートであるとすれば、字幕ソフトもチートとして扱わなければならないはずです。もちろん人間的な意志が介在して、GSD を利用したクロスヘア描画アプリだけをチートとして扱う可能性はありますが、Valve の VAC BAN FAQ を見るとこのような「人間的な意志は介在することはない」と書いてありますし、そして「絶対に誤検出しない」とも言っています。

Steam Forum VAC2 FAQ(和訳)— http://www.negitaku.org/news/4540/

VAC BAN は人間の判断が主観には決してなりません

とはいえリスク管理の必要性

そうはいっても、突然 VAC に「人間的な意志」が介在するようになるかもしれませんし、すっかり安心してしまって多用するのは非常に危険です。BAN の範囲は Game Engine ごとらしいので、たとえば CS をメインでやるのであれば、HL1 のエンジンのゲームでは万が一のためにこういったソフトウェアは利用しないようにするのが、ベターなリスク管理方法だろうと思います。L4D をメインでやりたいのであれば Source エンジンゲーム(CS:S など)も同様です。

当たり前ですが、過去に BAN された前例がない GSD 方式の字幕ソフトを利用することは、危険性は高くありません。その事実を知っていたとしても精神的に不安であれば、リスク管理として、自分がこれからメインでやろうとしているゲームと同じエンジンではこういったソフトは利用しない、というリスク管理をしたほうがいいんじゃないか、という話です。俺はそんなことしないけどね。