キモブロ

Please spy check please, Fucking retard

チートの動作原理を調査した

チートについて対策するためにより理解を深めンとアカンなぁと思ったのでチートフォーラムで軽く勉強をした。なんかサンプルソースが公開されていたので読んだ。チートツール作者によれば、SourceEngineはサーバーに接続したときに

// 擬似コード
if( IsConnected ){
  sv_cheats = 0;
}

みたいな感じのコードがクライアント側で実行されている? ようなことを言っている。


で、そのIsConnectedの後の条件分岐(if)に機械語命令の "JNZ" が使われていて、ここのメモリアドレスを強制的にJMPに書き換えれば良いと。そうすることで、sv_cheats = 0をクライアント側で実行されないようにしているようだ。たしかにこのfixなら最小手で済みそうな気がする

JMPの機械語命令は0xEBであるから

byte[] op = new byte[] { 0xEB }; // JMP op
... 中略 ...
SigScan.WriteProcessMemory(A, B, op, (uint)op.Length, C);

こんな感じにしてるんだな。WriteProcessMemory Windows SystemCallを使ってhl.exe内の該当アドレスのJNZをJMPに書き換えている。


ただこれ、普通にSourceEngineのメモリ上の値をWriteProcessMemoryで書き換えちゃってるので当然ながら確実にVAC BANされる。なんか前見た情報だと、SourceEngineのメモリを外部プロセスから読み込む分にはBANされないみたいだけど、書込みするとBANされるらしい。おそらく、VAC BANされる前提で大暴れしたい人がこの手法を使ってるみたいな感じなのかなぁ。まぁ正直この手法はVAC BANされるのでどうでもいいやみたいな感じである。

問題はVAC BANされないような類いのチートツールなんだけども、これについては要調査。定期的にスクリーンショットを撮影してサーバーに送る、みたいなPunkBusterみたいな手法が有効だと思う。しかしスクショ撮影時には映らないようにするみたいなのもあるのでこれまた困ったもんだ。結局、イタチごっこをしなければならないんだろうなぁ。逆に言えばイタチごっこしてれば正規ユーザー達は勝てる。

nProとかあのへんの動作原理もしらべんとなー。誰かブログに詳細書いてくれないかな。(営業妨害で訴えられるから無理か。)