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

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

GSD について

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

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

ライセンスについて

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

GSD_Crosshair

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

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

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

VAC(チート検出)との関係

API フックという手法そのものは、チート専用のものではありません。字幕表示ソフトや Sound Blaster の Creative ALchemy も、DLL の主要な関数(API)のアドレスを書き換えて自分のプログラムを経由させる、まったく同じことをしています。

ただし、仕組みが同じであることは安全を意味しません。 問われるのは手法ではなく、そのソフトが対戦でどれだけ有利になるかのほうです。字幕を出すことと、画面の中央に照準を描くことは、仕組みが同じでも意味が違います。

リスク管理

BAN の範囲は Game Engine ごとらしいので、メインで遊ぶゲームと同じエンジンでは、この種のソフトを使わないでおくのが安全です。CS をメインにするなら HL1 エンジンのゲームでは使わない、L4D をメインにするなら Source エンジンのゲーム(CS:S など)では使わない、という具合です。