質問
私の製品にはいくつかのコンポーネントが含まれています。ASP.NET、Windows フォーム アプリ、および Windows サービス。コードの 95% 程度は VB.NET で書かれています。
知的財産上の理由から、コードを難読化する必要があるため、これまで 5 年以上前のバージョンの dotfuscator を使用していました。新世代のツールに移行する時期が来たと考えています。私が探しているのは、新しい難読化ツールを検索するときに考慮する必要がある要件のリストです。
これまでのところ、探す必要があるとわかっていることは次のとおりです。
- シリアル化/逆シリアル化. 。私の現在のソリューションでは、単にツールに指示するだけです ない 以前にシリアル化されたデータをロードできないという苦痛があまりにも大きいため、クラス データ メンバーを難読化します。
- ビルドプロセスとの統合
- ASP.NETの操作. 。以前、.dll 名の変更 (ページごとに 1 つずつ存在することがよくあります) が原因で、この問題が発生していることがわかりました。これは、すべてのツールで適切に処理できるわけではありません。
解決
.Net 1.1 では難読化が不可欠でした。コードの逆コンパイルは簡単で、アセンブリ、IL、C# コードに移行して、ほとんど労力をかけずに再度コンパイルすることができました。
.Net 3.5 ではまったくわかりません。3.5 アセンブリを逆コンパイルしてみてください。得られるものはコンパイルからは程遠いものです。
3.5 の最適化 (1.1 よりもはるかに優れています) と、匿名型、デリゲートなどがリフレクションによって処理される方法 (再コンパイルは悪夢です) を追加します。ラムダ式、Linq 構文のようなコンパイラ「マジック」を追加し、 var
, 、C#2 関数は次のようになります yield
(その結果、判読できない名前を持つ新しいクラスが作成されます)。逆コンパイルされたコードは、コンパイル可能には程遠い状態になります。
時間に余裕のある専門チームであれば、リバース エンジニアリングして元に戻すこともできますが、難読化されたコードについても同じことが当てはまります。そこから得られたコードは保守不可能であり、非常にバグが多い可能性が高くなります。
私はアセンブリにキー署名することをお勧めします (つまり、ハッカーがアセンブリを再コンパイルできる場合は、すべてを再コンパイルする必要があります) が、難読化にはそれだけの価値があるとは思いません。
他のヒント
私たちはいくつかの難読化ツールを試してきました。いずれも、リモート処理を使用する大規模なクライアント/サーバー アプリでは機能しません。問題は、クライアントとサーバーが一部の DLL を共有していることですが、それを処理できる難読化ツールが見つからないことです。
私たちは DotFuscator Pro、SmartAssembly、XenoCode、Salamander、そして名前が分からないいくつかの小規模なアプリを試してきました。
率直に言って、難読化は大きなハックであると私は確信しています。
それが扱っている問題でさえ、完全に現実の問題ではありません。本当に保護する必要があるのは、接続文字列、アクティベーション コード、そのようなセキュリティに依存するものだけです。別の会社があなたのコードベース全体をリバースエンジニアリングし、そこから競合製品を作成しようとしているなどというナンセンスは、偏執的なマネージャーの悪夢のようなものであり、現実ではありません。
私は今、この問題に「膝まで深く」陥っており、良い解決策を見つけようとしています。ここまでの感想です。
ゼノコード - Xenocode2005 の古いライセンスを持っており、.net 2.0 アセンブリを難読化するために使用していました。XPでは問題なく動作し、まともな解決策でした。現在のプロジェクトは .net 3.5 で、Vista を使用しています。サポートからは試してみるよう言われましたが、2005 バージョンは Vista では動作しない (クラッシュする) ため、今ではとんでもない価格で「PostBuild2008」を購入する必要があります。 1900ドルの。これは良いツールかもしれませんが、調べるつもりはありません。高すぎる。
Reactor.Net - これははるかに魅力的な価格帯であり、私のスタンドアロン実行可能ファイルでは問題なく動作しました。ライセンスモジュールも素晴らしく、かなりの労力を節約できたでしょう。残念ながら、重要な機能が欠けています。それは、難読化から内容を除外する機能です。これにより、必要な結果 (複数のアセンブリをマージし、一部を難読化し、その他は難読化しない) を達成することができなくなります。
スマートアセンブリ - このために Eval をダウンロードしましたが、問題なく動作しました。望んでいたものはすべて達成でき、インターフェースも一流でした。価格帯はまだ少し高価です。
Dotfuscator プロ - ウェブサイトで価格が見つかりませんでした。現在お見積りに向けて協議中です。不気味ですね。
混乱させる - 非常にうまく機能するオープンソース プロジェクト (名前が示すとおり、ユーザーを混乱させるため)。 https://confuser.codeplex.com/
(jgauffin によって追加されました)
注記:によると、ConfuserEx は「壊れている」と報告されています。 問題 #498 GitHub リポジトリにあります。
無料のものをお探しの場合は、Visual Studio に付属する DotObfuscator Community Edition を試すことができます。 Eazfuscator.NET.
2012 年 6 月 29 日以降, Eazfuscator.NET は商用化されました。無料で利用できる最後のバージョンは 3.3 です。
私はスマートアセンブリを使用しています。基本的に、DLL を選択すると、難読化された状態で返されます。うまく機能しているようで、これまでのところ問題はありません。とてもとても使いやすいです。
私は市場に出回っているほぼすべての難読化ツールを試しましたが、私の意見では SmartAssembly が最高です。
私も SmartAssembly を使用しています。.net アプリケーションでは、Ezrinz .Net Reactor の方がはるかに優れていることがわかりました。難読化し、Mono をサポートし、アセンブリをマージします。また、試用版を作成したり、ライセンスを特定のマシンにリンクしたりするための非常に優れたライセンス モジュールもあります (実装は非常に簡単です)。価格も非常に競争力があり、サポートが必要なときは迅速に対応してくれました。エジリズ
念のため言っておきますが、私は製品が好きな単なる顧客であり、会社とは何の関係もありません。
簡単に言うと、それはできないです。
誰かがあなたのコードを読むのを難しくするさまざまなツールが周囲にあります - そのうちのいくつかは他の回答で指摘されています。
ただし、これらは読みにくくするだけで、必要な労力が増えるだけです。多くの場合、これはカジュアルな読者を思いとどまらせるのに十分ですが、コードを徹底的に掘り下げようと決意している人はいつでもそうすることができます。
リモーティングもサポートする asp.net と winform インターフェイスを備えた多層アプリがあります。あらゆる種類の予期しない方法で問題が発生する可能性があり、私の意見では、それだけの価値がないローダーを生成する暗号化タイプを除いて、難読化ツールの使用に問題はありませんでした。実際のところ、私のアドバイスは「疫病のようなローダータイプの難読化ツールの暗号化を避ける」に近いものになります。:)
私の経験では、どの難読化ツールも、asp.net やリモーティングを含む .net のあらゆる側面で問題なく動作します。必要なのは、設定をよく理解し、コードのどの領域でどこまでプッシュできるかを学ぶことだけです。そして、時間をかけて取得したものをリバース エンジニアリングして、さまざまな設定でどのように機能するかを確認してください。
私たちは商用アプリで何年にもわたっていくつかを使用し、9rays.net の Spices obfuscator に落ち着きました。価格が適切で、機能し、サポートが充実しているためです。ただし、ここ数年はサポートを必要としていませんでしたが、正直に言うと、どの難読化ツールを使用するかは実際には重要ではないと思います。リモーティングと asp.net で適切に動作させたい場合、問題と学習曲線はすべて同じです。
他の人が述べているように、実際にやっていることは南京錠と同等であり、誠実な人を締め出したり、アプリを単純に再コンパイルすることを困難にしたりします。
通常、ライセンスはほとんどの人にとって重要な領域であり、いずれにしてもライセンスには何らかのデジタル署名された証明書システムを使用する必要があります。賢いシステムが導入されていない場合、最大の損失は、ライセンスをカジュアルに共有することで発生します。ライセンス システムを破る人々は、そもそも購入するつもりはありません。
これを行き過ぎて、顧客やビジネスに悪影響を与えるのは非常に簡単です。シンプルかつ合理的なことを実行すれば、心配する必要はありません。
ここ 2 日間、私は Dotfuscator Community Edition Advanced (Visual Studio にバンドルされている基本 CE を登録すると無料でダウンロードできる) を試してきました。
難読化をデフォルトのオプションとして使用しない人が増えているのは、リスクに比べて難読化が非常に面倒だからだと思います。小規模なテスト プロジェクトでは、多大な労力をかけて難読化されたコードを実行することができました。ClickOnce 経由で単純なプロジェクトをデプロイするのは面倒でしたが、mage を使用してマニフェストに手動で署名した後は実現可能でした。唯一の問題は、エラー時にスタック トレースが難読化された状態で返され、CE に難読化解除機能や明確化機能がパッケージされていないことでした。
Excel ベースの VSTO である実際のプロジェクトを、Virtual Earth の統合、多くの Web サービス呼び出し、IOC コンテナー、および多くのリフレクションを使用して難読化しようとしました。それは不可能でした。
難読化が本当に重要な要件である場合は、最初から難読化を念頭に置いてアプリケーションを設計し、進行に合わせて難読化されたビルドをテストする必要があります。そうしないと、それがかなり複雑なプロジェクトの場合、深刻な苦痛に見舞われることになります。
暗号難読化ツール すべての懸念事項やシナリオに対処します。それ :
- ルールに基づいて型/メンバーを難読化から自動的に除外します。シリアル化された型/フィールドもその 1 つです。
- MSBUild を使用してビルド プロセスに統合できます。
- ASP.Net プロジェクトをサポートします。
私は最近、ある無料の難読化ツールの出力を別の無料の難読化ツール、つまり Dotfuscator CE と CodePlex の新しい Babel 難読化ツールにパイプしてみました。さらに詳しく 私のブログで.
シリアル化に関しては、そのコードを別の DLL に移動し、プロジェクトに含めました。いずれにせよ、XML にない秘密はそこには存在しないため、難読化する必要はないと考えました。これらのクラスに重大なコードがある場合は、メイン アセンブリで部分クラスを使用することでカバーできるはずです。
あなたのプラットフォームで最も安価で最もよく知られているものを使用して、それをやめるべきです。VM オペコード ストリームは、ネイティブ オペコード ストリームが抱える 2 つの最大の問題に悩まされないため、高級言語の難読化は困難な問題です。関数/メソッドの識別とレジスタのエイリアス。
バイトコード リバースについて知っておくべきことは、セキュリティ テスターがそのままの X86 コードをレビューして脆弱性を見つけるのがすでに標準的な手法であるということです。生の X86 では、関数呼び出し全体でローカル変数を追跡することはおろか、有効な関数を見つけることさえ必ずしもできません。ネイティブ コードリバーサーが関数名や変数名にアクセスできる状況はほとんどありません。Microsoft コードをレビューしている場合を除き、MSFT はその情報を一般に公開しています。
「Dotfuscation」は主に、関数名と変数名をスクランブルすることによって機能します。デバッグ レベルの情報を含むコードを公開するよりも、おそらくこれを行うほうがよいでしょう。Reflector が文字通りソース コードを放棄することになります。しかし、これを超えて何かを行うと、利益は減少する可能性があります。
Smartassembly では問題はありませんでした。
「Dotfuscator Community Edition」を使用することもできます。これは、Visual Studio 2008 Professional にデフォルトで付属しています。それについては、次の場所で読むことができます。
http://msdn.microsoft.com/en-us/library/ms227240%28VS.80%29.aspx
http://www.preemptive.com/dotfuscator.html
製品の「プロフェッショナル」バージョンは費用はかかりますが、より優れています。
コードを難読化する必要は本当にありますか?通常、セキュリティ目的で使用されない限り、アプリケーションが逆コンパイルされても問題はほとんどありません。誰かがあなたのコードを「盗む」のではないかと心配している場合でも、心配する必要はありません。あなたのコードを見る人の大多数は学習目的です。いずれにしても、.NET には完全に効果的な難読化戦略はありません。十分なスキルを持つ人がいつでもアプリケーションを逆コンパイル/変更できるでしょう。
リアクターを避けてください。それはまったく役に立ちません(はい、ライセンス料を支払いました)。Xenocode は私が出会った最高のもので、ライセンスも購入しました。サポートはとてもよかったですが、普通に使えたのであまり必要ありませんでした。見つけることができるすべての難読化ツールをテストしましたが、私の結論は、xenocode が断然最も堅牢で、最高の仕事をしたということです (また、.NET exe をネイティブ exe に後処理する可能性もありますが、これは他では見られませんでした)。
リアクターと xenocode の間には 2 つの主な違いがあります。1 つ目は、Xenocode が実際に動作するということです。2 つ目は、アセンブリの実行速度が変わらないことです。リアクターを使用すると、約 600 万倍遅くなります。また、原子炉はワンマンオペレーションであるという印象を受けました。
Agile.Net は難読化だけでなく暗号化も提供するため、.Net アセンブリに非常に優れた保護を提供することがわかりました。無料のトレイルをダウンロードしてください。
http://secureteam.net/NET-Code-Protection.aspx
http://secureteam.net/downloads.aspx
私は .Net 1 以来、同じアプリケーション内のコードを難読化してきましたが、メンテナンスの観点から見ると大きな頭痛の種でした。すでに述べたように、シリアル化の問題は回避できますが、間違いを犯し、難読化したくないものを難読化してしまうのは非常に簡単です。ビルドが中断されたり、難読化パターンが変更されて古いファイルを開けなくなったりするのは簡単です。さらに、何がどこで間違っていたのかを見つけるのが難しい場合もあります。
私たちの選択は Xenocode でしたが、もし今日再び選択するとしたら、コードを難読化しないこと、または Dotfuscator を使用することを希望します。
これは Microsoft 自身からのドキュメントです。 参考になれば幸いです...2003 年のことですが、今でも関係があるかもしれません。
Windows クライアントで SmartAssembly を使用しています。問題なく動作します。
追加の問題もいくつか追加されます。ログ ファイル/例外にクラス名を出力するには、難読化を解除する必要があります。そしてもちろん、その名前からクラスを作成することはできません。したがって、クライアントを調べて、難読化によってどのような問題が発生するかを確認することをお勧めします。
それはすべて、使用するプログラミング言語によって異なります。記事を読む: 難読化されたコード
無料の方法は、Visual Studio 内から dotfuscator を使用することです。そうでない場合は、Postbuild のような難読化ツールを購入する必要があります (http://www.xenocode.com/Landing/Obfuscation.aspx)
最新の rpoject で難読化/リソース保護を使用する必要があったのですが、 暗号難読化ツール 素晴らしくて使いやすいツールとして。シリアル化の問題は、このツールの設定のみの問題です。
Obfuscar と呼ばれる優れたオープンソース バージョンがあります。うまく機能しているようです。型、プロパティ、フィールド、メソッドは除外できます。原文はこちらです: https://code.google.com/p/obfuscar/, 、しかし、もう更新されないようなので、誰かがここにフォークしました。 https://obfuscar.codeplex.com/
私もsmartassemblyを使っています。ただし、Web アプリケーションでどのように機能するかはわかりません。ただし、アプリがシェアウェア タイプの保護を使用している場合は、ブール値を返すライセンスをチェックしないように注意してください。バイトクラックは簡単すぎる。http://blogs.compdj.com/post/Binary-hack-a-NET-executable.aspx
SmartAssembly は素晴らしいです。私はほとんどのプロジェクトで使用しました
Eziriz のデモ版を試してみました。気に入りました。しかし、ソフトウェアは一度も持ってきませんでした。
難読化は本当の保護ではありません。
.NET Exe ファイルがある場合は、 はるかに優れています 解決。
私が使う テミダ そしてそれが非常にうまく機能していることがわかります。
Themida の唯一の欠点は、.NET DLL を保護できないことです。(Exe および DLL 内の C++ コードも保護します)
Themida は、ここで述べた難読化ツールよりもはるかに安価であり、次の点で最高です。 アンチ 海賊行為 保護 市場にあります。コードの重要な部分が実行される仮想マシンを作成し、クラッカーによって設定された操作やブレークポイントを検出する複数のスレッドを実行します。.NET Exe を、Reflector が .NET アセンブリとしてさえ認識しないものに変換します。
ウェブサイトで詳細な説明をお読みください。http://www.oreans.com/themida_features.php
私は Rummage という製品を試しましたが、ある程度のコントロールを与えるのに非常に優れています。エジリズが提供するものには多くのものが欠けていますが、ラメージの価格は良すぎます...