読者です 読者をやめる 読者になる 読者になる

めいくりぷとのブログ

技術的なことやゲームのことやら・・・

プロテクターに検出されないD3D・OpenGLフックの考察

FPS等でWallhackやD3Dフックをベースにしたチートを行うにも殆どのゲームでXignCodeやHackShield, NGS(BlackChiper)などのプロテクターが導入されているため、チート検出されてしまいます。

ですが、海外フォーラム等に落ちている物などで、検出されずに使えるものも存在します。
検出される物とされない物の違いをプロテクター別で考察していきます。

チート検出される物

[XIGNCODE, nProtect, NGS(BlackCipher), HackShield]

・IDirect3DDevice9インターフェースなどのメンバ関数を示すアドレスを書き換えてフックする方法 (関数テーブルの書き換え)
IDirect3DDevice9の場合だと、インターフェースが示すアドレスがD3D9.DLLの範囲に収まるかどうかをチェックしていますので、これに当たらないアドレスがある場合はチート検出されます。

・D3Dxx.DLL/OpenGL32.DLLの特定部分にJMPコードを仕込ませてフックする方法
基本的に1Byteでも書き換えるとチート検出されます。

HackShield(v5.6.34.449, v5.7.6.502)は D3Dxx.DLL, OpenGL32.DLLにCRCを実装しているため、
適当なアドレスをCEのRead Accessで調べてみると...(何故か仮想化されていないので、検出関数がすぐ見つかります。)

チート検出されない物

何度か記事で上げましたが、グラフィックドライバにつけ込んだ物がまだ生き残っているようです。(XignCodeで確認済み)
D3Dxx.DLLはWDDM, OpenGLはICDを...(省略

唯一NGSだけはグラフィックドライバもチェックしています。
・関数テーブル上の関数が示すアドレスの配置範囲のチェック
・関数テーブル上の関数が示すアドレス分のメモリのチェック
がありますが、Mid function? (関数の途中にJMPコードを仕込ませてフックする方法)でどうにかなります。

まあこれくらいです..

WDDM, OpenGL ICDの説明は省きましたが、過去記事にそれっぽいのがいくつかありますので、そちらを見てください。(参考にはなりませんが())


以上...と説明していた夢の内容でした。