.NET難読化ツール/戦略[終了]


160

私の製品には、ASP.NET、Windowsフォームアプリ、Windowsサービスなど、いくつかのコンポーネントがあります。コードの95%程度がVB.NETで記述されています。

知的財産上の理由から、コードを難読化する必要があります。これまで、5年以上前のバージョンのdotfuscatorを使用しています。新しい世代のツールに移行する時がきたと思います。私が探しているのは、新しい難読化ツールを検索するときに考慮する必要がある要件のリストです。

私がこれまでに探す必要があると知っていること:

  • シリアライゼーション/デシリアライゼーション。私の現在のソリューションでは、以前にシリアル化されたデータを読み込めないという苦痛が大きすぎるため、ツールにクラスデータメンバーを難読化しないように指示しています。
  • ビルドプロセスとの統合
  • ASP.NETでの作業。過去に、.dll名の変更(多くの場合、ページごとに1つある)が原因でこの問題が発生することがわかりました。

いくつかの重複:google.com/...
ジョン・ラッシュ


コードを難読化するための代替ソリューションについては、Agile.net .NET Obfuscatorを参照してください。特に、そのコード仮想化機能を確認してください。
サットンバーナード2016年

ArmDotからXenocodeへの難読化ツールの優れたリストは、SOのこちらからご覧ください:stackoverflow.com/a/60054/1480104
Artem Razin

回答:


43

.Net 1.1に戻ると難読化が不可欠でした。コードの逆コンパイルは簡単で、アセンブリからIL、C#コードに移行して、ほとんど労力をかけずに再度コンパイルすることができます。

現在.Net 3.5を使用しているので、よくわかりません。3.5アセンブリを逆コンパイルしてみてください。あなたが得るものはコンパイルから長い道のりです。

3.5からの最適化(1.1よりはるかに優れている)と、匿名型、デリゲートなどがリフレクションによって処理される方法を追加します(再コンパイルは悪夢です)。ラムダ式、Linq-syntaxやのようなコンパイラー「マジック」var、およびのようなC#2関数yield(結果として、読み取り不可能な名前の新しいクラスが生成される)を追加します。逆コンパイルされたコードは、コンパイル可能コードから長い道のりをたどります。

時間のかかる専門家チームでも、リバースエンジニアリングを再度行うことができますが、難読化されたコードについても同様です。彼らがそれから得たどのコードも維持できず、非常にバグが多い可能性が高いでしょう。

アセンブリにキー署名することをお勧めします(ハッカーがすべてを再コンパイルする必要があるものを再コンパイルできるかどうかを意味します)が、難読化する価値はないと思います。


127
まったくそう思わない。署名によって難読化を置き換えることはできません。署名は、コードをハッキングすることを目的としています。しかし、アイデアを隠すために何をすべきか、アルゴリズムなどを難読化することが唯一の方法です。
シュライク

24
署名によって難読化を置き換えることはできないと思います。ハッキングが非常に難しくなるだけです。難読化はあなたのアイデアを隠すことに失敗します-彼らがとにかくそれをコピーしたいのであれば、難読化はそれをはるかに難しくすることさえありません。特に、アルゴリズムはすべての演算子であるため、難読化はそれらに大きな影響を与えません。これらは通常、最も簡単に抽出できるものの1つです。
キース

6
難読化は、リソースが大量にあるチームについて使い捨てである場合は価値がないかもしれませんが、Reflectorを使用してアセンブリを開いてソースコードを保存すること以外に何も望まない「平均的な」開発者から保護するのに最適です。プロジェクトとして、調整を行います。難読化はその場所にあり、それを完全に排除することは間違った態度をとることです。それは防御層です。
Razor

5
逆コンパイルすると、ソースは乱雑な状態になりますが、論理的には同じパスをたどります。コンパイラの「魔法」のブードゥー教はありません。私は最近、リポジトリを失い、ソースコードを回復するためにリフレクターを使用したことを知っています。難読化がビルドプロセスの一部でない場合、難読化は「維持」するための苦痛です。それはオーバーヘッドを追加しますが、私たち全員が計算量の多いアプリを書いていますか?いいえ、それは弱い攻撃者にとって弱い防御層です。
Razor

8
なんて恐ろしい答えでしょう。最近、実際に逆コンパイルを試みましたか?デコンパイラーは改善されました、悪化していません。リフレクターはもちろんオリジナルのソースの品質を提供しますが、もちろんコメントはしません。
BlueRaja-Danny Pflughoeft 2016年

50

多数の難読化ツールを試しました。それらのいずれも、リモート処理を使用する大規模なクライアント/サーバーアプリでは機能しません。問題は、クライアントとサーバーがいくつかのdllを共有していて、それを処理できる難読化プログラムが見つからないことです。

私たちは、DotFuscator Pro、SmartAssembly、XenoCode、Salamander、および名前が私をエスケープするいくつかの小さな時間のアプリを試しました。

率直に言って、難読化は大きなハックだと確信しています。

それが取り組む問題でさえ、完全に本当の問題ではありません。あなたが本当に保護する必要がある唯一のものは、接続文字列、アクティベーションコード、そのようなセキュリティに敏感なものです。別の会社がコードベース全体をリバースエンジニアリングして競合製品を作成するというこのナンセンスは、現実ではなく、偏執的なマネージャーの悪夢からのものです。


14
ブラボーユダ!先を行く唯一の方法は、すでに作成したコードに固執するのではなく、新しいより優れたコードを開発することです。あなたは時間、労力、そしておそらくお金を無関係なものに投資することになります。難読化はそれだけの価値はありません。
David Rutten、

180
ですから、私はこの評判システムが好きではありません。あなたは19票を獲得していて、回答を提供していません。ユーザーは難読化についてのあなたの意見を求めているのではなく、難読化手法についてもっと知りたいと考えています。
バックスラッシュ

32
いくつかの既存の難読化ツールを使用した経験についての情報を提供しました。そして、私の意見はその経験から導き出されました。
ユダガブリエルヒマンゴ

6
「率直に言って、難読化は大きなハックだと確信している」あなたはこれ以上これを置くことができなかったでしょう。
AndreiRînea10年

15
コードを保護するための非常に有効なニーズは、数人のユーザーだけで内部的に使用する企業に高価な専用アプリを販売することです。魅力的なのは、コードを逆にして、内部でのハッキングと変更を目的に応じて許可したり、保守契約を回避したり、試用版をハッキングして必要な機能を入手したりすることです。
Brady Moritz

44

私は今、「ニーディープ」です。良い解決策を見つけようとしています。これまでの私の印象です。

Xenocode-.net 2.0アセンブリの難読化に使用していたXenocode2005の古いライセンスを持っています。XPでは問題なく動作し、適切なソリューションでした。私の現在のプロジェクトは.net 3.5であり、Vistaを使用しています。サポートから試してみるように言われましたが、2005バージョンはVista(クラッシュ)でも機能しません。 $ 1900 これは良いツールかもしれませんが、私は知るつもりはありません。高過ぎ。

Reactor.Net-これははるかに魅力的な価格であり、私のスタンドアロン実行可能ファイルでは問題なく動作しました。ライセンスモジュールも素晴らしく、私に多大な労力を節約してくれたでしょう。残念ながら、これには重要な機能がありません。これは、難読化からコンテンツを除外する機能です。これにより、必要な結果を得ることができなくなります(複数のアセンブリをマージして、いくつかを難読化し、他を難読化しないでください)。

SmartAssembly-この評価をダウンロードしたところ、問題なく動作しました。私が望むすべてを達成することができ、インターフェースはファーストクラスでした。価格はまだ少し高額です。

Dotfuscator Pro -Webサイトで価格が見つかりませんでした。現在見積もりを取得するために議論中。不吉な音。

Confuser-非常にうまく機能するオープンソースプロジェクト(名前が示すように、pplを混乱させるため)。

注:ConfiterExは、GitHubリポジトリのIssue#498に従って「壊れている」と報告されています。


8
dotfuscatorが引用した量を投稿できますか?
Anthony Johnston、

6
@Anthony 2011年の初めに最近ライセンスを購入しました。見積もりは、最低1台のビルドマシン+ 1台の開発者ライセンスで$ 2475 USDでした。12か月のアップグレードとサポートが含まれます。
ヨシ

2
この投稿が作成されたときは.NET Reactorを使用していませんでしたが、System.Reflection.Obfuscation属性を使用して、コードの一部を難読化から除外できます。また、すべてのメソッドやすべてのシリアル化可能な型を除外するなどの設定ができる設定もあります。
ベンテイト

5
DotFuscatorの見積もりは4999ドルでしたが、10%の割引により4500ドルに減額されました。これは1つの開発ライセンス用でした!議論では、それは2500ドルに減少しましたが、それでもあまりにも高価です。
オリバー

3
.NET Reactorに、特定のクラス、メソッド、またはプロパティを難読化から除外できる除外ルールエディターが追加されました。また、「マージのみ」チェックボックスを使用して、特定のdllを難読化から除外できます
avitenberg


18

私はsmartassemblyを使用しています。基本的に、DLLを選択すると、難読化されて返されます。問題なく動作するようで、今のところ問題はありません。とても、とても使いやすいです。


6
Smartassemblyはまったく役に立ちません。クラッカーはDumbAssemblyにあなたのアプリケーションを置くと、すべての「保護」は、マウスのクリックで削除されます。 woodmann.com/collaborative/tools/index.php/Dumbassembly
Elmue

2
現在のところ、Googleの安全なブラウジングにより、woodmannのサイトは危険であると報告されています。また、woodmannのサイトには以前彼がマルウェアに感染していたという記事全体が掲載されているため、Googleが信頼していない場合は、私は彼のサイトに移動したくありません。
ブライアン

10

私は市場にあるほぼすべての難読化ツールを試しましたが、私の意見ではSmartAssemblyが最高です。


6
Smartassemblyはまったく役に立ちません。クラッカーがアプリケーションをDumbAssemblyに配置し、すべての「保護」がマウスクリックで削除されます。woodmann.com
collaborative

3
現在のところ、Googleの安全なブラウジングにより、woodmannのサイトは危険であると報告されています。また、woodmannのサイトには以前彼がマルウェアに感染していたという記事全体が掲載されているので、Googleが信頼していない場合は彼のサイトに移動したくありません。
ブライアン

9

SmartAssemblyも使用しています。.netアプリケーションでは、Ezrinz .Net Reactorの方がはるかに優れていることがわかりました。それは難読化し、Monoをサポートし、アセンブリをマージし、試用版を作成したり、ライセンスを特定のマシンにリンクしたりするための非常に優れたライセンスモジュールも備えています(実装は非常に簡単です)。価格も非常に競争が激しく、必要なときに迅速にサポートを提供します。 エズリズ

はっきりさせておきますが、私は製品を好きで、会社とは何の関係もない、ただの顧客です。


.Net Reactorで誓う友人がたくさんいます-製品のWebサイトにはありませんが、製品に役立つGoogleグループもあります。groups.google.com
group

2
Ezirizの+1。私はそれで素晴らしい結果を得ました。IMO、今のところ最高です。
ドルイド

4
.NET Reactor Sucks。コンピュータを変更し、ライセンスファイルに関するメールを2回送信しましたが、応答がありませんでした。.NET Reactorライセンスがハードウェアロックされていることがわかります。
OrElse、

2
それは正常です。彼らはあなたをどう信じていると思いますか?彼らはあなたがあなたのコンピュータを本当に変えて、あなたの友人のライセンスをあなたのコンピュータで動かそうとしていないことをどうやって知るのですか?それはハードウェアロックです!複数のコンピュータで使用できる場合、ハードウェアロックは役に立たないでしょう。
Elmue、2014年

(PS。主にこのSO応答に基づいてReactorを選択しました。)
Chris

7

簡単に言えば、それはできないということです。

周りにさまざまなツールがあり、誰かがあなたのコードを読むのを難しくします-それらのいくつかは他の答えによって指摘されています。

ただし、これらはすべて読みにくくなり、必要な労力が増加します。多くの場合、これはカジュアルな読者を抑止するのに十分ですが、コードを掘り下げることを決心した人はいつでもそうすることができます。


51
if(efforts.Required> codeFromScratch.Costs)DoNoReverseEngineer();
Nicolas Dorier、2009年

41
@NicolasDorier、Operator '>' cannot be applied to operands of type 'System.TimeSpan' and 'decimal'
Saeb Amini

21
@Saebができることは確かで、TimeSpanからmoney(decimal)へのキャストは、ほとんどのビジネスについてです。
hultqvist 2014

6

私たちは、リモート処理もサポートするasp.netおよびwinformインターフェイスを備えた多層アプリを用意しています。あらゆる種類の予期しない方法で問題があり、私の意見ではそれだけの価値がないローダーを生成する暗号化タイプを除いて、難読化ツールの使用に問題はありませんでした。実際、私のアドバイスは、「ペストのようなローダータイプの難読化プログラムの暗号化を避ける」という説明に沿ったものになるでしょう。:)

私の経験では、難読化ツールはasp.netやリモーティングを含む.netのどの側面でも問題なく機能します。設定に慣れ、コードのどの領域にどれだけプッシュできるかを学ぶ必要があります。そして、時間をかけて取得したものについてリバースエンジニアリングを試し、さまざまな設定でどのように機能するかを確認してください。

私たちは商用アプリで何年にもわたって使用し、価格が適切であるという理由で、9rays.netのSpices obfuscatorで解決しました。正直に言うと、もう何年もサポートは必要ありませんでしたが、彼らは良いサポートを提供しています。どの難読化ツールを使用するかは重要ではないと思います。リモーティングとasp.netで適切に動作させたい場合、問題と学習曲線はすべて同じです。

他の人が言っているように、あなたが本当にやっていることは南京錠に相当するものであり、そうでなければ正直な人々を排除し、あるいは単にアプリを再コンパイルすることを難しくします。

ライセンスは通常、ほとんどの人にとって重要な領域であり、とにかくライセンスに何らかのデジタル署名付き証明書システムを使用する必要があります。最大の損失は、適切な場所にスマートシステムがなければ、ライセンスのカジュアルな共有によって発生します。ライセンスシステムを破る人々がそもそも購入することは決してありません。

これを実行しすぎて、顧客とビジネスに悪影響を及ぼし、単純で合理的なことを実行し、それについて心配することは本当に簡単です。


5

過去2日間、Dotfuscator Community Edition Advanced(Visual Studioにバンドルされている基本的なCEを登録した後の無料ダウンロード)を試しました。

難読化をデフォルトのオプションとして使用しない人が増える理由は、リスクと比較して難読化が深刻なためです。小規模なテストプロジェクトでは、多くの労力で難読化されたコードを実行できました。ClickOnceを介して単純なプロジェクトをデプロイするのは面倒でしたが、mageを使用してマニフェストに手動で署名した後で達成できました。唯一の問題は、エラー時にスタックトレースが難読化され、CEには解読器やクラリファイアがパッケージ化されていないことでした。

Virtual Earthの統合、多数のWebサービスの呼び出し、IOCコンテナー、および多数のリフレクションを使用して、Excelに基づくVSTOである実際のプロジェクトを難読化しようとしました。それは不可能でした。

難読化が本当に重要な要件である場合は、最初からそれを念頭に置いてアプリケーションを設計し、進行中に難読化されたビルドをテストする必要があります。そうでなければ、それがかなり複雑なプロジェクトである場合、あなたは深刻な苦痛に終わるでしょう。


5

Crypto Obfuscatorは、すべての懸念事項とシナリオに対処します。それ :

  1. ルールに基づいて、難読化からタイプ/メンバーを自動的に除外します。シリアル化された型/フィールドはその1つです。
  2. MSBUildを使用してビルドプロセスに統合できます。
  3. ASP.Netプロジェクトをサポートします。

3
fyi @logicnpがCryptoを作成しました。
CADが2016

暗号はサポートされなくなったようです。
Carl

私はいくつか試してみましたが、 "Crypto"は非常に攻撃的で役立つように見えましたが、De4dotで難読化されたDLLを実行すると、元のコードを取得しました...パーティを台無しにしてしまいました...
Dave Gahan

4

最近、ある無料の難読化ツールの出力を別の無料の難読化ツール、つまりDotfuscator CEとCodePlexの新しいBabel難読化ツールにパイプ接続してみました。私のブログの詳細。

シリアル化に関しては、そのコードを別のDLLに移動し、プロジェクトに含めました。いずれにしても、XMLにはない秘密はないので、難読化する必要はありませんでした。これらのクラスに深刻なコードがある場合は、メインアセンブリで部分クラスを使用することでそれをカバーできます。


-1「ヨーヨー、難読化ツールが好きだと聞いたので、難読化ツールの出力で難読化ツールを実行しました...詳細を知りたいですか?gimmeページヒット」。しかし、2番目の段落は非常に良い提案です。
ANeves 2014年

3

お使いのプラットフォームで最も安価で最もよく知られているものを使用し、それを1日と呼ぶ必要があります。高水準言語の難読化は難しい問題です。これは、VMオペコードストリームが、ネイティブオペコードストリームが行う2つの最大の問題、つまり関数/メソッドの識別とレジスタエイリアスの影響を受けないためです。

バイトコードのリバースについて知っておくべきことは、セキュリティテスターがまっすぐなX86コードをレビューして脆弱性を見つけることはすでに標準的な慣行であることです。生のX86では、関数呼び出し全体を通してローカル変数を追跡することはもちろん、有効な関数を見つけることさえできません。ほとんどの状況で、ネイティブコードリバーサーは関数名と変数名にアクセスできません---彼らがMicrosoftコードをレビューしている場合を除き、MSFTはその情報を一般に公開しています。

「Dotfuscation」は、主に関数と変数名をスクランブルすることによって機能します。リフレクターが文字通りソースコードをあきらめているデバッグレベルの情報を含むコードを公開するよりも、おそらくこれを行う方が良いでしょう。しかし、これを超えて何をしても、収益が減少する可能性があります。



3

"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には完全に効果的な難読化戦略はありません。十分なスキルを持った人なら、いつでもアプリケーションを逆コンパイル/変更できます。


+1。私はそこにあるほぼすべての無料の.NET難読化ツールを試してみましたが、Dotfuscatorは、ASP.NETアプリケーションのMSILのかなりの部分を実際に難読化した唯一のものです。
10

@Saille、無料のDotfuscator-Community Editionを使用しましたか?私はちょうど販売チャットをしました、そして彼らはプロ版が2000ユーロを要すると言います。:(
Houman

Dotfuscatorには価値がありません。
user626528 14年

3

リアクターを避けます。それは完全に役に立たない(そしてはい、私はライセンスに支払いました)。Xenocodeは私が出会った最高のもので、ライセンスも購入しました。サポートはとても良かったのですが、それがうまくいったのであまり必要としませんでした。私は見つけることができるすべての難読化ツールをテストしましたが、私の結論は、xenocodeがはるかに堅牢で、最高の仕事をしたということです(.NET exeをネイティブexeに後処理して他のどこにも見られなかった可能性もあります)。

reactorとxenocodeの間には2つの主な違いがあります。1つ目は、Xenocodeが実際に機能することです。2つ目は、アセンブリの実行速度に違いがないことです。reactorでは、約600万倍遅くなりました。また、原子炉は一人で操作しているような印象を受けました。


.NET Reactorには多くのオプションがあります。それらのいくつかはランタイム保護を含み、アプリケーションを少し遅くしますが、これはあなたが得る追加のセキュリティの代償です。ただし、他のオプションなしで.NET Reactor難読化を使用するだけで速度が低下するかどうかは真剣に疑っています
avitenberg


2

.Net 1以来、同じアプリケーションのコードを難読化してきましたが、保守の観点からすると、これは大きな頭痛の種でした。既に述べたように、シリアライゼーションの問題は回避できますが、間違いを犯して難読化したくないものを難読化するのは本当に簡単です。ビルドを壊したり、難読化パターンを変更したりして、古いファイルを開けないようにするのは簡単です。さらに、何がどこで問題があったのかを見つけるのが難しい場合があります。

私たちが選んだのはXenocodeでしたが、今日再び選択を行うのであれば、コードを難読化したり、Dotfuscatorを使用したりしたくありません。



1

WindowsクライアントでSmartAssemblyを使用しています。うまく動作します。

いくつかの余分な問題も追加します。ログファイル/例外でクラス名を出力することで、難読化を解除する必要があります。そしてもちろん、その名前からクラスを作成することはできません。したがって、クライアントを見て、難読化によってどのような問題が発生するかを確認することをお勧めします。




1

私は最新のrpojectで難読化/リソース保護を使用する必要があり、Crypto Obfuscatorは使いやすく使いやすいツールであることがわかりました。シリアル化の問題は、このツールの設定の問題のみです。


@logicnp、これは、この製品を支持するこのスレッドの2番目の投稿です。この製品の開発者と関係がある場合は開示してください。
H2ONaCl 2015年

申し訳ありませんが、de4dotはそれを難読化できます。ConfuserExの使用をお勧めします
newbieguy

1

Obfuscarと呼ばれる優れたオープンソースバージョンがあります。正常に動作するようです。タイプ、プロパティ、フィールド、メソッドは除外できます。オリジナルはここにあります:https : //code.google.com/p/obfuscar/、しかしそれはもう更新されていないようですので


今日これを見ました-コメントの日付を書き留めます!-そして、それを始めるのは少し厄介です。また、.pfxファイルを使用してアセンブリに再署名するために、時間の大部分を失いました。理解できない、文書化されていないエラーが発生しました。.snkを使用しないと署名できないようです。
SteveCinq 2018



0

SmartAssemblyは素晴らしいです、ほとんどのプロジェクトで使用されました



-1

難読化は実際の保護ではありません。

.NET Exeファイルがある場合、FARの方が優れていますソリューションがあります。

私はテミダを使います ていますが、非常にうまく機能していることがます。

Themidaの唯一の欠点は、.NET DLLを保護できないことです。(ExeとDLLのC ++コードも保護します)

Themidaは、ここで言及した難読化ツールよりもはるかに安価であり、最高で 海賊行為の 保護市場に。コードの重要な部分が実行され、クラッカーによって設定された操作またはブレークポイントを検出するいくつかのスレッドを実行すると、仮想マシンが作成されます。.NET ExeをReflectorが.NETアセンブリとして認識しなくなったものに変換します。

彼らのウェブサイトの詳細な説明を読んでください:http : //www.oreans.com/themida_features.php


-2

私はRummageと呼ばれる製品を試しました、それはあなたにいくつかの制御を与えるのに良い仕事をします...それはEzirizが提供する多くのものを欠いていますがRummageの価格が高すぎる...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.