2016-10-03 3 views
1

私は基本的に私のクライアント(ユニティゲーム)と話すためにバイナリプロトコルを使うC++サーバを持っています。ログインプロセスの一環として、クライアントバージョンをサーバーに送信したいと考えています。サーバーは、接続に問題はないと答えて(ログイン資格情報が正しいと仮定して)、クライアントのバージョンが古くなった場合、古いバージョンのクライアントを返します。ゲームクライアントバージョンのなりすましを防止するにはどうすればよいですか?

私の質問は、古いクライアントバージョンとなりすましを最新のバージョンとして使用している人々をどうして防ぐことができますか。最新のものだと思っている時代遅れのクライアントを扱っているため、これにより潜在的にサーバーのバグが発生する可能性があります。

+1

あなたができることはあまりありません。専用の攻撃者は、クライアント側のデータを欲しいものに偽装することができます。通信サーバーの側を確認し、古いものや無効なものを送信した場合にはそれらを切断するだけです。 –

+0

パスワードに沿って送信される「キーワード」または単にクライアントのハッシュを「魔法のキーワード」として使用します。そのため、ハッシュとバージョンを偽装する必要があります。 – Shark

答えて

0

私はこのような何か試してみた:クライアントのバージョンを渡して一緒に

を、私はちょうど余分な安全(彼らはおそらくそう簡単に偽装しません何か)であることをハッシュ化されたパスフレーズを渡すと思います。

Eamples:

クライアントバージョン1.00
パスフレーズは、 "これはバージョン1.00である" = 4fd6b272e62e04dac52cab22e0643811
ですから、パスフレーズは、「これは、バージョン1.1aのある1.004fd6b272e62e04dac52cab22e0643811

クライアントバージョン1.1A
を受けるだろう"= a475834cb992bcb649c819ba83267b23
あなたが受け取るだろう1.1aa475834cb992bcb649c819ba83267b23

真実は、あなたは専任の人を止めることができないということです。鍵穴を開けることができます。あなたができることは、それをもう少し複雑にすることで、彼らがあきらめたり、権限によって検出されるのに十分な時間(または労力)がかかります。

投稿した例は、次の理由で偽装するのが難しいです。
a)SHA1ではなくMD5を使用していると推測する必要があります。
b)彼らはあなたが単に<version code><version string>
を連結していることを理解する必要があります。c)それを把握するために全部まとめてください。あなたがSSL経由でこれを送る場合、wiresharkingは無駄になり、ログインフェーズ中に送信されているものを読むために、他の形式の魔法を使うだけです。

だから、これにSSLを使用してください。

デバッガアップデート:

デバッガいいえ、サーバー上でパスフレーズのチェックが正常に行われているため、不一致の場合は接続を切断します。 あなたのクライアントでデバッガチェックがあり、デバッガが存在する場合はNOTになることを願っています。自分のデバッグビルド用に保存してください。これは私たちが話しているリリースビルドです。

しかしかかわらず、デバッグに(そしてそのような値を突く)、彼らは物事のカップルを必要とする:
1)デバッグシンボル、
2)私はあなたが彼らに非を手渡していない願っていバイナリ

を解体しましたすべてのデバッグシンボルがまだ添付されている実行可能ファイルを削除します。それ以外の場合は、ソースコードも渡してください。

私たちが話しているのはC++で、作成する前に難読化して、作成後にストリップです。逆アセンブラで意味のあるものを得るにはしばらく時間がかかるでしょう。デバッガはコードがまだ構築されていれば、解体された難解なコードを実行するのを助けません。

しかし、これは問題の範囲外です。ハッシュコードをハードコードしたパスフレーズでバージョンを連結すると、サーバー上のバージョンをどのように把握できるのです。ミスマッチがあると、彼らは何かファンキーなことをしようとしているので、それらをドロップすることができます。無効versionStringの

例:
1.1a +最初の4つの文字(実装するのは難しいがあなたであることをハッシュ( "これはバージョン1.00である")= 4fd6b272e62e04dac52cab22e0643811

ない:

がある1.1a4fd6b272e62e04dac52cab22e0643811を受け取りますversionCode、残りはsaltです)、塩が良い場合は、その塩のversionCodeと比較して確認してください。さらに、実行可能ファイルのチェックサムをチェックして、ファイルの改ざんが行われていないことを確認します。そして、初心者のクラッカー/ハッカーがあなたに何かを引っ張っても安全ではないはずです。しかし、彼が本当に決定している場合は、彼に数ヶ月を与えると、彼はそれをビート:)またはこれで数週間を無駄に彼の心を変更しないでくださいフルゲームを購入する。

+0

デバッガを使ってパスフレーズを変更することはできますか?すなわち、1.0と "This is version 1.00"を1.1aと置き換えることができます。 "This is version 1.1a"ですか?これが愚かな質問であれば私を許してください。 – FerretBuster

+0

デバッガですか? ?いいえ、サーバー上でパスフレーズのチェックが正常に行われているため、不一致の場合は接続を切断します。彼らがただ1.00から1.1aに変わったとしても、ハッシュされた部分は一致せず、あなたは彼が良くないことを知っているでしょう。 – Shark

+0

デバッガ関連のアップデートを行いました。私はここで私たちが対抗しようとしていることを見失っています。デバッガ環境でクライアントを実行してサーバーに接続する人は、クライアントバージョンimhoを偽装するよりも大きな問題です。 – Shark

関連する問題