16

数日前に .Net 4.0 (デスクトップ アプリケーション) で開発されたソフトウェアをリリースしたので、本当に悲しいです。3日後、そのクラックがインターネット上で利用可能になりました. 私たちはソフトウェアをこれから守ろうとしましたが、どういうわけか人々はそれをクラックすることから逃れました.

シナリオは次のとおりです。アプリケーションが初めて起動するときに、アプリケーションは Web サーバーと通信し、ユーザーから渡された資格情報を確認します。資格情報が正しい場合、ソフトウェアは値をレジストリに保存し、MachineID をサーバーに送り返し、データベースに保存します。

ここで、ハッカーはサーバー通信を「return true;」に置き換えました。ステートメント(Telrik JustDecompileで確認しました)。彼はクラックされたソフトウェアをインターネットにアップロードしました。

さて、私の質問は次のとおり
です。1- .Net アプリケーションがクラックされないようにする方法は?
2-ハッカーは変更を行ったので、私のコードを知っています。どのような手順を踏む必要がありますか?
3- 難読化ツールについてインターネットで読みました。しかし、ハッカーは私のコードを知っています。
4- ソフトウェアのクラックを回避するために使用できるその他のプロのヒントはありますか?
5-よくわかりませんが、これらのリフレクター ソフトウェアは機密データを含む App.Config を逆コンパイルすることもできますか?

4

6 に答える 6

20

1- .Net アプリケーションがクラックされないようにする方法は?

コンピューターがあなたのコードを実行できる場合 + ハッカーが自分のコードをあなたよりも高い特権レベルで実行できる場合、アプリのクラックを 100% 防止できるものはありません。実行可能ファイルにアクセスでき、ターゲット プラットフォームにアクセスできない場合でも、ステップスルーしてターゲット プラットフォームが行うことを模倣し、保護がどのように行われているかを理解することができます。

2-ハッカーは変更を行ったので、私のコードを知っています。どのような手順を踏む必要がありますか?

認証部分を完全に書き直して、最初からやり直す必要がありますが、もう一度取得します。それは時間の問題です。

3- 難読化ツールについてインターネットで読みました。しかし、ハッカーは私のコードを知っています。どうすればよいでしょうか?

難読化されていないコードが得られたので、ジンニはボトルから出てきました。ソフトウェアを大幅に書き直さない限り、できることはあまりないので、最初からやり直す必要があります。難読化ツールは断固たる攻撃者を防げません。彼らが防げるのは、バイナリを手に負えないようにすることだけです。

4- ソフトウェアのクラックを回避するために使用できるその他のプロのヒントはありますか?

私が見た唯一のコピープロテクトは、Ubisoft が Assassin's Creed: Brotherhood で行ったものです。彼らはゲームディスクでレベルを暗号化し、必要に応じてインターネットから復号化キーをダウンロードする必要がありました (これは、バイナリを彼らの手から遠ざけるアプローチです)。しかし、それは永遠に機能しませんでした.最終的にハッカーはそれらのレベルを解読し、完全にクラックされました. このアプローチは、法的関与なしで回避するのに最も長い時間がかかると私が見たものです(下部のポイント2を参照)

5-よくわかりませんが、これらのリフレクター ソフトウェアは機密データを含む App.Config を逆コンパイルすることもできますか?

リフレクター ソフトウェアが行う必要があるのは、App.config をロードするセクションを探して、既定値を読み取ることだけです。完全に制御できないコンピューターには、情報を安全に保管する場所はありません。コンピューター上にある場合は、読み取ることができます。読み取れる場合は、リバース エンジニアリングが可能です。


著作権侵害を防止するために私が見ることができる唯一の現実的な解決策は、2 つのオプションのうちの 1 つです。

  1. アプリはユーザーの管理下にあるサーバーからストリーミングされ、バイナリを見ることはありません。ユーザーに送信するのは、ユーザーが UI を操作するために必要な情報だけです。これは、すべての MMO が取り組んでいるアプローチです。人々は、あなたが UI に送信しているものをリバース エンジニアリングし、サーバー上で行われているロジックを模倣することができますが、それが何をしているのかを完全に理解することは決してできません。また、ソフトウェアが十分に複雑な場合、攻撃者にとって有料ではない可能性があります。サーバー側のコードを再作成します。このアプローチの欠点は、ユーザーが接続するためにサーバーをホストする必要があることです。これは、再発生する方法が必要になるコストが繰り返し発生することです。多くの場合、この方法は「リッチ クライアント」または「シン クライアント」と呼ばれます。クライアント側で行われる処理の量とサーバー側で行われる処理の量に応じて。見るマイクロソフト アプリケーション アーキテクチャ ガイド、第 2 版」の第 22 章。具体的には、図 4 と 5に示されている内容を説明しています

  2. 2 番目のオプションは、ソフトウェアを販売する相手に、ソフトウェアを配布しないという法的契約に署名してもらうことです (EULA ではなく、クライアントが物理的に署名する必要がある実際の契約です)。その契約では、ソフトウェアを漏らした人に多額の罰金を課し、ソフトウェアを購入した人に固有のフィンガープリントでプログラムをなぞって、プログラムが漏えいしたときに誰がそれをしたかがわかるようにします。(これは、ベンダーの Hex-Rays が逆アセンブラー IDAに使用する方法です。簡単な Google 検索では、6.1 より新しいクラックされたバージョンは見つかりませんでした。それらは6.3上にあります。)。この方法では著作権侵害を止めることはできませんが、そもそもコピーが流出するのを思いとどまらせる可能性があります。これにより、そもそもリークされたプログラムに関連する損失コストを取り戻すこともできます。問題の 1 つは、攻撃者がプログラムの 2 つのコピーを取得し、2 つのファイルを比較して、識別情報が何であるかを見分けることができる場合、多くのフィンガープリントを配置する必要があり、それらは巧妙である必要があることです。好きなものを入れて、誰から入手したか分からないようにします。これを行う唯一の方法は、取り除かれたりランダム化されたりするだけでなく、識別コードをソフトウェアの実行にとって重要でないようにすることです。彼らはそれを残す可能性が高くなります。


更新:この回答を再検討して別の質問にリンクした後、#2のソリューションを実装する簡単な方法を考えました。

難読化ツールを使用してコードを実行し、ソフトウェアを販売するすべての人にクラスの名前を変更させるだけです (次の部分を強制できるように、EULA をクリックするだけでなく、ライセンス契約に署名させることもできます) . 次に、難読化マッピングのデータベースを作成します。インターネット上でリークされたコピーを見つけたら、プロジェクト内の任意の場所で 1 つのクラスを見つけて、データベースで検索するだけで、誰がそれをリークしたかを知り、必要な人を知ることができます。法的な損害賠償を求める。

于 2012-07-29T17:56:38.663 に答える
15

1: できません。難読化することはできますが、これを防ぐ唯一の方法は、exe を誰にも渡さないことです。ゲーム会社がこれにどれだけの費用を費やしているか見てみましょう。彼らもそれを解決していません。

2: 難読化は少しは役に立ちますが、難読化者と難読化解除者の間の軍拡競争です。

3: 戻って元に戻すには遅すぎますが、難読化により将来的に少し遅くなります

5: 通常、app.config は非常に読みやすいです。ここでできることはあまりありません。暗号化は、キーがアプリ内にあり、したがって取得可能な場合にのみ少し遅くなります

于 2012-07-29T17:43:52.010 に答える
2

最良の答えは、あなたが受け入れなければならないものです。できません。ユーザーに優れたユーザー エクスペリエンスを提供することに集中し、ライセンス供与を非常に簡単にします。アプリケーションがクラックされる可能性があるからといって、デスクトップ アプリケーションを構築するという選択が悪い考えだったというわけではありません。海賊は海賊であり、誠実な顧客は誠実な顧客です。

于 2012-07-30T04:07:40.647 に答える
2

他の人が言っているように、彼らがあなたのコードにアクセスできた場合、断固たるクラッカーに対してできることは何もありません。難読化は、怠惰なクラッカーに対してある程度の保護を提供します。Dotfuscatorは VS に組み込まれているので、試してみることができます。難読化には実際にコストがかかることに注意してください。(有料の) 顧客が送信するスタック トレースから問題をデバッグすることが非常に困難になります。

于 2012-07-29T19:51:36.530 に答える
1

どうやらあなたのアプリをクラックすることには十分な商業的または知的価値があり、合理的なスキルを持つ誰かがすぐに試してみることができます。

この戦争に勝つ 唯一の方法は、市販のソフトウェア保護パッケージを使用することです。

コピー防止を自分で実装しようとすると、再びハッキングの標的になります。

ビジネス アプリケーションを作成する場合、データを格納するデータベース エンジンも作成することはありません。また、アプリケーションのクラック防止コードを記述しないでください。それは顧客の問題を解決するものではなく、それを正しく行うには途方もないスキル セットが必要です。

于 2012-07-29T17:44:17.250 に答える