商用の .Net アプリケーションを難読化することを考えていました。しかし、そのようなツールを選択し、購入し、使用することは本当に価値があるのでしょうか? 難読化されたバイナリは、リバース エンジニアリングから本当に安全なのですか?
16 に答える
ツールを購入する必要がない場合があります。Visual Studio.NET には Dotfuscator のコミュニティ バージョンが付属しています。その他の無料の難読化ツールはこちらにリストされており、ニーズを満たす場合があります。
難読化されたバイナリは、リバース エンジニアリングから安全ではない可能性があります。自転車のロックが壊れたりピッキングされたりする可能性があるのと同じです。ただし、コード/自転車泥棒を抑止するには、ちょっとした不便で十分な場合がよくあります。
また、法廷でコードに対する権利を主張するときが来たら、それを (難読化することによって) 保護する努力をしているのが見られれば、余分なポイントが得られる可能性があります。:-)
ただし、欠点を考慮する必要があります。難読化されたコードでリフレクションを使用するのはより困難になる可能性があり、log4net などを使用して、関連するクラスの名前に基づいてログ行の一部を生成している場合、これらのメッセージは次のようになる可能性があります。解釈するのははるかに困難です。
難読化は、コードをざっと調べる人にとっては障壁にすぎないことを忘れないでください。誰かがあなたが書いたものを理解しようと真剣に考えている場合、あなたは彼らを止めるのに非常に苦労するでしょう.
コードにシークレット (パスワードなど) がある場合は、それが間違っています。
誰かがあなたのアイデアで独自のソフトウェアを作成するのではないかと心配している場合は、顧客が必要とする新しいバージョンを提供し、技術サポートを提供し、顧客のパートナーになることで、市場でより多くの幸運を得ることができます. 良いビジネスが勝ちます。
当社では難読化技術をいくつか評価しましたが、いずれも問題がありました。最大の問題は、プロパティ名に基づいてグリッドを動的に作成するなど、リフレクションに大きく依存していることです。
したがって、すべての難読化ツールは名前を変更します。もちろん無効にすることもできますが、難読化の利点の多くが失われます。
また、私たちのコードには、より多くのメソッドとプロパティが公開されていることに依存する多くの NUnit テストがあります。これにより、一部の難読化ツールがこれらのクラスを難読化できなくなりました。
最終的に、 .NET Reactorという製品に落ち着きました。
それは非常にうまく機能し、他の製品に関連する問題はありません.
「難読化ツールとは対照的に、.NET Reactor は、純粋な .NET アセンブリ (C#、VB.NET、Delphi.NET、J#、MSIL... で記述) をネイティブ マシン コードと混合することで、逆コンパイルを完全に停止します。詳しくは、.NET Reactor潜在的なハッカーと .NET コードの間にネイティブの壁を構築します. 結果は標準の Windows ベースのファイルであり, MSIL 互換ではありません. 元の .NET コードは元のままであり, ネイティブ コードによって十分に保護されており, 詮索好きには見えません. 元の .NETコードはいつでもハードディスクにコピーされません。.NET Reactor で保護されたアセンブリを逆コンパイルできるツールはありません。」
実際にリバースエンジニアリングできるという事実は、難読化を役に立たなくすることにはなりません。それはバーを大幅に引き上げます。
難読化されていない.NETアセンブリは、 .NET Reflectorをダウンロードするだけで、すべてのソースを強調表示して表示します。それに難読化を追加すると、コードを変更できる人の数を大幅に減らすことができます。
それはあなたがあなた自身を保護しているかどうかに依存します。難読化せずに出荷する場合は、アプリケーションをオープンソース化し、マーケティングの恩恵を受けることもできます。難読化された状態で出荷すると、コードを盗んで直接の競合相手を作成するのではなく、パッチを介して変更されたバイナリを比較的簡単に生成できるようになります。もちろん、難読化されたコードから実際のソースを取得することは、難読化ツールによっては非常に困難です。
考慮すべき事項:
- 難読化は、コードやロジックを保護しません。読んで理解するのが難しくなるだけです。
- 難読化は、リバース エンジニアリングを止めるものではありません。プロセスが遅くなるだけです。
- あなたの知的財産は、ほとんどの国で法律によって保護されています。したがって、競合他社があなたのコードまたは特定の実装を使用した場合、競合他社を訴えることができます。
難読化によって解決できる唯一の問題は、誰かが特定の実装の 1:1 (または 1:1 に近い) コピーを作成することです。
また、理想的な世界では、難読化されたアプリケーションのリバース エンジニアリングは経済的で魅力的ではありません。
しかし現実に戻る:
- この地球上には、アプリケーションが提供または生成するユーザー インターフェイス、動作、または結果を誰かがコピーするのを止めるツールは存在しません。この状況では、難読化は 100% 役に立たない
- 市場で最高の難読化ツールを使用しても、逆アセンブラーや 16 進エディターの使用を止めることはできません。一部のオタクにとって、これはアプリケーションの心臓部を調べるのに非常に適しています。難読化されていないコードよりも難しいだけです。
したがって、現実には、アプリケーションを調べるのをより困難にし、より多くの時間を費やすことはできますが、実際には信頼できる保護は得られません. 無料または商用の製品を使用するかどうかに関係なく。
制御フローの難読化やコードの仮想化などの高度なテクノロジは、ロジックの理解を非常に難しくするのに役立つ場合がありますが、問題をデバッグまたは解決するのが非常に難しく、困難になる可能性もあります。したがって、それらは解決策というよりも追加の問題のように見える場合があります。
私の見解では、難読化は、一部の企業が製品に請求する金額に値しません。カジュアルな開発者をしつこくしたい場合は、オープン ソースの難読化ツールで十分です。アプリケーションの心臓部をできるだけ調べにくくしたい場合は、仮想実行環境と仮想ファイルシステムで暗号化コンテナーを使用する必要がありますが、それらは攻撃ベクトルも提供し、問題がいっぱいのバッグの原因になる可能性もあります.
あなたの知的財産と製品は、ほとんどの国で法律によって保護されています。したがって、あなたのコードを分析してコピーしている競合他社が 1 人いる場合は、その競合相手を訴えることができます。悪者やハッカー、クラッカーがあなたのアプリケーションを盗んだ場合、あなたはいたずらされていますが、難読化ツールは違いを生みません。
したがって、最初にターゲット、市場、および難読化ツールで達成したいことについて考える必要があります。ここ (および他の場所) で読むことができるように、難読化はリバース エンジニアリングの問題を実際には解決しません。それはそれを難しくし、より多くの時間を費やすだけです。ただし、これが必要な場合は、sharpObfuscator や obfuscar などのオープン ソースの難読化ツールを参照してください。これは、カジュアルなコーダーをしつこくするのに十分な場合があります (リストはここにあります: List of .NET Obfuscators on Wikipedia )。
あなたのシナリオで可能であれば、SaaS-Concepts にも興味があるかもしれません。これは、ソフトウェア自体ではなく、ソフトウェアへのアクセスを提供することを意味します。したがって、顧客は通常、アセンブリにアクセスできません。しかし、サービス レベル、セキュリティ、およびユーザー ベースによっては、信頼性、信頼性、パフォーマンスに優れた SaaS サービスを実現するのは、費用がかかり、複雑で、困難になる可能性があります。
商品の種類にもよると思います。開発者が使用するように指示されている場合、難読化は顧客を傷つけます。仕事で ArcGIS 製品を使用してきましたが、すべての DLL が難読化されています。Reflector を使用して奇妙な動作を解読することができないため、私たちの仕事は非常に困難になっています。そして、製品に何千ドルも支払った顧客を購入しています。
本当に必要でない限り、難読化しないでください。
私はx86アセンブリコードを読むのがとても快適ですが、20年以上アセンブリを扱っている人はどうですか?
あなたはいつもあなたのc#またはcコードが何をしているのかを見るのに1分しか必要としない誰かを見つけるでしょう...
数時間後に Dotfuscator Community Edition (VS2008 に付属) のライセンスをざっと読んだだけですが、このバージョンを使用して商用製品を配布したり、コードを難読化したりすることはできないと思います。あなた以外の開発者が関与するプロジェクトから。したがって、商用アプリの開発者にとっては、単なる試用版です。
いいえ、難読化によって誰かがコンパイルされたコードを解読できなくなるわけではないことが証明されています。そうすることはより困難になりますが、不可能ではありません。
...snip...これらのメッセージは解釈がはるかに難しくなる可能性があります
はい。ただし、VisualStudioに付属する無料のコミュニティエディションにはマップ機能があります。これにより、難読化されたメソッド名を元の名前に戻すことができます。
ある無料の難読化ツールからの出力を別の難読化ツールに入れることに成功しました。Dotfuscator CEには、難読化のトリックの一部しか含まれていないため、異なるトリックを持つ2番目の難読化ツールを使用すると、難読化がさらに進みます。
.netリフレクターを使用して.netアプリをリバースエンジニアリングするのは非常に簡単です。アプリはMSILから直接VB、VC、C#コードを生成し、あらゆる種類の有用な宝石を引き出すことができるためです。
コード難読化ツールは、ほとんどのリバースエンジニアリングハックからコードを非常によく隠します。アプリに付加価値を与える独自の競争力のあるコードで使用することをお勧めします。
Yes you definitely should. Not to protect it from a determined person, but to get some profit and have customers. By the way, if you reach a point here someone tries to crack your software, that means you sell a popular software.
The problem is what tool to choose for the job. Check out my experience with commercial obfuscators: https://stackoverflow.com/questions/337134/what-is-the-best-net-obfuscator-on-the-market/2356575#2356575
この投稿と周囲の質問には、価値のある議論があります。それはイエスかノーかの問題ではありません。
しかし、そのようなツールを選択し、購入し、使用することは本当に価値がありますか?
Eazfuscatorは安く(無料)、使いやすいと思いました。約1日かかりました。私はすでに大規模な自動テスト(良好なカバレッジ)を行っていたので、難読化によって導入された/導入されたバグを見つけることができたと思います。
はい、そうです。BitHelmet難読化ツールを使用しています。それは新しいですが、それは本当にうまく機能します。