1- .Net アプリケーションがクラックされないようにする方法は?
コンピューターがあなたのコードを実行できる場合 + ハッカーが自分のコードをあなたよりも高い特権レベルで実行できる場合、アプリのクラックを 100% 防止できるものはありません。実行可能ファイルにアクセスでき、ターゲット プラットフォームにアクセスできない場合でも、ステップスルーしてターゲット プラットフォームが行うことを模倣し、保護がどのように行われているかを理解することができます。
2-ハッカーは変更を行ったので、私のコードを知っています。どのような手順を踏む必要がありますか?
認証部分を完全に書き直して、最初からやり直す必要がありますが、もう一度取得します。それは時間の問題です。
3- 難読化ツールについてインターネットで読みました。しかし、ハッカーは私のコードを知っています。どうすればよいでしょうか?
難読化されていないコードが得られたので、ジンニはボトルから出てきました。ソフトウェアを大幅に書き直さない限り、できることはあまりないので、最初からやり直す必要があります。難読化ツールは断固たる攻撃者を防げません。彼らが防げるのは、バイナリを手に負えないようにすることだけです。
4- ソフトウェアのクラックを回避するために使用できるその他のプロのヒントはありますか?
私が見た唯一のコピープロテクトは、Ubisoft が Assassin's Creed: Brotherhood で行ったものです。彼らはゲームディスクでレベルを暗号化し、必要に応じてインターネットから復号化キーをダウンロードする必要がありました (これは、バイナリを彼らの手から遠ざけるアプローチです)。しかし、それは永遠に機能しませんでした.最終的にハッカーはそれらのレベルを解読し、完全にクラックされました. このアプローチは、法的関与なしで回避するのに最も長い時間がかかると私が見たものです(下部のポイント2を参照)
5-よくわかりませんが、これらのリフレクター ソフトウェアは機密データを含む App.Config を逆コンパイルすることもできますか?
リフレクター ソフトウェアが行う必要があるのは、App.config をロードするセクションを探して、既定値を読み取ることだけです。完全に制御できないコンピューターには、情報を安全に保管する場所はありません。コンピューター上にある場合は、読み取ることができます。読み取れる場合は、リバース エンジニアリングが可能です。
著作権侵害を防止するために私が見ることができる唯一の現実的な解決策は、2 つのオプションのうちの 1 つです。
アプリはユーザーの管理下にあるサーバーからストリーミングされ、バイナリを見ることはありません。ユーザーに送信するのは、ユーザーが UI を操作するために必要な情報だけです。これは、すべての MMO が取り組んでいるアプローチです。人々は、あなたが UI に送信しているものをリバース エンジニアリングし、サーバー上で行われているロジックを模倣することができますが、それが何をしているのかを完全に理解することは決してできません。また、ソフトウェアが十分に複雑な場合、攻撃者にとって有料ではない可能性があります。サーバー側のコードを再作成します。このアプローチの欠点は、ユーザーが接続するためにサーバーをホストする必要があることです。これは、再発生する方法が必要になるコストが繰り返し発生することです。多くの場合、この方法は「リッチ クライアント」または「シン クライアント」と呼ばれます。クライアント側で行われる処理の量とサーバー側で行われる処理の量に応じて。見る「マイクロソフト アプリケーション アーキテクチャ ガイド、第 2 版」の第 22 章。具体的には、図 4 と 5に示されている内容を説明しています
2 番目のオプションは、ソフトウェアを販売する相手に、ソフトウェアを配布しないという法的契約に署名してもらうことです (EULA ではなく、クライアントが物理的に署名する必要がある実際の契約です)。その契約では、ソフトウェアを漏らした人に多額の罰金を課し、ソフトウェアを購入した人に固有のフィンガープリントでプログラムをなぞって、プログラムが漏えいしたときに誰がそれをしたかがわかるようにします。(これは、ベンダーの Hex-Rays が逆アセンブラー IDAに使用する方法です。簡単な Google 検索では、6.1 より新しいクラックされたバージョンは見つかりませんでした。それらは6.3上にあります。)。この方法では著作権侵害を止めることはできませんが、そもそもコピーが流出するのを思いとどまらせる可能性があります。これにより、そもそもリークされたプログラムに関連する損失コストを取り戻すこともできます。問題の 1 つは、攻撃者がプログラムの 2 つのコピーを取得し、2 つのファイルを比較して、識別情報が何であるかを見分けることができる場合、多くのフィンガープリントを配置する必要があり、それらは巧妙である必要があることです。好きなものを入れて、誰から入手したか分からないようにします。これを行う唯一の方法は、取り除かれたりランダム化されたりするだけでなく、識別コードをソフトウェアの実行にとって重要でないようにすることです。彼らはそれを残す可能性が高くなります。
更新:この回答を再検討して別の質問にリンクした後、#2のソリューションを実装する簡単な方法を考えました。
難読化ツールを使用してコードを実行し、ソフトウェアを販売するすべての人にクラスの名前を変更させるだけです (次の部分を強制できるように、EULA をクリックするだけでなく、ライセンス契約に署名させることもできます) . 次に、難読化マッピングのデータベースを作成します。インターネット上でリークされたコピーを見つけたら、プロジェクト内の任意の場所で 1 つのクラスを見つけて、データベースで検索するだけで、誰がそれをリークしたかを知り、必要な人を知ることができます。法的な損害賠償を求める。