2012-05-13 4 views
3

私はスマートアセンブリを試して、それに非常に満足しました。エラー報告機能は素晴らしいです。依存関係の統合も非常にクールな機能でした。私の質問は、スマートアセンブリのように動作する無料の代替手段がありますか?エラー報告と依存関係の統合を伴うSmartAssemblyの無料代替

私はEazfuscator.NETを試しましたが、それは素晴らしいobfuscatorでしたが、Smart Assemblyのお気に入りの2つが欠けています。 .Netフレームワークのエラー報告と依存関係の統合に利用できる無料のツールはありますか?

+0

私は(アンマネージコードを持っていた)の依存関係を統合する目的のためだけにこれらの様々なを試してみましたが、私はそれだけでスマートなアセンブリで達成できます。悲しいことに、それは無料ではありません.. – nawfal

+0

これに関連する:http://stackoverflow.com/questions/4844345/alternatives-to-smartassembly-for-exception-handling-and-reporting – nawfal

+0

AFAIK、これらのすべての機能を持つ無料の代替手段はありませんしかし、コストの低いソフトウェアを検討することができれば、これらの機能をすべて備えた[Crypto Obfuscator](http://www.ssware.com/cryptoobfuscator/obfuscator-net.htm)をご覧ください。免責事項:私はLogicNP、Crypto Obfuscatorの開発者のために働いています。 – logicnp

答えて

5

Eazfuscator.NETのドキュメントを読んでいるうちに、アセンブリマージとアセンブリ組み込みと呼ばれる2つの機能が含まれていました。エラー報告のために、私は自分のライブラリを作成しました。あなたは、誰もが

はじめ

アセンブリマージをマージ

指示以下のアセンブリは、いくつかのアセンブリをマージすることができます以下でアセンブリマージまたは埋め込む使用することができます

CodePlex CrashReporter.NET

でこのライブラリを見つけることができます1つにこの は、展開とセキュリティの観点から有益な場合があります。

アセンブリー技術は、下にILMergeユーティリティーを使用します。ですので、 でアセンブリをマージするには、ILMergeが であることを確認してください。アセンブリのマージは によってILMergeユーティリティを別々に使用することによっても実現できますが、多くの場合、 は、 Eazfuscator.NETによって提供されるアセンブリマージインタフェースを使用する方が手軽です。

Eazfuscator.NETからマージするアセンブリを使用してから対直接 ILMergeの利用メリット

Eazfuscator.NET Eazfuscator.NETアシスタントからの助けを借りて プロセスを構築するプロジェクトに自動的に統合します。 直接ILMergeを使用する場合は、 プロジェクト用のビルドイベントハンドラを手動で記述する必要があります。Eazfuscator.NETは、 というプロジェクトの署名オプションを魔法のように処理します。直接ILMergeを使用する場合は、 に署名キーとオプションを手動で入力する必要があります。Eazfuscator.NETは ILMergeにターゲットプラットフォーム情報を提供します。入力アセンブリから自動的に が検出されます。直接ILMergeを使用する場合は、 にこの情報を手動で入力する必要があります。Eazfuscator.NETは、ILMerge マニュアルを読む必要がないため、すべての必要なオプションを使用して ILMergeをフィードします。統合を大幅に高速化します

既定では、アセンブリの混乱は アセンブリの難読化中には使用されません。

手順

はあなたのアセンブリに特別に形成され 属性(複数可)を適用すべきでマージアセンブリを有効にするには。これを行うには、下記の 手順を使用してください。 IDE内

オープンobfuscatableプロジェクトをマージ可能アセンブリ上

命令は、 プロジェクトに新しいソースファイルを追加し、または(Visual Basic .NETのための) ObfuscationSettings.vb(C#の場合)ObfuscationSettings.csそれを呼び出します。とObfuscationSettings.vb記入は、Visual Basic .NETの場合

using System; 
using System.Reflection; 

[assembly: Obfuscation(Feature = "merge with XXXXXX.dll", Exclude = false)] 

:あなたは、次の コンテンツ(C#の)とObfuscationSettings.csを埋める代わりにObfuscationSettings.csまたは ObfuscationSettings.vbの に別の名前を使用することを好むかもしれません次 内容:

Imports System 
Imports System.Reflection 

<Assembly: Obfuscation(Feature:="merge with XXXXXX.dll", Exclude:=False)> 

変更XXXXXX.dl lに、 とマージするアセンブリのファイル名を指定します。

ヒント

あなたは、いくつかのアセンブリにマージしたい場合は、単にいくつかの 属性を追加:マージアセンブリの

using System; 
using System.Reflection; 

[assembly: Obfuscation(Feature = "merge with Assembly1.dll", Exclude = false)] 
[assembly: Obfuscation(Feature = "merge with AnotherAssembly2.dll", Exclude = false)] 
… 

使用法は、難読化を行うことができるいくつかの副作用につながる可能性失敗します。このような場合は、最小共通の原則の の原則を使用して、難読化の失敗を引き起こさないような アセンブリのみをマージします。アセンブリ 組み込みは、組み合わせて組み立てる と組み合わせて、または代わりに使用できます。

ILMerge

のためのカスタム・パラメータ時にはあなたがILMergeユーティリティにカスタムパラメータを渡す必要があります。 たとえば、自分でクラスのインターナリゼーションを制御することをお勧めします。 か、ややこしいILMerge機能を使用することをお勧めします。これを行うには、 下記の手順を使用してください。 IDE内部のオープンobfuscatableプロジェクトが プロジェクトに新しいソースファイルを追加し、Visual Basicのために(C#の場合)ObfuscationSettings.csまたは ObfuscationSettings.vb(それを呼び出すILMerge

をカスタムパラメータを渡すに

手順。ネット)。 ObfuscationSettings.csまたは の代わりに別の名前 を使用することをお勧めします。ObfuscationSettings.vb ObfuscationSettingsを入力します。次 内容のCS(C#の):

using System; 
using System.Reflection; 

[assembly: Obfuscation(Feature = "ilmerge custom parameters: <parameters>", Exclude = false)] 

のVisual Basic .NETの場合、以下の コンテンツをObfuscationSettings.vb埋める:と

変更

Imports System 
Imports System.Reflection 

<Assembly: Obfuscation(Feature:="ilmerge custom parameters: <parameters>", Exclude:=False)> 

注意渡すパラメータを指定します。 属性が定義されていない がある場合、Eazfuscator.NETはデフォルトで/ internalize/ndebugパラメータを渡します。 にパラメータを渡したくない場合は、ILMergeをnone文字列で変更します。

アセンブリ埋め込み手順

アセンブリ埋め込み

はじめ

アセンブリ埋め込み アセンブリ自体にアセンブリの依存関係を埋め込むことができます。これは展開とセキュリティの観点から のセキュリティ上の利点があります。

アセンブリの埋め込みは、マージに似ています。主な相違点は、 である場合、アセンブリが単一アセンブリにマージされないことです。それらは暗号化され、アセンブリとしてパックされます リソース。その結果、出力には単一のアセンブリがあり、 には、同じファイルにパックされた依存関係が含まれています。

マージ時に埋め込むポイントは何ですか(またはその逆)。 アセンブリーをマージすると、結果として アセンブリのパフォーマンスが最適化されます。彼らはNGENすることができます、彼らはすべての制約付きの 環境(Windows Phone、Compact Frameworkなど)で動作します。ファイルマッピング とJIT'tedコードは、このような アセンブリ用のオペレーティングシステムによってキャッシュされ、高速のアプリケーション起動を驚かせることができます。アセンブリ は確実に合併します。

マージの唯一の欠点は、アプリケーションを壊すことなく を適用することが常に可能であるとは限りません。これは、 組み込み埋め込みが救助に来るポイントです。

組み込みアセンブリは、達成するのが簡単な目標であり、 ボックスから作業します。欠点?まあ、彼らは存在します。組み込みアセンブリは NGENできません。制約のあるいくつかの環境(Xbox、 Windows PhoneおよびCompact Framework)では動作しません。アプリケーションのロード中に組み込みのアセンブリを抽出すると、パフォーマンスペナルティ (ペナルティはかなり小さいので、気づくことはありません)です。

組み込みアセンブリにはいくつかの利点もあります。組み込みの アセンブリは暗号化されているため、これは、 ハッカーに対するセキュリティ強化です。組み込みアセンブリは圧縮され、結果のアセンブリのサイズは になります。そしてもちろんアセンブリ 埋め込みは、単一のファイル展開を実現する最も簡単な方法です。 アプリケーションを1つの.exe(または.dll)ファイルで構成します。

手順

はあなたのアセンブリに特別に形成され 属性(複数可)を適用すべき埋め込むアセンブリを有効にするには。これを行うには、下記の 手順を使用してください。 IDE内部

オープンobfuscatableプロジェクトが プロジェクトに新しいソースファイルを追加し、(C#の場合)ObfuscationSettings.csまたは(Visual Basic .NETのための) ObfuscationSettings.vbそれを呼び出す埋め込むアセンブリを有効にする手順。とObfuscationSettings.vb記入は、Visual Basic .NETの場合

using System; 
using System.Reflection; 

[assembly: Obfuscation(Feature = "embed XXXXXX.dll", Exclude = false)] 

:あなたは、次の コンテンツ(C#の)とObfuscationSettings.csを埋める代わりにObfuscationSettings.csまたは ObfuscationSettings.vbの に別の名前を使用することを好むかもしれません次 内容:

Imports System 
Imports System.Reflection 

<Assembly: Obfuscation(Feature:="embed XXXXXX.dll", Exclude:=False)> 

注目と

変更XXXXXX.dllアセンブリのファイル名を に埋め込みます。

重要

埋め込まれたアセンブリをobsuscateすることをお勧めします。
ヒントだけ ファイル名が供給されると、自動的にアセンブリのパスを検索Eazfuscator.NET

。あなたがアセンブリに厳密なファイルパス を指定することを好むなら、あなたはスクリプト変数を使用することができます。

[assembly: Obfuscation(Feature = @"embed $(InputDir)\Lib\AssemblyToEmbed.dll", Exclude = false)] 

ヒント

あなたは、いくつかのアセンブリを埋め込みたい場合は、単にいくつかの の属性を追加:

[assembly: Obfuscation(Feature = "embed Assembly1.dll", Exclude = false)] 
[assembly: Obfuscation(Feature = "embed AnotherAssembly2.dll", Exclude = false)] 
… 

チューニング

組み込みアセンブリは、デフォルトで圧縮および暗号化されています。 は、圧縮、暗号化、またはその両方を無効にすることをお勧めします。 を注文するには、下記の注意事項をお読みください。 【フラグ】スペースで区切られたフラグの任意の列挙である

[assembly: Obfuscation(Feature = "embed [flags] XXXXXX.dll", Exclude = false)] 

アセンブリ埋め込み用のカスタム属性の完全な表記は 次の形式を有します。

利用可能なフラグのリストを下の表に示します。以下は

アセンブリのためのフラグのリストは、属性

フラグ説明no_compressが は暗号化no_satellitesを無効no_encrypt圧縮が 組み込みアセンブリをロードするように指示Eazfuscator.NET load_from_file サテライトアセンブリの自動埋め込みを無効に無効に埋め込むことです 難読化アセンブリの実行時にメモリの代わりにファイルから削除します。これは、System.Reflection.Assembly タイプのLocationプロパティの意味のある値を に保存するために使用できます。

例を見てみましょう。

例4.24。圧縮と暗号化なしの組込みアセンブリ

using System; 
using System.Reflection; 

[assembly: Obfuscation(Feature = "embed [no_compress no_encrypt] XXXXXX.dll", Exclude = false)] 

例4.25。暗号化せずに組み込みアセンブリ。圧縮は が有効になります。

using System; 
using System.Reflection; 

[assembly: Obfuscation(Feature = "embed [no_encrypt] XXXXXX.dll", Exclude = false)] 

例4.26。組み込みアセンブリ。圧縮と暗号化が有効になります。

using System; 
using System.Reflection; 

[assembly: Obfuscation(Feature = "embed XXXXXX.dll", Exclude = false)] 

例4.27。衛星アセンブリを埋め込む。圧縮と暗号化 は、アセンブリの埋め込みは、アセンブリをリンクするための最も非侵入的な方法ですが、いくつかのまれな問題が発生する可能性のトラブルシューティング

using System; 
using System.Reflection; 

[assembly: Obfuscation(Feature = "embed satellites", Exclude = false)] 

を有効にしています。考えられる問題 については、 の対応する解決策と共に、この章で説明します。 System.Reflection.AssemblyクラスのLocationプロパティ 問題の概要。 System.Reflection.AssemblyクラスのLocationプロパティ は、アセンブリの近くのファイルのパスを検索するためによく使用されます。 は適切な解決策ではありませんが、これはほとんどの展開シナリオで機能します。

何が問題になることがありますか?まず、アセンブリシャドウコピーを使用する場合、Locationプロパティの は完全に予期しない値になる可能性があります。したがって、 は意図したアプリケーションロジックを破棄します。第2に、位置プロパティー は、対応するアセンブリが埋め込まれているときにヌル値を持ちます。

解決策。代わりにEscapedCodeBaseプロパティを使用してください。このプロパティは常に がすべての展開シナリオで正しい値を持っています。下のサンプル をご覧ください。

using System; 

class Program 
{ 
    static string GetEulaPath() 
    { 
     var assembly = typeof(Program).Assembly; 
     // string location = assembly.Location; // Please do not use this. This is a flawed approach 
     string location = new Uri(assembly.EscapedCodeBase).LocalPath; // <-- Use this instead 
     return Path.Combine(Path.GetDirectoryName(location), "EULA.rtf"); 
    } 
} 
関連する問題