このページは、Spices.NET JP のユーザ様より寄せられたご質問の一部とその回答を掲載しております。
QNo.
|
Q.質問
|
日付
|
A.回答
|
42
|
Q. 既知の問題について
|
2024/04/18
|
A.
・ClickOnce アプリの難読化ができない。
バージョン:5.22.29.3
バージョン:5.23.9.22
バージョン:5.23.10.23
・Spices.Netの起動による難読後に難読化プロジェクトの保存ダイアログが表示される。
バージョン:5.23.10.23
|
41
|
Q. 難読化処理中に「パッケージのリスト」ダイアログにアセンブリーのリストが表示されますが、どうすればいいですか。
|
2024/03/12
|
A.
難読化処理中に参照しているアセンブリーが表示されることがありますが、この場合は「プロジェクトの参照に追加」にチェックを入れ、該当のアセンブリーを選択してOKボタンを押してください。
これにより難読化プロジェクトファイルにアセンブリーのパスが追加されますので、2回目以降の難読化ではこのダイアログが表示されません。
|
40
|
Q. VSIP 版をインストールして、 spices.exe で Visual Studio 2019、2022 に登録しましたが、使用できません。
|
2024/01/18
|
A.
Visual Studio 2019、2022 の IDE に組み込むには
「ツール」−「環境」−「拡張機能」の「拡張機能の同期自動読み込みを許可する」
にチェックを入れてください。
|
39
|
Q. Q No.37, 38 の追記
|
2023/10/03
|
A.
Q No.37, 38 の内容に関しましては、Spices.NET のバージョン 5.23.9.22 (以降)をご使用ください。
|
38
|
Q. .NET 5.0、.NET 6.0、.NET 7.0 のアセンブリーを Visual Studio のプロジェクトから難読化するにはどうすればよいですか。
|
2023/09/07
|
A.
Spices.NET のバージョン 5.22.29.3 以降を使用し、Visual Studio のプロジェクトファイル(csproj)を下記のように設定してください。
下記は難読化の設定例です。
ここでは、
SearchPaths="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\7.0.10\ref\net7.0;C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.10\ref\net7.0" />
で、.NET 7.0 のシステムアセンブリーのフォルダーを参照する例です。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net7.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<UsingTask TaskName="Obfuscator" AssemblyFile="C:\Program Files (x86)\9Rays.Net\SpicesNetJP\Bin\NineRays.Build.Tasks.dll" />
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Obfuscator InputFiles="[難読化を行うアセンブリーのフルパス]">
Options_Members="Default"
Options_Naming="NonDisplayable"
Options_Anonymizer="None"
Options_MixDictionary="true"
Options_StringEncryptionMode="Encrypt3DES"
Options_antiILDASM="True"
OutputPath="[難読化されたアセンブリのフォルダー名]"
SearchPaths="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\7.0.10\ref\net7.0;C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.10\ref\net7.0" />
</Target>
</Project>
|
37
|
Q. .NET 5.0、.NET 6.0、.NET 7.0 のアセンブリーをコマンドラインから「NRObfuscator.exe」で難読化するにはどうすればよいですか。
|
2023/09/07
|
A.
Spices.NET のバージョン 5.22.29.3 以降を使用し、下記の方法で難読化を行ってください。
・実行例
NRObfuscator.exe /SRC=[難読化プロジェクトファイル(.iloprj)のパス] /RESOLVEORSKIP
・設定方法
Spices.NET で難読化プロジェクトファイル(*.iloprj)を開いて「プロパティ」タブの「References」にダイアログで参照に必要なアセンブリーを設定します。
参照するアセンブリーのフォルダーは
C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\[.NETバージョン]\ref\[.NETバージョン]
C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\[.NETバージョン]\ref\[.NETバージョン]
となります。
・設定例(.NET 7.0)の場合
C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\7.0.10\ref\net7.0\System.Windows.Forms.Primitives.dll
C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\7.0.10\ref\net7.0\System.Windows.Forms.dll"
C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\7.0.10\ref\net7.0\System.Runtime.dll
|
36
|
Q. 文字列の暗号化ができません。どうすればよいでしょうか。
|
2021/09/24更新
|
A.
「AssemblyList」-「ObfuscationOptions」-「 StringEncryptionMode」を「Encrypt3DES」に設定してください。
最近の解析ツールでは、これ以外の設定値による暗号化文字列を解析するものが出てきているようですので上記の設定が必要です。
|
35
|
Q. .NET Core 3.1 および .Net 5.0 アプリの難読化は可能ですか。
|
2021/05/10更新
|
A.
はい、Version 5.21.5.0 で可能になりました。
例えば、対象のフレームワークを「.NET Core 3.1」でアプリを作成した場合、Spices.NET JP のプロジェクトファイル(xxx.iloprj)のプロパティタブの「References」に「.NET Core 3.1」のアセンブリフォルダーの「C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\3.1.0\ref\netcoreapp3.1」を設定して難読化を行ってください。
|
34
|
Q. 製品版の Spices.NET JP をインストールしたまま、ライセンス承認を行っていません。何か制約がありますか。
|
2020/07/07
|
A.
・製品の使用期間が一か月間となっています。この期間を過ぎると使用できなくなります。
・この状態で難読化されたアセンブリは、難読化解析ツールで「TrialLicense」と表示されます。
|
33
|
Q. Visual Studio 2019 の環境に Spices.NET VSIP を組み込むにはどうすればいいですか。
|
2019/05/22
|
A.
インストール時には設定できませんので、インストール後に行ってください。詳しくは「Spices.chm」の「Spices.VSIP.Net」-「Spices.VSIP の登録/解除」をご覧ください。
|
32
|
Q. Windows7 と Visual Studio 2017 の環境で、Spices.NET VSIP を Visual Studio に組み込みチェックを入れてインストールすると「Package Managementの初期化に失敗しました。アクセスが拒否されました。」のエラーが発生します。
|
2018/05/25
|
A.
以下の手順で対処してください。
1) Spices.NET をアンインストールする
2) Visual Studio 2017 がインストールされている状態で、C:\users\<username>\Appdata\Local\Microsoft\VisualStudio\15.0_<unique id>\privateregistry.bin を削除する
3) Visual Studio 2017 を起動する
4) Visual Studio 2017 を終了する
5) Spices.NETをインストールする
|
31
|
Q. データベースへの接続文字列や、サーバーへの接続のユーザー名やパスワード文字列を難読化するにはどうすればよいでしょうか?
|
2018/02/21
|
A.
下記のように "readonly" で文字列定数を定義してください。
【 C# の場合 】
×:private const string UserName = "username";
○:readonly string UserName = "username";
【 VB.NET の場合 】
×:Private Const UserName As String = "username"
○:ReadOnly UserName As String = "username"
|
30
|
Q. const String str = "文字列"; このような文字列定数が難読化されません。どうすればよいでしょうか?(C#の例)
|
2012/09/03
|
A.
以下のようにコーディングしてください。
static readonly String str = "文字列";
|
29
|
Q. Windows x64 で Spices.NET が動作しないのですが?
|
2012/09/03
|
A.
Spices.exe.config ファイル(デフォルトでインストールすると C:\Program Files (x86)\9Rays.Net\SpicesNetJP\Bin フォルダにあります)を下記の A または B のように変更してください。
変更前:
<?xml version ="1.0"?>
<configuration>
<startup>
<supportedRuntime imageVersion="v4.0.30319" version="v4.0.30319"/>
<supportedRuntime imageVersion="v2.0.50727" version="v2.0.50727"/>
</startup>
</configuration>
A:
<?xml version ="1.0"?>
<configuration>
<startup>
<supportedRuntime imageVersion="v2.0.50727" version="v2.0.50727"/>
</startup>
</configuration>
B:
<?xml version ="1.0"?>
<configuration>
<startup>
<supportedRuntime imageVersion="v2.0.50727" version="v2.0.50727"/>
<supportedRuntime imageVersion="v4.0.30319" version="v4.0.30319"/>
</startup>
</configuration>
|
28
|
Q. 難読化によりメソッド名などが変更された場合、変更前と後の対応表を見る機能はありますか?
|
2012/09/03
|
A.
はい、難読化を行う際に「プロパティ」タグの「ExportObfuscationMap」にファイル名を指定してください。
<ファイル名>.ilomapの一覧表が作成されます。
|
27
|
Q. PInvoke (platform invoke) メソッドを難読化できますか?
|
2012/09/03
|
A.
はい、PInvoke メソッドが完全に記述されていれば難読化できます。
たとえば下記のコードの場合、メソッドは難読化されません。
[DllImport("Gdi32.dll")]
internal static extern int CombineRgn(IntPtr dest, IntPtr src1, IntPtr src2, int flags);
下記のコードのような場合、DllImport の EntryPoint の宣言にメソッド名があるので、メソッドは難読化されます。
[DllImport("Gdi32.dll", EntryPoint = "CombineRgn", CharSet=CharSet.Auto)]
internal static extern int CombineRegion(IntPtr dest, IntPtr src1, IntPtr src2, int flags);
|
26
|
Q. アセンブリメンバを難読化から除外する方法はありますか?
|
2012/09/03
|
A.
はい。下記の2つの方法があります。
1. SDK\Obfuscation Attributes フォルダの該当する言語のファイルをプロジェクトに追加して、難読化から解除するメソッドに下記のように属性を設定してください。
【C#の例】
using NineRays.Obfuscator;
[NotObfuscateAttribute(), DontAnonymizeAttribute(), DontStubAttribute(), DontEncryptStringsAttribute()]
public static bool methodA(string arg)
{
・
・
・
}
2. Spices.Project の ExclusionPatterns 機能を使用できます。
たとえば、ExclusionPatterns に SomeNamespace.* を設定すると、そのクラスを難読化から除外します。また、SomeNamespace.SomeClass.* を設定すると、SomeNamespace.SomeClass クラスを除外します。
|
25
|
Q. Spices.NET Obfuscator で難読化したアプリケーションをデバッグできますか?
|
2012/09/03
|
A.
はい、Spices.NET JP VSIP.Obfuscator と Spices.NET JP VSIP Suite のバージョンでサポートしています。
StripDebugInfo オプションをFalseに設定して、難読化処理を Visual Studio のビルドの処理に統合すると、難読化直後に Visual Studio でアプリケーションをデバッグできます。
|
24
|
Q. Spices.Solutionとは何ですか?
|
2012/09/03
|
A.
これは拡張子が .ilosln の xml ファイルで、1つまたは複数の Spices.Project ファイルで構成されます。
Spices.Soultion は1つの難読化の処理で複数のプロジェクトが処理できます。これは複数のプロジェクトについて別々の設定を行うときに便利です。たとえば作成するアプリケーションを Light、Pro、Enterprise といった複数の種類で作成する場合、Spices.Solution にすべての Spices.Project を設定します。
こうすることにより一回の難読化で全てのプロジェクトを難読化することができます。
|
23
|
Q. Spices.Projectとは何ですか?
|
2012/09/03
|
A.
これは拡張子が .iloprj の xml ファイルで、難読化のパラメータや難読化されるアセンブリの設定を行います。
|
22
|
Q. AntiILDASM の効果はどれくらいですか?また、何を保護しますか?
|
2012/09/03
|
A.
AntiILDASM は .Net SDK で提供されている標準のユーティリティである ILDASM(中間言語の逆アセンブラ)から保護します。ILDASM はアセンブリから完全なコードの一覧を取得して、アセンブリの詳細な解析を可能にします。AntiILDASM は逆アセンブルを防ぐためアセンブリを ILDASM に読み込ませないようにします。
|
21
|
Q. Spices.NET Obfuscator は ASP.Net のコードビハインドのアセンブリに対応していますか?
|
2012/09/03
|
A.
はい、対応しています。
|
20
|
Q. Spices.NET Obfuscator は CompactFramework のアセンブリに対応していますか?
|
2012/09/03
|
A.
はい、対応しています。
|
19
|
Q. Spices.NET Obfuscator で難読化したアセンブリを逆コンパイラできますか?
|
2012/09/03
|
A.
文字列の暗号化やコードの匿名化、最適化、リソースの保護などアセンブリを正しく難読化すれば、逆コンパイラの使用を防いだり、あるいは逆コンパイラによる出力が理解不能なコードとなります。
|
18
|
Q. Spices.NET Obfuscator で難読化したプログラムには、他のライブラリが必要ですか?
|
2012/09/03
|
A.
いいえ、Spices.NET Obfuscator で難読化したプログラムには他のライブラリは必要ありません。
|
17
|
Q. Spices.NET Obfuscator はプログラムのソースコードが必要ですか?
|
2012/09/03
|
A.
いいえ、Spices.NET Obfuscator は .NET でコンパイルされたコードを処理するので、オリジナルのソースコードは必要ありません。
|
16
|
Q. 増分難読化とは何ですか?
|
2012/09/03
|
A.
パッチによるソフトウェアのアップデートはよく行われます。この場合アセンブリやアセンブリメンバ間の参照を保持しながらパッチにたいして難読化を行う必要があります。このときの難読化を増分難読化といいます。
|
15
|
Q. Spices.CodeAnonymizer とは何ですか?
|
2012/09/03
|
A.
相互難読化や高度な難読化を行っても難読化が解決できない問題があります。それは、システムコールや他の外部参照の識別を隠蔽することが不可能なためです。これらの呼び出しは外部コードの一部なので、難読化の対象から外す必要があります。しかし、これらの呼び出しは公開されているAPIであったり詳しくドキュメント化されているため、逆コンパイルや逆アセンブルを行うことによってコードを理解するために十分な情報を提供しています。
Spices.CodeAnonymizer はコードからのそのような呼び出しを削減したり削除することにより、逆コンパイルを困難にします。また、Spices.CodeAnonymizer は外部参照の問題を解決するだけでなく、難読化されていない内部のメソッドやフィールドへの参照を隠蔽することができます。
この他にも、Spices.CodeAnonymizer にはコードの解析や逆コンパイルを困難にするいろいろな方法があります。
|
14
|
Q. タンパープルーフとは何ですか?
|
2012/09/03
|
A.
厳密名付きのアプリケーションの作成した場合、デジタル署名によってアセンブリを改ざんから防止できますが、それでも元のデジタル署名を削除して別のもので再署名することができます。
しかし、この技術を使用すれば改ざんされたアプリケーションを使用できなくすることができます。
|
13
|
Q. 文字列の暗号化とは何ですか?
|
2012/09/03
|
A.
アセンブリは文字列を使用していろいろな処理を行うとともに、パスワードやアドレス、ライセンスなどの文字列定数などの「秘密」情報を含んでいます。
IL コードは文字列情報を .Net コードから簡単に抽出することができ、関心のある部分を検出して解析することができます。
|
12
|
Q. ソフトウェアの透かしとは何ですか?
|
2012/09/03
|
A.
ソフトウェアの透かしは、秘密の識別情報や著作権などの情報をアプリケーションに埋め込むときに使用されます。これにより、アプリケーションの改ざんを暴いたり、所有者や配布領域、開発元、シリアル番号を認識することができます。
透かしの情報は、逆コンパイルや逆アセンブリを行っても見られないようにアセンブリに組み込まれます。
|
11
|
Q. どうして最適化が必要なのでしょうか?
|
2012/09/03
|
A.
難読化処理の過程で使用されない情報や実行されないコードは削除されますので、アセンブリがコンパクトになります。それによりコードの読込が高速になると同時に使用メモリが少なくなるので、コードのパフォーマンスが向上します。
|
10
|
Q. どのアセンブリを難読化すべきですか?
|
2012/09/03
|
A.
重要なソースコードからなるアセンブリや「秘密」情報を含んでいるアセンブリは難読化するべきです。また、データベースへの要求や特定のリソースやサービスへの参照または、ユーザパスワードやユーザ名などの情報を含んでいる場合は難読化を行う必要があります。
|
9
|
Q. 相互難読化とは?
|
2012/09/03
|
A.
難読化は1つのアセンブリだけでなく、プロジェクトやライブラリのパッケージ(internal だけでなく pablic コードや複数のアプリケーションやライブラリで使用するデータ)単位で難読化することができます。
この場合、個々のコードの参照や参照するアプリケーションやライブラリのデータを難読化します。
|
8
|
Q. どうして難読化が必要なのでしょうか?
|
2012/09/03
|
A.
.NET のプログラムは簡単に理解できる構造をした中間言語(IL)で作成されているので、簡単にリバースエンジニアリングができます。
.NET コードは逆アセンブルや逆コンパイルを簡単に行うことができるので、ILDASM や Spices.NET Decompiler といった逆コンパイラを使用して、オリジナルのソースコードに近いソースコードを作成することができます。
ILDASM/ILASM のラウンドトリップを使用して、ライセンス認証やその他の情報を削除することができるので改ざんしてコードを作成することができます。また、パスワードなどの「秘密」情報を見つけ出すためにコードを解析することもできます。
|
7
|
Q. 難読化によってどんなリスクを避けられますか?
|
2012/09/03
|
A.
* リバースエンジニアリングや逆コンパイル
* 財産の秘密情報の保護
* ラウンドトリップ
* タンパープルーフ
といったリスクを避けられます。
|
6
|
Q. 難読化とは何ですか?
|
2012/09/03
|
A.
プログラム コードを簡単に解析や解読ができないようにする技術です。逆アセンブルしてもそのコードを無意味なものにし、簡単に理解できないように変更します。
アセンブリを ILDASM で逆アセンブルして得られるMSILファイルを修正し、再度これを ILASM で実行ファイルを作成することができます。
Spices.Net は逆コンパイラや ILDASM、ILASM からコードを保護します。
|
5
|
Q. Spices.Net JP がサポートする .Net Framework のバージョンは何ですか?
|
2012/09/03
|
A.
.Net Framework2.0、3.0、3.5、4.0 です。
|
4
|
Q. コンソールから NRObfuscator.exe を実行すると、「次のアセンブリを変更することは出来ません」というメッセージが表示されます。どうすればよいですか?
|
2012/09/03
|
A.
/PATHS オプションを使用して .NET Framework のパスを設定してお試しください。
例:
"C:\Program Files\9Rays.Net\SpicesNetJP\Bin\NRObfuscator.exe"
/SRC="ObfuscateTest.iloprj" /PATHS="C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727"
|
3
|
Q. Windows Vista に Spices.NET をインストールまたはアンインストールしようとしているのですが、「サポート担当者またはパッケージのベンダに問い合わせてください」というメッセージが表示され、インストールまたはアンインストールができません。回避方法を教えてください。
|
2012/09/03
|
A.
Windows Vista 上で次の設定を行ってください。
[コントロールパネル]→[クラシック表示]→[ユーザアカウント]→[ユーザアカウント制御の有効化または無効化]→[ユーザアカウント制御(UAC)を使ってコンピュータの保護に役立たせる]のチェックを外してください。
その後で、再度インストールまたはアンインストールを行ってください。
|
2
|
Q. サーバに Spices.NET をインストールして各クライアントから使用する場合のライセンスはどうなりますか?
|
2012/09/03
|
A.
サーバの他に各クライアントにもライセンスが必要です。
|
1
|
Q. ライセンス認証を行わずに使用することはできますか?
|
2012/09/03
|
A.
はい、30日間使用することができます。それ以降はライセンス認証を行っていただかないと使用することができませんので、お早めにユーザ登録をお願いいたします。
|