514

難読化は 1 つの方法ですが、アプリケーションの著作権侵害保護セキュリティを破るのを防ぐことはできません。アプリケーションが改ざんされていないことを確認するにはどうすればよいですか? また、登録メカニズムがリバース エンジニアリングできないようにするにはどうすればよいですか?

また、C# アプリケーションをネイティブ コードに変換することも可能であり、Xenocodeはコストがかかりすぎます。

C# は多くの機能を提供し、私のコードにとって理想的な言語であるため、コードベース全体を C++ で書き直すことは問題外です。

安全な証明書は、.NET の署名付きアセンブリから簡単に削除できます。

4

38 に答える 38

689

できません。

もう少し難しくするために実行できる手順はありますが、最終的には、ローカル マシン上の実行可能ファイルはクラック可能です。最終的には、そのコードをネイティブ マシン コードに変換する必要があり、実行可能なすべてのアプリケーションが脆弱になります。

あなたがしたいことは、クラックするのを難しくして、人々の面倒に値しないようにすることです.

アプリケーションの保護に役立ついくつかの提案があります。

  • コードを難読化します。Dotfuscatorには無償版があり、Visual Studio が付属しています。
  • 公開/秘密キーまたは非対称暗号化を使用して、製品ライセンスを生成します。これにより、自分だけライセンス コードを生成できるようになります。アプリケーションクラックされたとしても、キー生成アルゴリズムを元に戻すことは不可能であるため、アプリケーションのキー ジェネレータがリリースされることはないと確信できます。
  • サードパーティのパッカーを使用して、.NET 実行可能ファイルを暗号化された Win32 ラッパー アプリケーションにパックします。Themidaは優れたものの 1 つです。これにより、アプリケーションが.NET Reflectorに反映されなくなり、元に戻すために解凍するのが面倒になります。
  • 独自のカスタム パッカーを記述します。サードパーティのパッカーが高すぎる場合は、独自のパッカーを作成することを検討してください。カスタムパッカーが非常に効果的な場合もあります。これは、パッカーをアンパックする方法が十分に公開されていないためです。チュートリアルHow to write your own packerは、独自の Win32 パッカーの作成に関する有益な情報を提供します。

ただし、最終的には、人々があなたのアプリケーションをクラックしたい場合は、そうするでしょう。アプリケーションを保護するための膨大なリソースを備えているにもかかわらず、アプリケーションが一般に公開される前にクラックされている商用ソフトウェアをすべて見てください。

熟練したリバース エンジニアは、IDA-Proを起動して、何をしてもアプリケーションをバターのようにスライスできます。パックされたアプリケーションはアンパックすることができ、難読化は公園を散歩することを妨げるだけです。複雑なライセンス コードでの苦労はすべて、1 バイトのパッチで元に戻すことができます。

人々があなたのソフトウェアを海賊版にする可能性が非常に高いことを受け入れる必要があります. 何があってもあなたの申請にお金を払わない人もいますが、これらの人はあなたが心配する必要はありません.

しかし、訴訟のリスクを負わずに喜んでソフトウェア ライセンスを購入する多くの企業と、リスクを冒したくないか、間違っているか、著作権侵害を行うほど技術に精通していない多くのコンピュータ ユーザーが存在します。これらはあなたの真の顧客であり、優れたユーザー エクスペリエンスを提供することに力を注ぎ、ソフトウェアをクラックする人々を無視する必要があります。

以前に自分のアプリケーションを海賊版にされたことがありますが、これは個人的な侮辱だと思いました。ここで、私は小さな開発者であり、心と魂をアプリケーションに注ぎ込みました。これらの人々は、私から海賊行為をする勇気を持っていましたか?! 彼らは私のポケットから直接お金を取っていました!

私はすぐに一連の厳格な DRM コードを追加し、非合法またはクラックされたコピーを使用してあらゆる人物を妨害しようとしました。もちろん、避けられないことを止めようとするのではなく、アプリケーションの改善に取り組むべきでした。それだけでなく、私が入れていたこれらすべての特別な保護により、真の顧客を傷つけていました.

長い戦いの後、私は潮流と戦っていることに気付きました。必要最小限のライセンス機能を除いて、すべての phone-home コードを取り出し、後戻りすることはありませんでした。

于 2009-02-03T08:03:10.557 に答える
269

アプリケーションを完全に保護することはできません (管理されているかどうかに関係なく)。プレイステーションや iPad のようなシステムがクラックされる可能性がある場合 (ベンダーがハードウェアを制御する場合でも)、アプリにどのような希望があるでしょうか? ありがたいことに、あなたは本当にしたくありません。私の意見では、誰かがあなたの製品を誤って盗用できないように、アプリケーションを十分に保護する必要があります

たとえば、マシンごとのライセンスを使用している場合、新しい 2 台目のマシンにインストールするだけでは機能しないはずです。余分なサポート コールを防ぐために適切なエラー メッセージが必要ですが、回避するのが難しくなりすぎないように余分な時間を費やしたり、ユーザーの頭を悩ませたりしないでください。

もう 1 つの例は、期間限定のトライアルです。ユーザーがシステム クロックをロールバックできるかどうかなどの単純なことについても心配する必要はありません。それを行う人は、ライセンス違反であることを知っており、ユーザーがいつ違反しているのかを知っている限り、あなたは十分にやったと言えます。

ユーザーはあなたのライセンスを気にしないので、これだけのことをしなければなりません。ライセンスは、必要になるまで誰も気にしない作り物です誰もそれらを読んでいませんし、実際に読む必要はありません。したがって、境界がどこにあるかをユーザーに伝える最善の方法は、アプリケーションのすぐに使える動作がライセンスに準拠しているかどうかです。この最初のケースでは、インストールに失敗するか、2 回目に試用版モードでインストールすることを意味します。後者の場合、構成ファイルでプレーンテキストの日付をチェックするだけかもしれません。いずれにせよ、エレガントで、助けになり、敬意を持って扱うようにしてください。

つまり、それが何を意味するのかを説明しています。しかし、それ以上進んでみませんか?見つけることができるすべての小さな穴をふさがないのはなぜですか? 答えは 2 つの部分にあります。第一に、誰かがあなたのライセンス条項を故意に破るという倫理的限界を超えた場合、たとえ簡単な方法であっても、トレントからアプリケーションを引っ張るなど、より困難で危険なことを喜んで行うでしょう。サイト — 信頼できないソースからダウンロードしたアプリケーションの実行には、ある程度の危険が伴います。それをさらに難しくすることは、これらのユーザーにとってはほんのわずかな迷惑であり、有料の顧客に問題を引き起こすリスクがあります. シンプルに保つことで、誰かがあなたのアプリケーションを掘り下げて、より包括的なクラックをリリースするのを防ぐことができます。第二に、欠陥を探す目がほとんどありません。ハッカーはたくさん持っており、それらを見つけるためにより多くの練習をしています。小さな欠陥を 1 つ見逃すだけで、アプリは海賊版サイトで何もしなかった場合と同じように配布されます。常に正しくなければなりません。彼らは一度だけ幸運である必要があります。したがって、必要な労力は非常に高く、成功の可能性は非常に低くなります。

最終的には、誰かがあなたのアプリケーションを (単に使用するのではなく)海賊版にしたい場合、それが彼らの主な目的であれば、そうするでしょう。それらを止めるためにできることは何もありません。これはソフトウェアの性質です。製品を構成するファイルがユーザーのコンピューターに置かれると、ユーザーは好きなようにファイルを操作できるようになります。これは、Java や.NETなどのマネージド環境に特に関係しますが、ネイティブ コードにも確実に当てはまります。時間は彼らの味方であり、十分な時間が与えられれば、あらゆるデジタル セキュリティを破ることができます。

ユーザーがあなたの製品を盗用するのを止めることはできないので、あなたの最善の行動は、このクラスのユーザーがあなたの利益になるように利用することです。多くの場合、それらをあなたに反対するのではなく、あなたのために働かせることが可能です. それを念頭に置いて、アプリケーションが何であれ、ほぼ完全に機能し、有効期限が切れない無料バージョンを維持することはおそらく価値があります. 1 米ドルの値札と無料の違いは、顧客がクレジット カードであなたを信頼する必要がないこと以外の理由がなければ、非常に大きなものです。製品の無料版は、海賊版の配布を効果的に排除するだけでなく (同じ価格で正当であるのに、なぜ海賊版を危険にさらす必要があるのでしょうか?)、視聴者を劇的に拡大する可能性があります。

その結果、有償版の価格を引き上げる必要が生じる場合があります。最終的に、2,000 人のユーザーがそれぞれ 20 ドルで提供されるのではなく、100,000 人の無料ユーザーが存在し、そのうち 500 人が「プロフェッショナル」版に 99 ドルを支払う意思があることになります。 . これにより、製品をロックするのに多くの時間を費やした場合よりも多くのお金を稼ぐことができます. それ以上に、これらの無料ユーザーを引き付け、いくつかの重要な方法で関係を活用できます。

1つはサポートです。悲観主義者は、この機会に 100,000 人の無料ユーザーをサポートするためのコストの増加について不平を言うでしょうが、代わりに驚くべきことが起こります。これは、サポート コストのない大規模なオープン ソース プロジェクトで常に見られます。ユーザーはステップアップしてそれを実現します。

無料ユーザーは一般的に、最初からサポートへの期待が低くなっていますが、それには正当な理由があります。あなたがする必要があるのは、無料版をコミュニティサポートの資格のみとしてマークし、その目的のためにユーザーが管理するオンラインフォーラムを設置することだけです. あなたのサポート知識ベースは自己生成的であり、上級ユーザーはあなたに代わって特別な支援が必要な人を導きます。さらに重要なことに、これによりバグをより迅速に特定して修正できるようになり、最終的に製品の品質が向上し、総サポート コストが削減されます。ユーザーベースが十分に大きくないため、これは以前は不可能でしたが、無料のユーザーを顧客として扱うと、非常にうまく機能します.

もう一つはフィードバックです。フォーラムを見ることで、他の方法では考えられなかった重要な改善のアイデアを学ぶことができます。これにより、最終的により多くの無料ユーザーを有料ユーザーに変えることができ、より多くの視聴者を引き付ける魅力的な製品を作成できます。

最後に、マーケティングを検討する必要があります。これらの無料ユーザーはすべて、敵対者ではなくファンであり、それに応じて行動します. それだけでなく、次のバージョンをリリースするときに、これらのユーザーはすべて、他の未知のメカニズムではなく、承認された配布チャネルを経由することになります。つまり、次のバージョンでは、より多くの、非常に関心があり、支持してくれる聴衆とのつながりから始めることになります。

プロフェッショナル エディションに取っておくべき最良の機能は、企業での展開と管理を容易にすることを目的としたツールです。クラッカーは、これらを自分で使用するためにハッキングする十分な理由とは見なしませんが、300 ライセンスを購入して会社全体に広めようとしている企業にとっては、これは必須です。もちろん、いずれにせよプロ版は海賊版になりますが、繰り返しますが、あなたが何をしたとしてもそれらの海賊版に製品を販売することはおそらくできないので、心配しないでください

心理的には、製品をこれだけ提供するのは難しいかもしれませんが、それが本当に最善の方法であることを理解していただければ幸いです。それだけでなく、それが長期的に進む唯一の方法です。こんな風にやりたくないと思っている人がいることは知っています。結局のところ、彼らは、ロックダウンされた 20 ドルの製品を何年も販売するだけで成功したのです。しかし、それはあまりにも悪いことです。なぜなら、あなたがこのようにしないと、最終的に他の誰かが. そして、彼らの製品はあなたの製品と同じくらい良いか、それを主張して逃げることができるほど十分に近い. 突然、あなたの価格設定は法外に見え、売り上げは劇的に落ち込み、あなたにできることは他にありません. 必要に応じて中間層を追加することもできますが、役に立たない可能性があります。

于 2009-03-16T17:31:11.933 に答える
45

私の経験では、アプリケーションやライブラリをクラックしにくくすることは、正直な顧客を傷つけますが、不正な顧客をわずかに遅らせるだけです。避けられないことを遅らせることに多くの努力を払うのではなく、素晴らしい、低摩擦の製品を作ることに集中してください。

于 2009-03-16T17:12:56.750 に答える
40

多くの人と共有する秘密は、秘密ではありません。コードに機密情報が含まれている場合、それを難読化しても保護にはなりません。難読化を解除する必要があるのは1 回だけです。顧客と共有したくない秘密がある場合は、それを顧客と共有しないでください。コードを Web サービスとして記述し、極秘コードを自分だけが見ることができるサーバーに保管します。

于 2010-02-21T06:13:52.477 に答える
24

大まかに言えば、そこには3つのグループの人々がいます。

  • あなたのソフトウェアを購入せず、クラックに頼らない人、または何も見つからない場合は、あなたのソフトウェアをまったく使用しない人. このグループからお金を稼ぐことを期待しないでください。彼らは自分のスキルまたはクラッカー (あなたの有用性と聴衆の数に応じて時間を優先する傾向があります.

  • 使用する保護メカニズムに関係なく、ソフトウェアを購入する (対価を支払う) 正当なユーザーのグループ。精巧な保護メカニズムを使用して正当なユーザーの生活を困難にしないでください。複雑な保護メカニズムは、ユーザー エクスペリエンスを簡単に台無しにする可能性があり、このような事態がこのグループに発生することは望ましくありません。個人的には、ソフトウェアのコストを増大させるハードウェア ソリューションには反対票を投じます。

  • 「非倫理的な」クラッキングに訴え、ソフトウェアの機能がライセンス メカニズムによって保護されているため、そのソフトウェアに対してのみ料金を支払う少数派。おそらく、このグループがあなたの保護を回避するのを非常に簡単にしたくないでしょう. ただし、ソフトウェアを保護するために費やしたすべての努力は、このグループの規模に応じて報われます。これは、構築しているソフトウェアの種類に完全に依存します。

あなたが言ったことを考えると、あなたのソフトウェアを購入するように強いられる可能性のある十分に大きな少数派がいると思われる場合は、先に進んで何らかの形の保護を実装してください. この少数派から、保護に費やす時間、またはサードパーティの保護 API/ツールに費やす金額に対して、どれだけのお金を稼ぐことができるかを考えてみてください。

独自のソリューションを実装したい場合は、簡単なハッキングを防ぐために (対称アルゴリズムではなく) 公開鍵暗号化を使用することをお勧めします。たとえば、ライセンスにデジタル署名することができます (シリアル番号またはライセンス ファイル)。これを回避する唯一の方法は、コードを逆コンパイル、変更、および再コンパイルすることです (Simucal の回答で提案されているような手法を使用して、より困難にすることができます)。

于 2009-02-03T08:30:25.150 に答える
19

人々があなたのソフトウェアをクラックするのを防ぐことはできません。

ただし、販売への影響を軽減する亀裂を作成することはできます。ソフトウェアの有効な登録コードを発行できるキージェネレーターは、ソフトウェアから登録インセンティブを削除する単純なパッチよりもはるかに悪いものです。これは、クラックが 1 つのソフトウェア バージョンでのみ機能し、次にリリースするソフトウェア アップデートで機能しなくなるためです。キージェネレーターは、登録キーのアルゴリズムを変更するまで機能し続けます。これは、誠実なクライアントを遠ざけるため、頻繁に行いたくないことです。

したがって、ソフトウェアの違法なキージェネレーターと戦う方法を探していて、非対称暗号化が生成する長い登録コードのために非対称暗号化を使用したくない場合は、部分キー検証を検討してください。

Partial Key Verification は、各不正なキージェネレータがソフトウェアの 1 つの特定のリリースに対してのみ機能することを確認します。基本的には、ソフトウェアの各リリースが、登録コードの一部の数字をチェックするためのコードにのみリンクしていることを確認することです。どの数字が正確にランダムであるため、クラッカーはソフトウェアのさまざまなバージョンをリバース エンジニアリングし、これらすべてを 1 つのキージェネレーターに結合して、ソフトウェアのすべてのバージョンで機能するキージェネレーターをリリースする必要があります。

定期的に新しいソフトウェア バージョンをリリースすると、あらゆる種類のソフトウェア著作権侵害アーカイブに多数のキージェネレータが拡散し、機能しなくなります。潜在的なソフトウェア海賊版は通常、最新バージョンのクラックまたはキー生成を探します。

(C++) 最近のシェアウェア ゲームで部分キー検証を使用しましたが、非常に効果的です。以前は、キージェネレーターと戦うことができなかった多くの問題がありました。その後、多くのクラックがあり、ゲームの特定のバージョンでのみ機能するいくつかのキージェネレーターがいくつかありましたが、すべてのバージョンで機能するキージェネレーターはありませんでした. ゲームの非常にマイナーなアップデートを定期的にリリースし、以前に存在したクラックをすべて役に立たなくしました。

試したことはありませんが、部分キー検証用のオープン ソース .NET フレームワークがあるようです。

于 2009-02-03T09:11:51.917 に答える
16
  • オンライン更新を使用して、ライセンスのないコピーをブロックします。

  • アプリケーションのさまざまなモジュールからシリアル番号を検証し、単一の関数呼び出しを使用して検証を実行しないでください (クラッカーが検証を簡単にバイパスできないようにするため)。

  • 起動時にシリアル番号をチェックするだけでなく、データを保存しながら検証を行い、毎週金曜日の夕方に行う、ユーザーがアイドル状態のときに行う...

  • アプリケーション ファイルのチェックサムを確認し、セキュリティ チェックサムを別の場所に保存します。

  • この種のトリックに行き過ぎないでください。登録コードの検証中にアプリケーションがクラッシュしたり誤動作したりしないようにしてください。


  • ユーザーにとって便利なアプリを構築することは、クラッカーにとって解読不可能なバイナリを作成することよりもはるかに重要です。

于 2009-02-03T09:00:46.760 に答える
14

あなたはできる..

Microsoft SLP サービスInishTech のソフトウェア ポテンシャルは、アプリケーションの機能に影響を与えることなくコードを保護する機能を提供します。

更新: (開示:私は Eazfuscator.NET に取り組んでいます) Microsoft SLP サービスソフトウェアの可能性を他と違うものにしているのは、コードを仮想化できることです。質問が最初に出されてから数年が経過しました。今日では、以下のような同様の機能を備えたより多くの製品が利用可能です。

于 2009-02-03T09:15:50.037 に答える
10

.NET Reflectorは、基本的に「.NETコード」を意味する「マネージコード」のみを開くことができます。したがって、COM DLLファイル、ネイティブC ++、従来のVisual Basic 6.0コードなどを逆アセンブルするために使用することはできません。コンパイルされた.NETコードの構造により、非常に便利で、移植性があり、検出可能で、検証可能です。これにより、コンパイルされたアセンブリをピアリングできますが、デコンパイラーと逆アセンブラーは.NETに固有のものではなく、コンパイラーが存在する限り存在します。

難読化ツールを使用してコードを読みにくくすることはできますが、.NETで読み取れないようにすることなく、逆コンパイルを正確に防ぐことはできません。マネージコードアプリケーションをネイティブコードアプリケーションに「リンク」すると主張する製品はいくつかありますが(通常は高価です)、これらが実際に機能する場合でも、決心した人が常に方法を見つけます。

しかし、難読化に関しては、あなたはあなたが支払うものを手に入れます。したがって、コードが非常に独占的であり、それを保護するために非常に長い時間を費やさなければならない場合は、優れた難読化ツールにお金を投資することをいとわないはずです。

しかし、コードを書いた15年ほどの経験の中で、ソースコードを過度に保護することは時間の無駄であり、ほとんどメリットがないことに気づきました。ドキュメントやコメントなどをサポートせずに元のソースコードを読み込もうとすると、理解するのが非常に難しくなる可能性があります。それに加えて、逆コンパイラーが思い付く無意味な変数名と、現代の難読化ツールが作成するスパゲッティコード-​​おそらく、人々があなたの知的財産を盗むことについてあまり心配する必要はありません。

于 2010-02-21T05:55:43.280 に答える
9

保護を購入することとは別に、あなた(またはあなたの開発者)はコピー防止を学ぶことができます。

これらはアイデアです:

最初に、自分自身をコンソールに書き込むプログラムを書いてみてください。それは有名な問題です。このタスクの主な目的は、自己参照コードの記述を練習することです。

次に、他のメソッドのCILに依存する方法で一部のコードを書き直すテクノロジを開発する必要があります。

仮想マシンを作成できます(まだ.NETで)。そして、そこにいくつかのコードを入れます。最終的に、仮想マシンは、コードを実行する別の仮想マシンを実行します。これは、パフォーマンスをあまり低下させないために、めったに呼び出されない関数の一部です。

一部のロジックをC++/ CLIに書き直し、マネージコードとアンマネージコードを組み合わせます。これにより、分解が困難になります。この場合、 x64バイナリも提供することを忘れないでください。

于 2009-02-04T15:29:17.160 に答える
9

それは本当に価値がありますか?すべての保護メカニズムは、十分な決意を持って破ることができます。市場、製品の価格、顧客の数などを考慮してください。

より信頼性の高いものが必要な場合は、ハードウェアキーの道をたどりますが、それは(ユーザーにとって)かなり面倒で、より高価です. ソフトウェア ソリューションはおそらく時間とリソースの無駄であり、それらがもたらす唯一のものは「セキュリティ」という誤った感覚です。

もう少しアイデアがあります (完璧なものはありませんので、完璧なものはありません)。

クラッカーは典型的なテクニックについて多くの経験を積んでおり、あなたよりも数歩先を行っているため、あまり時間を無駄にしないでください。多くのリソースを使用したくない場合は、おそらくプログラミング言語を変更します (Skype の方法で行います)。

于 2009-02-03T07:59:50.970 に答える
9

人々があなたのコードを実行できるようにしたい場合 (そうでない場合、そもそもなぜそれを書いたのでしょうか?)、彼らの CPU があなたのコードを実行できる必要があります。コードを実行できるようにするためには、CPU がコードを理解できる必要があります。

CPU は愚かで人間はそうではないので、これは人間もコードを理解できることを意味します。

ユーザーがコードを取得しないようにする唯一の方法は、ユーザーにコードを渡さないことです。

これは、次の 2 つの方法で実現できます。サービスとしてのソフトウェア(SaaS)。つまり、ソフトウェアをサーバー上で実行しユーザーにリモート アクセスのみを許可します。たとえば、これは Stack Overflow が使用するモデルです。Stack Overflow がコードを難読化していないことは確かですが、逆コンパイルすることはできません。

もう 1 つの方法はアプライアンス モデルです。ユーザーにコードを渡す代わりに、コードを含むコンピューターをユーザーに渡します。これは、ゲーム コンソール、ほとんどの携帯電話、およびTiVoが使用するモデルです。これは、実行パス全体を「所有」している場合にのみ機能することに注意してください。独自の CPU、独自のコンピューターを構築し、独自のオペレーティング システムと独自のCLI実装を作成する必要があります。そうして初めて、コードを保護できます。(ただし、ほんのわずかなミスでも、すべての保護が役に立たなくなることに注意してください。Microsoft、Apple、Sony、音楽業界、映画業界がそれを証明しています。)

または、何もしないこともできます。つまり、コードは著作権法によって自動的に保護されます。

于 2010-02-21T11:34:57.657 に答える
8

残念ながら、あなたはこれから逃げるつもりはありません。あなたの最善の策は、C でコードを書き、それをP/Invokeすることです。

ちょっとしたキャッチ 22 があります。誰かがアプリケーションをCILに逆コンパイルし、検証/アクティベーション コード (たとえば、C ライブラリの呼び出し) を強制終了する可能性があります。C で記述されたアプリケーションも、よりしつこいハッカーによってリバース エンジニアリングされることを忘れないでください (最近のゲームの解読速度を見てください)。アプリケーションを保護するものは何もありません。

結局、それはあなたの家と同じように機能し、十分に保護して、あまりにも多くの労力がかかるようにし(ここではスパゲッティコードが役立ちます)、攻撃者が隣の隣人に移動するだけです(競争:))。Windows Vista を見てください。これをクラックするには 10 通りの方法があるはずです。

EXE ファイルを暗号化し、ユーザーが使用を許可されたときに復号化するパッケージがありますが、これも間違いなくクラックされた一般的なソリューションを使用しています。

アクティベーションと登録のメカニズムは、それをバイパスするのに十分な技術知識を持っていない (または、バイパスできることを知っている) 「平均的なジョー」の人々を対象としています。クラッカーを気にしないでください。彼らは手に時間がありすぎます。

于 2009-02-03T08:05:22.270 に答える
7

さて、あなたはあなたの製品をひび割れから完全に保護することはできませんが、セキュリティレベルを最大化/強化し、初心者や中級のクラッカーによってひびが入るのを少し難しくすることができます。

ただし、クラックできないものは何もないことを覚えておいてください。サーバー側のソフトウェアだけが十分に保護されており、クラックすることはできません。とにかく、アプリケーションのセキュリティレベルを強化するために、一部のクラッカーが「すべてではない」アプリケーションをクラックするのを防ぐために、いくつかの簡単な手順を実行できます。これらの手順により、これらのクラッカーはおかしくなり、おそらく必死になります。

  • ソースコードを難読化してください。明らかに、これによりソースコードが混乱して読めなくなってしまいます。
  • 2時間ごと、24時間ごと、1日ごと、1週間ごとなど、またはユーザーが実行するすべてのアクションの後に、アプリケーション内でいくつかのランダムチェックルーチンをトリガーします。
  • リリースしたアプリケーションのMD5チェックサムをサーバーに保存し、現在のファイルのMD5チェックサムをサーバー側の実際のファイルでチェックしてランダムにトリガーできるルーチンを実装します。MD5チェックサムが変更された場合、それはこのコピーが海賊版になったことを意味します。これで、ブロックするか、更新をリリースしてブロックすることができます。
  • 一部のコード(関数、クラス、または特定のルーチン)が実際に変更または変更されているか、あるいは削除されているかどうかを確認できるルーチンを作成してみてください。私はそれを呼び出します(コード整合性チェック)。
  • 無料の不明なパッカーを使用して、アプリケーションをパックします。または、お金があれば、Thamida.NETReactorなどの商用ソリューションを利用してください。これらのアプリケーションは定期的に更新され、クラッカーがアプリケーションを解凍すると、それらの会社から新しい更新を取得できます。新しい更新を取得したら、プログラムをパックして新しい更新をリリースするだけです。
  • アップデートを定期的にリリースし、顧客に最新のアップデートをダウンロードするように強制します。
  • 最後に、アプリケーションを非常に安価にします。高くしすぎないでください。私を信じてください、あなたはより多くの幸せな顧客を得るでしょう、そしてクラッカーはあなたのアプリケーションを去るでしょう、なぜならそれは非常に安いアプリケーションをクラックする彼らの時間の価値がないからです。

これらは、初心者や中級のクラッカーがアプリケーションをクラックするのを防ぐための簡単な方法です。アプリケーションを保護するためのアイデアが他にもある場合は、それらを実装することを躊躇しないでください。それはクラッカーの生活を困難にし、彼らは欲求不満になり、最終的にはあなたのアプリケーションを離れます。なぜならそれは彼らの時間の価値がないからです。

最後に、高品質のアプリケーションのコーディングに時間を費やすことも検討する必要があります。複雑なセキュリティレイヤーのコーディングに時間を無駄にしないでください。優れたクラッカーがアプリケーションをクラッキングしたい場合、彼/彼女はあなたが何をしてもします...

さあ、クラッカー用のおもちゃをいくつか実装してください...

于 2011-06-28T09:40:12.223 に答える
7

はい。それは本当です。コードが難読化されていない場合、.NET コードは非常に簡単にリバース エンジニアリングされます。

難読化は、ソフトウェアをリバース エンジニアリングしようとする人々にとって煩わしさの層を追加します。取得するバージョンに応じて、さまざまなレベルの保護が得られます。

Visual Studio にはDotfuscatorのバージョンが含まれています。これはバンドル バージョンであるため、可能な限り強力な難読化を確実に行うことはできません。それらの機能リストを見ると、不足しているもの (およびコードをより安全にするためにアプリケーションが正確に何をするか) が正確にわかります。

他にもいくつかの無料またはオープン ソースの .NET 難読化ツールがあります (ただし、それらが使用する品質やさまざまな方法についてコメントすることはできません)。

結局、完璧なものはありません。あなたのソフトウェアがどのように機能するかを本当に知りたいと思う人は、そうするでしょう。

于 2010-06-22T13:11:55.123 に答える
5

マイクロソフトが解決策を考え出すことができれば、海賊版のWindowsバージョンはないので、非常に安全なものはありません。Stack Overflowからの同様の質問がいくつかあり、それらを保護する独自の方法を実装できます。異なるバージョンをリリースする場合は、バージョンごとに異なる手法を採用できるため、最初のバージョンがクラックされるまでに、2番目のバージョンが引き継ぐことができます。

于 2009-03-16T17:11:06.413 に答える
5

Salamanderがあります。これは、Remotesoftのネイティブ.NETコンパイラおよびリンカーであり、.NETFrameworkなしでアプリケーションをデプロイできます。私はそれがその主張にどれほどうまく対応しているかわかりません。

于 2009-02-04T20:04:21.630 に答える
5

.NET リアクター

アップデート

Jared は、 de4dotが逆コンパイルできると主張していることを指摘しました。

.NET Reactor は、.NET アセンブリを CIL として理解できず、既存のツールが逆コンパイルできないアンマネージド プロセスに変換することにより、機密性の高い知的財産を完全に保護します。ハッカーは、ソースの理解可能な形式にアクセスすることはできません。

強力で柔軟な .NET Reactor ライセンス機能を使用すると、ハードウェアとソフトウェアのロックを使用してライセンス条件を適用し、収益源を保護できます。ライセンス マネージャーは、試用版または永久ライセンスを数秒で作成できます。サンプルを含む完全に文書化されたソフトウェア開発キット (SDK) を使用すると、ライセンス システムをコードから直接呼び出すことができ、ライセンス システムのカスタム拡張機能を作成できます。

于 2009-02-03T12:50:07.357 に答える
4

ここに1つのアイデアがあります:あなたのソフトウェアのすべてのインスタンスが接続する必要があるあなたの会社によってホストされたサーバーを持つことができます。接続して登録キーを確認するだけでは不十分です。チェックを外すだけです。キーチェックに加えて、クライアントがそれ自体では実行できない重要なタスクをサーバーに実行させる必要があるため、削除することはできません。もちろん、これはサーバー側での大量の処理を意味する可能性がありますが、ソフトウェアを盗むのが難しくなります。また、適切なキースキーム(所有権の確認など)があるとすると、キーも盗むのが困難になります。窃盗。これは、ソフトウェアを使用するためにユーザーがインターネットに接続する必要があるため、おそらくあなたが望むよりも侵襲的です。

于 2009-03-16T17:12:41.463 に答える
4

いくつかの .Net 難読化ツールの詳細な比較シートがあります。

ここに画像の説明を入力

obfuscators.io から取得したスクリーンショット

于 2020-01-27T18:03:57.010 に答える
3

申し訳ありませんが、アプリケーションを完全に保護することは不可能です。

于 2009-03-16T17:10:04.760 に答える
3

コードを難読化!Obfuscating C# Codeに例があります。

于 2010-02-21T07:35:44.823 に答える
3

クライアント上で実行されているものはすべて、逆コンパイルしてクラックできます。難読化はそれを難し​​くするだけです。私はあなたのアプリケーションを知りませんが、99% の場合、努力する価値はないと思います。

于 2010-06-22T13:13:45.210 に答える
2

.NETに関して言えば、Windowsフォームアプリケーション(またはクライアントがPortable Executableファイルを持っているアプリケーション)をリリースしている場合、それはクラックされる可能性があります。

.NETを使い続け、ソースコードが取得される可能性を最小限に抑えたい場合は、Windowsフォームアプリケーションにするのではなく、Webサーバー全体にASP.NETアプリケーションとして展開することを検討してください。

于 2009-03-16T17:13:39.980 に答える
2

警告を追加するだけです。難読化を使用する場合は、すべてが引き続き機能することを確認してください。難読化により、クラス名やメソッド名などが変更される場合があります。したがって、リフレクションを使用して特定のメソッドやクラス(プラグインアーキテクチャなど)を呼び出すと、難読化後にアプリケーションが失敗する可能性があります。また、スタックトレースはエラーを追跡するのに役に立たない場合があります。

于 2010-06-22T13:20:18.653 に答える
2

.NETで書いてCILにコンパイルすれば反映できます。セキュリティが懸念事項であり、難読化を避ける必要がある場合は、本質的にリバース エンジニアリングが困難な非マネージド言語を使用してアプリケーションを作成することをお勧めします。

于 2009-02-03T08:01:30.467 に答える
2

アプリケーションが改ざんされていないことを確認する方法と、登録メカニズムがリバース エンジニアリングできないことを確認する方法。

どちらも同じ非常に単純な答えを持っています: (明らかに) 顧客など、信頼できない関係者にオブジェクト コードを渡さないでください。自分のマシンでアプリケーションをホストできるかどうかは、そのアプリケーションが何をするかにかかっています。

それがWeb アプリケーションでない場合は、アプリケーション サーバー (または、Windows の場合はリモート デスクトップ接続)への X 転送を使用してSSHログインを許可できる可能性があります。

オタク系の人にオブジェクト コードを渡して、彼らがあなたのプログラムをクラックするのが楽しいかもしれないと思ったら、クラックされてしまいます。それを回避する方法はありません。

信じられないという方は、クラックも海賊版もされていない有名なアプリケーションを指摘してください。

ハードウェア キーを使用すると、生産コストが高くなり、ユーザーに嫌われることになります。ソフトウェアメーカーはあなたを信用していないので、床を這い回って27種類のUSBのプラグを抜き差しするのは本当の雌犬です(私は想像します)。

EXE を暗号化し、ユーザーが使用を許可されたときに復号化するパッケージがあります。

もちろん、それを回避する方法は、"can-I-use-it" テストをクラックして、常に true を返すようにすることです。

厄介なトリックは、プログラムの別の場所でテストを実行するオペコードのバイト値を汚い方法で使用することであり、値が適切でない限り、プログラムを高い確率でクラッシュさせる可能性があります。ただし、特定のアーキテクチャにリンクされます:-(

于 2009-02-03T08:05:41.130 に答える
2

優れたアプリケーションを作成し、単純な保護システムをコーディングするだけです。どの保護を選択しても、元に戻されます... ですから、時間やお金を無駄にしないでください。

于 2009-02-04T15:36:58.550 に答える
2

Obfuscatorの使用をお勧めします。

于 2010-02-21T07:06:25.707 に答える
2

ユーザーの 99% 以上は、実行可能ファイルがどのように機能するかを調べることに関心がないことに注意してください。

わざわざ試してみようとする人はほとんどおらず、ほとんどの難読化ツールは回避できることを考えると、時間と労力を費やす価値があるでしょうか?

より多くの人が使いたいと思うように、製品の改善に時間を投資したほうがよいでしょう。

于 2010-06-22T13:16:44.923 に答える
2

率直に言って、コードを難読化する必要がある場合があります (たとえば、ライセンス クラスの登録など)。この場合、プロジェクトは無料ではありません。IMO、優れた難読化ツールに料金を支払う必要があります。

コードを逆コンパイルしようとすると、 Dotfuscatorはコードを非表示にし、.NET Reflectorはエラーを表示します。

于 2010-02-21T06:31:31.993 に答える
1

はい、.NETバイナリ (EXE および DLL) は、ほぼソース コードに簡単に逆コンパイルできます。ツール.NET Reflectorを確認してください。任意の .NET バイナリ ファイルに対して試してみてください。最良のオプションは、ファイルを難読化することです。ファイルは .NET Reflector で逆コンパイルできますが、読み取り不能な混乱が生じます。優れた難読化ツールが無料または安価になるとは思いません。1 つは、Visual Studio に付属する Dotfuscator Community Edition です。

于 2010-06-22T13:13:52.993 に答える
1

最良の答えは、小規模な開発者が自身の経験から語った最初のものです。上記で説明したリバース防止手法はすべて、本格的なリバース エンジニアにとって教科書的な 101 のケースです。

一部の商用 DRM ソリューションはかなりまともですが、カスタム DRM ソリューションを使用して、すべてのトリプル AAA ゲームを数時間 (または数日) 以内にクラックします。完全に新しい DRM ソリューションの導入だけが、場合によっては数週間の遅延が避けられません。

DRM を最大限に活用するには、多くの時間と費用がかかり、パフォーマンス、信頼性、互換性/移植性、および一般的な顧客関係を簡単に損なう可能性があります。あまり賢くならずにまともな商用DRMを使い続けて(より少ない)損失を被るか、完全に忘れてください...

独自の (商業的な) 墓を掘った DRM ソリューションの一例: http://en.wikipedia.org/wiki/StarForce

于 2013-10-28T22:11:50.347 に答える
1

永遠にネイティブのように見え、現在難読化ツールは必要ありません。ネット コア RT の実行可能なソリューションのように見えます。まもなくすべてのアプリが .net コアに移行します。https://www.codeproject.com/Articles/5262251/Generate-Native-Executable-from-NET-Core-3-1-Proje?msg=5753507#xx5753507xx https://docs.microsoft.com/en-us /archive/msdn-magazine/2018/november/net-core-publishing-options-with-net-core

おそらく古いwin .net sdkでテストされていない可能性があり、同様のことができます。

于 2020-10-04T14:41:49.607 に答える
0

Microsoftブログの次の質問によると:

https://blogs.msdn.microsoft.com/amb/2011/05/27/how-to-prevent-ildasm-from-disassembly-my-net-code/

ILDASM がアセンブリを逆アセンブルしないようにするにはどうすればよいですか?

.NETSuppressIldasmAttributeコードの逆アセンブルを防止するという属性があります。たとえば、次のコードを検討してください。

using System;
using System.Text;
using System.Runtime.CompilerServices;
[assembly: SuppressIldasmAttribute()]

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello world...");
        }
    }
}

ご覧のとおり、違いは 2 つだけです。

  1. System.Runtime.CompilerServices名前空間の減速を追加しました。

  2. [assembly: SuppressIldasmAttribute()]属性を追加しました。

Visual Studio でアプリケーションをビルドした後、結果の EXE ファイルを で開こうとするとILDASM、次のメッセージが表示されます。

ここに画像の説明を入力

于 2019-01-27T06:28:19.800 に答える