スマートアセンブリ難読化パブリックタイプ
-
26-12-2019 - |
質問
このフォームを難読化したとき、「デバッグ」
public partial class Form1 : Form
{
public void Form1()
{
InitializeComponents();
}
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
Console.WriteLine("Name: "+this.Name);
Console.WriteLine("FullName: "+this.GetType().FullName);
}
}
.
出力は次のようなものです。
名前:form1
フルネーム:#yab。#zab
質問
FullName
が難読化されているのはなぜですか?
Form1
は一般のものですので、スマートアセンブリを無視することを期待します。
追加情報
Form1
はpublic partial
です。これはDesigner.csです
私のスマートアセンブリの設定は次のようなものです。
<ApplicationName />
<Destination DestinationFileName=".\bin.obfuscated\MyProject.Form1.exe" />
<Assemblies>
<Assembly AssemblyName="MyProject.Form1, Culture=neutral, PublicKeyToken=omitted">
<Merging>
<ResourcesCompression Compress="0" />
<MemberRefsProxy />
<Pruning />
<Obfuscation Obfuscate="1">
<Exclusions />
</Obfuscation>
<ControlFlow Obfuscate="1" />
</Merging>
</Assembly>
</Assemblies>
<Options>
<Obfuscation FieldsNameMangling="2" NameMangling="1" />
<ExceptionReporting />
<FeatureUsageReporting Template="res:SmartUsageWithUIConsentFirstRun1033.dll" />
<StrongNameSigning KeyFileName="PathToKeyFile" Sign="1" />
<OtherProtections />
<StringsEncoding />
<OtherOptimizations />
<Debugging />
</Options>
. 解決
最初に、アプリケーションプロジェクト内のSmartAssemblyによってパブリッククラスは無視されません(ライブラリプロジェクトでは無視されます)。
次に、 nameプロパティ実行時に設定されたプロパティです。あなたのケースの場合、それはあなたのコードのどこかで "Form1"に初期化されるかもしれません、多分デザイナーに。
この値はいつでも変更できます。
public Form1()
{
InitializeComponent();
this.Name = "foo";
}
.
ShartAssemblyこの値を難読化することはできません、それは間違っているでしょう、そしてあなたのコードの動作を変えるでしょう。
SmartAssemblyがコードを難読化すると、型、フィールド、メソッドの名前を変更します。タイプの名前を取得しようとすると、それはあなたのタイプの難読化された名前を取得するための論理です。
所属していません StackOverflow