SmartAssembly 공개 유형을 난독 화합니다
-
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
FullName : # yab. # zab
질문
왜 FullName
는 난독 화 되었습니까?
Form1
는 공개되어 SmartAssembly를 무시할 것으로 기대합니다.
추가 정보
Form1
는 public partial
이므로 Designer.cs입니다
내 SmartAssembly 설정은 다음과 같습니다.
<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";
}
.
SmartAssembly이 값을 난독화할 수 없으므로 잘못 될 것이며 코드의 동작을 변경합니다.
SmartAssembly 코드를 음영시켜주는 경우 유형, 필드 및 메소드의 이름 만 변경합니다.유형의 이름을 얻으려고하면, 유형의 난독 화 된 이름을 얻으려면 논리적입니다.
제휴하지 않습니다 StackOverflow