3

私はプログラムを持っています、そしてそのプログラムにはユーザーがログオンしたときにだけ変更されるいくつかの変数(ユーザー名と「特権レベル」)があります。プログラムの実行中にこれらの変数をメモリ編集などから「保護」する方法はありますが、ユーザーが他のユーザー名でログオンした場合でも、プログラムはそれらを変更できます。

constまたはreadonlyのいずれかを使用することは機能すると思いましたが(テストされていません)、ユーザーが再ログするときにそれらを変更することは可能ですか?

また、プログラムで使用されている文字列をハッシュ/暗号化して、ユーザーがメモリを検索して(つまり、Cheat Engineを使用して)文字列を見つけられないようにすることは可能ですか?

4

3 に答える 3

7

ソフトウェアとユーザーの資格情報がユーザーのマシンで実行されている場合、ユーザーによる値の変更を停止することはできません。

資格情報とアクセスがリモートサーバーに保存されている場合は、そのサーバーを使用して、任意の期間が経過すると期限切れになるハッシュトークンのみをユーザーに保存させることができます。そのトークンをルックアップとして使用して、サーバーからユーザーのプロファイル情報を取得します。

クライアント側で行われることはすべて操作/ハッキングされる可能性があるため、引き続き問題が発生します。すべてのロジックを中央サーバーに保持すると、問題が発生しないことを確信できますが、システムのパフォーマンスは低下します。

セキュリティとパフォーマンスのために中央サーバーの長所と短所を比較検討し、自分に最適なバランスを選択する必要があります。

于 2009-07-02T00:00:13.563 に答える
2

const(ever)またはreadonly(初期化後)変数を変更することはできないため、機能しません。

おそらく最良のオプションは、これらの変数を作成/初期化/設定するロジックを、ログオンプロセス中に設定されるクリーンなメソッドやプロパティにラップすることです。これによりそのコードが分離されるため、少なくとも簡単に理解できます。

文字列の暗号化に関しては、実行時にその目的を処理するためにSecureStringを使用できます。コンパイル時に、コードを難読化できます(多くの難読化ツールは文字列暗号化をサポートしています)。

于 2009-07-01T23:55:54.350 に答える
1

あなたがそれをすることができる信頼できる方法はありません。ものを暗号化することで、それを難し​​くすることができますが、不可能になることはありません。最悪の場合、ユーザーはデバッガーを接続してメモリを直接変更できます。

于 2009-07-01T23:54:14.370 に答える