2012年02月

2012年02月11日

バトルフィールド3

ちょっと、このブログのネタから外れるので
この記事は無視していただいてよいです。

StylishNoobさんの動画を見る限り、たぶんAimアシストでも使ってるんだろなぁと
思ってましたが、OFFで検証した結果、だいたい同じような戦績を出されたようです。
疑ってた奴ら土下座しろとかいわれてるらしい。
口で土下座したとかいっても信用ないと思いますから
反省の気持ちを表すためにツールをUPします。

2012/02/11日現在のクライアント用
http://members.jcom.home.ne.jp/alpa001/Blog/Bin/minimap_0211.zip

2012/02/18日現在のクライアント用
http://members.jcom.home.ne.jp/alpa001/Blog/Bin/minimap_0218.zip

2012/04/02日現在のクライアント用(4/4 再調整しました)
http://members.jcom.home.ne.jp/alpa001/Blog/Bin/minimap_0402.zip
http://members.jcom.home.ne.jp/alpa001/Blog/Src/bf3_0402.txt

チート自作用にBF3(2012/02/18日現在)の解析資料をUPします。
http://members.jcom.home.ne.jp/alpa001/Blog/Src/tag1.txt
http://members.jcom.home.ne.jp/alpa001/Blog/Src/tag2.txt
http://members.jcom.home.ne.jp/alpa001/Blog/Src/norecoil.txt
http://members.jcom.home.ne.jp/alpa001/Blog/Src/nospread.txt
http://members.jcom.home.ne.jp/alpa001/Blog/Src/minimap.txt


*BF3.EXEの上記アドレスはPunkBusterのチェック範囲ですので
テストするのであればPB無効サーバーで行うことをおすすめします。

2012/05/01日現在のクライアント用
http://members.jcom.home.ne.jp/alpa001/Blog/Bin/minimap_0501.zip



unvirus at 20:04|PermalinkComments(71)TrackBack(0) チート 

2012年02月04日

nProtectに検出されないWallHackの考察

韓国チョンFPS等でWallHackを行おうとすると、現状ではほとんどチート検出されてしまい
WallHackが出来ません。

しかし、GhostReplayや一部のツールではWallHackが可能です。
この違いは何なのでしょう。
チート検出される物とされない物の違いを考察してみます。

☆WallHackの仕組み
ゲームプログラムが画面を描画する部分に取り付いて、キャラのテクスチャーを視認しやすい色に
変更したり、描画位置を変更して最前面にキャラを描画することで、壁裏のキャラを
視認できるようにするチートプログラムです。

☆チート検出されるWallHack

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

・D3Dxx.DLL(D3D9.DLLなど)の特定部分のコードにJMPコードを仕込む方法
 基本的にプログラム領域を1Byteでも書き換えるとチート検出されます。 

・クライアントの特定部分のコードにJMPコードを仕込む方法
 基本的にプログラム領域を1Byteでも書き換えるとチート検出されます。 

このような感じで、フック処理が取り付く場所がないように見えます。
では検出されないWallHackはどうなのでしょうか。

☆チート検出されないWallHack

・DirectXはグラボの違いを吸収して、GeForceやRadeonでも同じ使い方でゲームのグラフィックを
 描画する事が出来ます。
 (実際にはグラボ依存します。でも基本的な使用方法は一緒です。)
 GeForceとRadeonは違う物なので、当然ドライバも異なり、使い方も違うと思われます。
 しかしDirectXとして利用できる様にするためには、その差を吸収しなければなりません。
 この仕組みを実現するために、DirectXの下位部分はグラボ会社が提供したDLLを使用しています。
 実際にはGeforceの場合はnvd3dum.dll、Radeonの場合はaticfx32.dllがD3Dxx.DLLから呼び出されます。
 チート検出されないWallHackはnvd3dum.dllやaticfx32.dllを書き換えているのです。
 nvd3dum.dllやaticfx32.dllはドライバのバージョンによっても異なりますし、
 チート検出側から見て、ユーザーはGeforce、Radeonまたは、そのほかのグラボのどれを
 使用しているか全く分かりません。
 このためnProtectなどはnvd3dum.dllやaticfx32.dllをチェックしていません。
 ここに、つけ込んだWallHackが今も生き残っている様です。
 (nProtectはアンチウイルスソフトの様に、チートツールのバイナリバターンを検出する機能があります。
  機能的に防げていないWallHackでも、公開するとWallHackツールのバイナリパターンから
  チート検出されるように対策される場合があります。)

☆WallHackを自作する場合
 まずは自作のDirectXプログラムに対してWallHackを作成します。
 このとき描画処理をデバッガでトレースしてnvd3dum.dllやaticfx32.dllが呼び出されるまで
 追いかけて、そこにフックをかける様にするのが良いと思います。
 私が現状で確認出来たのは以上です。どのようにフックするポイントを割り出すかや
 適切な取り付き位置はまだ分かっていません。
 解析メモを以下に置いておきます。

 http://members.jcom.home.ne.jp/alpa001/Blog/Src/wh.txt



unvirus at 20:27|PermalinkComments(12)TrackBack(0) 解析