09/03/26 13:32:02 iTPUhNHi
チートを防ぐのは難しいが、チートする人間を分離するのはやりやすい
例えば全国対戦ゲームなら
チートや回線切りを繰り返すユーザーを懲罰マッチングに入れてしまう
もちろんそういう情報は公開しないし、判定はセンターサーバーにやらせる
kickは集団チーターに対処できないから駄目
垢削除もサブ垢を増やすだけなので根本的な解決とは言えない
違反者を知られぬように隔離するのが有効
なぜなら、チートをしないまっとうなユーザーを守れれば目的は達成されるから
こういう風に考え方を変えないと、作業量が多くなりすぎてゲーム製作自体が成り立たなくなると思う
12:名前は開発中のものです。
09/03/26 20:01:27 FCkzqPlt
>>11
>>違反者を知られぬように隔離する
いいアイディアだな
13:名前は開発中のものです。
09/03/26 23:32:51 8D1MhSXx
めちゃくちゃうまい人が誤って入っても、俺より強い奴がまだ居るんだなと練習し続けるかも名
14:名前は開発中のものです。
09/03/28 01:58:28 VmnRmpjg
>7
同人レベルのオフラインゲーならチート対策なんかに労力使わないほうが
いいと思うけどね。まぁちょっとだけ書いとく。
チートは基本アセンブラだから、開発言語は関係ない。ランタイムにちょっと
癖があるかもだけど。
・バイナリ改変、デバッグ起動対策→パッキング
asprotect や upx なんかをぐぐれ。exe をパッキングするだけ。
・デバッグアタッチ対策→ IsDebuggerPresent() (kernel32.dll) をスレッドで
常時回してチェック。olly等のアプリデバッガーに有効。カーネルデバッガには効かない。
また、普通の解析者ならこの関数callはすぐ潰すので気休め程度。
少し気合いれるなら、ゲームプロセスを2つに分けて親プロセスから子プロセスを
デバッグアタッチしてしまうことで、他からのデバッグを防ぐことも可能。
(続く)
15:名前は開発中のものです。
09/03/28 02:00:03 VmnRmpjg
・プロセスメモリ読み書き対策→プログラムで工夫
チートする場合、うさみみハリケーンのようなツールでゲームパラメータの数値をサーチし
プレイヤーのLv値やらなにやらを割り出してメモリを書き換えるのが一番簡単。
外部プロセスからのReadProcessMemory/WriteProcessMemoryを阻止するのは
困難なので(グローバルフックやシステムコール改変が必要)、プログラムで工夫する。
例えばC#で、プレイヤーのクラスがあったら
public class PlayerInfo {
int m_key = 0xe6c5b4a3;
int m_exp = 0 ^ m_key;
public int getExp(){ return (m_exp ^ m_key); }
public void addExp(int num){
m_exp = (num + getExp())^ m_key;
}
}
こんな感じで、メモリ上にパラメータを生で持たせないようにすれば、
外部ツールで経験値の値をメモリ検索されてもすぐには割り出せなくなる。
ミジンコ程度なら防げるだろう。
やりだすときりがないから。
フリーや同人ゲーのチート対策は労力に見合わないよ。
16:1
09/03/28 09:11:53 wSp/k8jq
詳しくありがとうございます。
こちらもいろいろ調べましてパッキングとか
デバッグアタッチしておくとかプロセス一覧から隠すとか
やってみたところです。
プロセス一覧から隠すのがかなりあやしいですが・・
あとパラメータを生で持たせないようにするってのも入れてみたいと思います。
とりあえずこれで対策は一段落つきました。
いろいろ参考になる意見ありがとうございました。
17:名前は開発中のものです。
09/03/28 09:58:56 dcf96ssf
チートに関しては「チートされて損をするか?」って議論も必要
例えば会社が作るオンラインゲームなら、チート対策は必須だろう
課金システムを改変されたりしたら大損、BOTなどの使用はユーザーを減らすし、
対戦でチートを使われるだけでもプレイヤーの顰蹙を買う
逆に、個人で作るゲームやオフラインゲーム、アーケードのオンラインゲームは気を使わなくてもいい
チートをやったところで誰かに迷惑をかけるわけではないし
アーケードゲームならば、チートをやった店に懲罰が降りかかるので、違反が限りなく起こりにくい
チート対策にコードを書いたり、監視スレッドを走らせたりすると、ゲーム自体の挙動が遅くなる恐れがある
データの保護に暗号化などを使っても同じ
ゲームを守るために面白さが犠牲になってしまっては意味がないということ
「その対策は本当に必要か?」という議論を常にやってほしい
18:名前は開発中のものです。
09/03/28 12:10:58 PoTwSL3E
>>17
同感。
また徒に対策を強化することで、かえって対抗心を煽るってケースもあるしな。
チートすることよりもプロテクトを破ることに燃えられては、ますます無意味。
19:名前は開発中のものです。
09/03/28 16:27:27 r7XGExcp
チートって攻撃力とかパラメータの数値をイジルだけ?
たとえば、こういうゲームはチートできるの?
URLリンク(d.hatena.ne.jp)
20:名前は開発中のものです。
09/03/29 00:14:00 XYxGas62
>>19
おもろいねこれ。
チートはできるよ。
Life10の数値をLife1万とかにすればゲームバランスくずれちゃうでしょ。
21:名前は開発中のものです。
09/04/06 21:58:18 7OvX1Q9e
毎フレーム数値をチェックして本来変化するわけのないタイミングで数値が変化したらエラー吐いて強制終了とか効かないかなぁ
22:名前は開発中のものです。
09/04/07 01:05:27 YsFjy+bQ
>>21
デバッガでエラー用文章を参照している部分を検出されたらアウト
もしくは、終了処理から辿られてもダメ
たぶんほとんど効かないと思うよ
23:名前は開発中のものです。
10/04/24 01:16:22 9G78iIee
宮島
24:名前は開発中のものです。
10/05/09 15:32:46 ED8VE6R2
あ
25:名前は開発中のものです。
10/05/10 00:40:18 DZxYnn6i
ピドさん、まだいたのか。最近どうよ?