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