バイナリやメモリの改変とかの不正に対する技術について。
とりあえずC#でお願いします。
例えばチェックサムとかでバイナリ改変チェックを入れたとして
そのチェック自体をバイナリ改変でスルーすることができると思いますが
その対策とかはあるのでしょうか?
おそらくどんな対策(nProにしても)も上級者には破られると思いますが
中級者くらいまで防ぐ目的でお願いします。
不正対策技術
■ このスレッドは過去ログ倉庫に格納されています
1名前は開発中のものです。
2009/03/25(水) 04:53:05ID:DQcGtJGv2名前は開発中のものです。
2009/03/25(水) 12:12:32ID:23oJFWZJ またしても、このまま何年も残るスレがここに誕生。
2009/03/25(水) 17:38:14ID:zdTg+CO8
なぜC♯なのかと小一時間考えたが、理由が見つからなかった。
ハードウェア認証にすれば、コストはかかるけどほぼ破られないよ。
ソフトウェア的な対策では、すぐに破られるので、
ドングル使いましょう。
ハードウェア認証にすれば、コストはかかるけどほぼ破られないよ。
ソフトウェア的な対策では、すぐに破られるので、
ドングル使いましょう。
2009/03/25(水) 17:49:41ID:Z98x9JtB
トングル使ってもチェックしてるのがソフトウェアだったら大して変わらんとおも
2009/03/25(水) 18:19:09ID:ME26m55j
まずは C# 難読化 で検索とかしたのか?
2009/03/25(水) 20:37:40ID:wUjBbi10
チートについて知りたいなら、まず自分でゲームのチートしてみれ。
バイナリ改変チェック、デバッガー感知、プロセスメモリ読み書き&
メモリ(CODE)改変チェック、フック感知、プロセスリスト改変、SDT改変チェックetc
nProは実質rootkitだしえぐいことやってるけど、専用のサーバが必要だから
オンラインゲーム専用。
ソフトウェアセキュリティは、アプリ領域、カーネル領域に渡ってもう
何十年も議論されてることだから、やりだすときりがないよ。
パッキングやデバッガー感知程度じゃすぐ破られるからチート対策に
時間をかけるのは諦めてゲーム作りに注力しれ。
バイナリ改変チェック、デバッガー感知、プロセスメモリ読み書き&
メモリ(CODE)改変チェック、フック感知、プロセスリスト改変、SDT改変チェックetc
nProは実質rootkitだしえぐいことやってるけど、専用のサーバが必要だから
オンラインゲーム専用。
ソフトウェアセキュリティは、アプリ領域、カーネル領域に渡ってもう
何十年も議論されてることだから、やりだすときりがないよ。
パッキングやデバッガー感知程度じゃすぐ破られるからチート対策に
時間をかけるのは諦めてゲーム作りに注力しれ。
71
2009/03/26(木) 09:05:14ID:XEePzfhA C#というのは現在作成しているものがそれだったからです。
難読化につきましては参考になりました。
チートについてはツールでメモリ変えたりとかくらいで
バイナリ改変とかはどこを変えればよいかは分かりません。
デバッガーで追って探すのかと思いますがよく分かりません。
あまり時間はかけたくありませんがミジンコ級+αを排除するにあたって
バイナリ改変チェック、プロセスメモリ読み書き& メモリ(CODE)改変チェック
あたりについて何かご教授ねがえませんでしょうか?
難読化につきましては参考になりました。
チートについてはツールでメモリ変えたりとかくらいで
バイナリ改変とかはどこを変えればよいかは分かりません。
デバッガーで追って探すのかと思いますがよく分かりません。
あまり時間はかけたくありませんがミジンコ級+αを排除するにあたって
バイナリ改変チェック、プロセスメモリ読み書き& メモリ(CODE)改変チェック
あたりについて何かご教授ねがえませんでしょうか?
2009/03/26(木) 12:13:25ID:i3D+XMq7
チートする旨みを無くせばいい。
個人ゲームの場合は、自らデータ改変ツールも配布するとか。
個人ゲームの場合は、自らデータ改変ツールも配布するとか。
2009/03/26(木) 12:47:00ID:bDTwkiY2
ゲームする旨みも無くなるな
2009/03/26(木) 13:15:07ID:8D1MhSXx
たしか、webブラウザハッキングコンテストでランダムメモリになってるとむずいってあったな
2009/03/26(木) 13:32:02ID:iTPUhNHi
チートを防ぐのは難しいが、チートする人間を分離するのはやりやすい
例えば全国対戦ゲームなら
チートや回線切りを繰り返すユーザーを懲罰マッチングに入れてしまう
もちろんそういう情報は公開しないし、判定はセンターサーバーにやらせる
kickは集団チーターに対処できないから駄目
垢削除もサブ垢を増やすだけなので根本的な解決とは言えない
違反者を知られぬように隔離するのが有効
なぜなら、チートをしないまっとうなユーザーを守れれば目的は達成されるから
こういう風に考え方を変えないと、作業量が多くなりすぎてゲーム製作自体が成り立たなくなると思う
例えば全国対戦ゲームなら
チートや回線切りを繰り返すユーザーを懲罰マッチングに入れてしまう
もちろんそういう情報は公開しないし、判定はセンターサーバーにやらせる
kickは集団チーターに対処できないから駄目
垢削除もサブ垢を増やすだけなので根本的な解決とは言えない
違反者を知られぬように隔離するのが有効
なぜなら、チートをしないまっとうなユーザーを守れれば目的は達成されるから
こういう風に考え方を変えないと、作業量が多くなりすぎてゲーム製作自体が成り立たなくなると思う
2009/03/26(木) 20:01:27ID:FCkzqPlt
2009/03/26(木) 23:32:51ID:8D1MhSXx
めちゃくちゃうまい人が誤って入っても、俺より強い奴がまだ居るんだなと練習し続けるかも名
2009/03/28(土) 01:58:28ID:VmnRmpjg
>7
同人レベルのオフラインゲーならチート対策なんかに労力使わないほうが
いいと思うけどね。まぁちょっとだけ書いとく。
チートは基本アセンブラだから、開発言語は関係ない。ランタイムにちょっと
癖があるかもだけど。
・バイナリ改変、デバッグ起動対策→パッキング
asprotect や upx なんかをぐぐれ。exe をパッキングするだけ。
・デバッグアタッチ対策→ IsDebuggerPresent() (kernel32.dll) をスレッドで
常時回してチェック。olly等のアプリデバッガーに有効。カーネルデバッガには効かない。
また、普通の解析者ならこの関数callはすぐ潰すので気休め程度。
少し気合いれるなら、ゲームプロセスを2つに分けて親プロセスから子プロセスを
デバッグアタッチしてしまうことで、他からのデバッグを防ぐことも可能。
(続く)
同人レベルのオフラインゲーならチート対策なんかに労力使わないほうが
いいと思うけどね。まぁちょっとだけ書いとく。
チートは基本アセンブラだから、開発言語は関係ない。ランタイムにちょっと
癖があるかもだけど。
・バイナリ改変、デバッグ起動対策→パッキング
asprotect や upx なんかをぐぐれ。exe をパッキングするだけ。
・デバッグアタッチ対策→ IsDebuggerPresent() (kernel32.dll) をスレッドで
常時回してチェック。olly等のアプリデバッガーに有効。カーネルデバッガには効かない。
また、普通の解析者ならこの関数callはすぐ潰すので気休め程度。
少し気合いれるなら、ゲームプロセスを2つに分けて親プロセスから子プロセスを
デバッグアタッチしてしまうことで、他からのデバッグを防ぐことも可能。
(続く)
2009/03/28(土) 02:00:03ID: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;
}
}
こんな感じで、メモリ上にパラメータを生で持たせないようにすれば、
外部ツールで経験値の値をメモリ検索されてもすぐには割り出せなくなる。
ミジンコ程度なら防げるだろう。
やりだすときりがないから。
フリーや同人ゲーのチート対策は労力に見合わないよ。
161
2009/03/28(土) 09:11:53ID:wSp/k8jq 詳しくありがとうございます。
こちらもいろいろ調べましてパッキングとか
デバッグアタッチしておくとかプロセス一覧から隠すとか
やってみたところです。
プロセス一覧から隠すのがかなりあやしいですが・・
あとパラメータを生で持たせないようにするってのも入れてみたいと思います。
とりあえずこれで対策は一段落つきました。
いろいろ参考になる意見ありがとうございました。
こちらもいろいろ調べましてパッキングとか
デバッグアタッチしておくとかプロセス一覧から隠すとか
やってみたところです。
プロセス一覧から隠すのがかなりあやしいですが・・
あとパラメータを生で持たせないようにするってのも入れてみたいと思います。
とりあえずこれで対策は一段落つきました。
いろいろ参考になる意見ありがとうございました。
2009/03/28(土) 09:58:56ID:dcf96ssf
チートに関しては「チートされて損をするか?」って議論も必要
例えば会社が作るオンラインゲームなら、チート対策は必須だろう
課金システムを改変されたりしたら大損、BOTなどの使用はユーザーを減らすし、
対戦でチートを使われるだけでもプレイヤーの顰蹙を買う
逆に、個人で作るゲームやオフラインゲーム、アーケードのオンラインゲームは気を使わなくてもいい
チートをやったところで誰かに迷惑をかけるわけではないし
アーケードゲームならば、チートをやった店に懲罰が降りかかるので、違反が限りなく起こりにくい
チート対策にコードを書いたり、監視スレッドを走らせたりすると、ゲーム自体の挙動が遅くなる恐れがある
データの保護に暗号化などを使っても同じ
ゲームを守るために面白さが犠牲になってしまっては意味がないということ
「その対策は本当に必要か?」という議論を常にやってほしい
例えば会社が作るオンラインゲームなら、チート対策は必須だろう
課金システムを改変されたりしたら大損、BOTなどの使用はユーザーを減らすし、
対戦でチートを使われるだけでもプレイヤーの顰蹙を買う
逆に、個人で作るゲームやオフラインゲーム、アーケードのオンラインゲームは気を使わなくてもいい
チートをやったところで誰かに迷惑をかけるわけではないし
アーケードゲームならば、チートをやった店に懲罰が降りかかるので、違反が限りなく起こりにくい
チート対策にコードを書いたり、監視スレッドを走らせたりすると、ゲーム自体の挙動が遅くなる恐れがある
データの保護に暗号化などを使っても同じ
ゲームを守るために面白さが犠牲になってしまっては意味がないということ
「その対策は本当に必要か?」という議論を常にやってほしい
2009/03/28(土) 12:10:58ID:PoTwSL3E
2009/03/28(土) 16:27:27ID:r7XGExcp
2009/03/29(日) 00:14:00ID:XYxGas62
2009/04/06(月) 21:58:18ID:7OvX1Q9e
毎フレーム数値をチェックして本来変化するわけのないタイミングで数値が変化したらエラー吐いて強制終了とか効かないかなぁ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 🇺🇸🇨🇳米中関係は「極めて強固」とトランプ氏… ★4 [BFU★]
- 【野球】大谷翔平、WBC出場を正式表明! 「日本を代表して再びプレー嬉しく思う」 侍ジャパンで世界一連覇狙う★2 [冬月記者★]
- 日米首脳、電話で緊密な連携確認 台湾答弁協議の有無明言せず… [BFU★]
- 【速報】外務次官が中国大使と面会 [蚤の市★]
- 「ホストに貢ぎたい」と海外で売春する日本人女性 2カ月で2千万円稼ぐケースも [1ゲットロボ★]
- 「台湾有事」発言の高市早苗氏が首相である限り日本経済はボロボロになる 一刻も早く「ポスト高市」を真剣に議論すべきだ 古賀茂明氏 [少考さん★]
- 高市早苗、トランプに電話会談でガチギレされた模様wwwwwwwwwwwww会見で半泣きだったという情報も [271912485]
- 高市、国連の全ての加盟国に「私悪くないもん」という趣旨の迷惑メールを送付 [931948549]
- 【あっ…】トランプと習近平、ガッツリ握手。高市早苗、ガチで終了。 [153490809]
- 小林よしのり「ネトウヨ全体主義と戦うぞ!」 [616817505]
- 小野田大臣「山上はただのテロリスト」政府によってテロリスト公認 [245325974]
- トランプ、高市早苗に電話会談で説教へ「台湾の中国への復帰が国際秩序」「アメリカは重要性を理解している」 [329329848]
