最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

c# - After use of Obfuscator application doesn't run - Stack Overflow

programmeradmin2浏览0评论

Since I'm doing research on obfuscators. I'm creating a simple application in WPF with .NET 9.0. The application consists of a button that when you click it changes the value of the textbox. Below is the code of the two main classes.

Class.xaml:

<Window x:Class="ProvaSemplice.MainWindow"
        xmlns=";
        xmlns:x=";
        xmlns:d=";
        xmlns:mc=";
        xmlns:local="clr-namespace:ProvaSemplice"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Button Content="Click" HorizontalAlignment="Left" Margin="348,242,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.997,0.728" Click="Button_Click"/>
        <TextBox Name="Print" HorizontalAlignment="Left" Margin="302,217,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="120"/>

    </Grid>
</Window>

class xaml.cs:

using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace ProvaSemplice;

/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        Print.IsReadOnly = true;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Print.Text = "Hai Cliccato!";
    }
}

When I obfuscate with Obfuscar 2.2.41, and I don't rename the public classes or methods, the application restarts after obfuscation. Below is the code from the .xml file of the obfuscar configuration:

<?xml version='1.0'?>
<Obfuscator>
    <Var name="InPath" value=".\" />
    <Var name="OutPath" value=".\Output"/>
    <Module file="$(InPath)\ProvaSemplice.dll" />
    

    <AssemblySearchPath path="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\9.0.2\ref\net9.0"/>
        
    <Var name="UseUnicodeNames" value="true" />
    <Var name="KeepPublicApi" value="true"/>
    
</Obfuscator>

While when I go to obfuscate also the public classes and methods the application does not start anymore. Below is the .xml file of the obfuscar configuration:

<?xml version='1.0'?>
<Obfuscator>
    <Var name="InPath" value=".\" />
    <Var name="OutPath" value=".\Output"/>
    <Module file="$(InPath)\ProvaSemplice.dll" />
    

    <AssemblySearchPath path="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\9.0.2\ref\net9.0"/>
        
    <Var name="UseUnicodeNames" value="true" />
    <Var name="KeepPublicApi" value="false"/>
    
</Obfuscator>

If I go to analyze the application debug with Visual Studio, I get the following logs:

Output Debug
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Users\Antonio\Desktop\TestProgetto\ProvaSemplice\ProvaSemplice\bin\Debug\net9.0-windows\Output\ProvaSemplice.exe' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\ntdll.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\kernel32.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\KernelBase.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\shell32.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\msvcp_win.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\ucrtbase.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\user32.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\win32u.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\gdi32.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\gdi32full.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\advapi32.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\msvcrt.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\sechost.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\rpcrt4.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\imm32.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\host\fxr\9.0.2\hostfxr.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\hostpolicy.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\coreclr.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\ole32.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\combase.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\oleaut32.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\bcryptprimitives.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
Eccezione generata in corrispondenza di 0x00007FF9118CBB0A (KernelBase.dll) in ProvaSemplice.exe: 0x04242420 (parametri: 0x0000000031415927, 0x00007FF84A8F0000, 0x000000010017E6E0).
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Private.CoreLib.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\kernel.appcore.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\clrjit.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\icu.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Users\Antonio\Desktop\TestProgetto\ProvaSemplice\ProvaSemplice\bin\Debug\net9.0-windows\Output\ProvaSemplice.dll' completato. Modulo compilato senza simboli.
Il thread 13700 è terminato con il codice 0 (0x0).
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\9.0.2\PresentationFramework.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\9.0.2\WindowsBase.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Runtime.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\9.0.2\System.Xaml.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\uxtheme.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\9.0.2\System.IO.Packaging.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Private.Uri.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\9.0.2\PresentationCore.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Runtime.InteropServices.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\Microsoft.Win32.Primitives.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\DWrite.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\9.0.2\DirectWriteForwarder.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Runtime.Extensions.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Diagnostics.Debug.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Runtime.CompilerServices.VisualC.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Threading.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Collections.NonGeneric.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\bcrypt.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\Microsoft.Win32.Registry.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Diagnostics.TraceSource.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Collections.Specialized.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Collections.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Memory.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.ComponentModel.Primitives.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Threading.Thread.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\9.0.2\PresentationNative_cor3.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\9.0.2\System.Configuration.ConfigurationManager.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Xml.ReaderWriter.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Private.Xml.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Net.WebClient.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Text.Encoding.Extensions.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Linq.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Numerics.Vectors.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\msctf.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.ComponentModel.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.ComponentModel.TypeConverter.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\9.0.2\System.Windows.Extensions.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Threading.ThreadPool.dll' completato. 
Eccezione generata in corrispondenza di 0x00007FF9118CBB0A (KernelBase.dll) in ProvaSemplice.exe: 0xE0434352.
Eccezione generata in corrispondenza di 0x00007FF9118CBB0A (KernelBase.dll) in ProvaSemplice.exe: 0xE0434352.
Eccezione generata in corrispondenza di 0x00007FF9118CBB0A (KernelBase.dll) in ProvaSemplice.exe: 0xE0434352.
Eccezione generata in corrispondenza di 0x00007FF9118CBB0A (KernelBase.dll) in ProvaSemplice.exe: 0xE0434352 (parametri: 0xFFFFFFFF80131501, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00007FF84A8F0000).
Eccezione generata in corrispondenza di 0x00007FF9118CBB0A (KernelBase.dll) in ProvaSemplice.exe: 0xE0434352.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\version.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\Microsoft.DiaSymReader.Native.amd64.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Diagnostics.StackTrace.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Reflection.Metadata.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Collections.Immutable.dll' completato. 
Unhandled exception. System.Windows.Markup.XamlParseException: The method or operation is not implemented.
 ---> System.NotImplementedException: The method or operation is not implemented.
   at System.Windows.Baml2006.Baml2006SchemaContext.ResolveBamlType(BamlType bamlType, Int16 typeId)
   at System.Windows.Baml2006.Baml2006SchemaContext.GetXamlType(Int16 typeId)
   at System.Windows.Baml2006.Baml2006Reader.Process_ElementStart()
   at System.Windows.Baml2006.Baml2006Reader.Process_OneBamlRecord()
   at System.Windows.Baml2006.Baml2006Reader.Process_BamlRecords()
   at System.Windows.Baml2006.Baml2006Reader.Read()
   at System.Windows.Markup.WpfXamlLoader.TransformNodes(XamlReader xamlReader, XamlObjectWriter xamlWriter, Boolean onlyLoadOneNode, Boolean skipJournaledProperties, Boolean shouldPassLineNumberInfo, IXamlLineInfo xamlLineInfo, IXamlLineInfoConsumer xamlLineInfoConsumer, XamlContextStack`1 stack, IStyleConnector styleConnector)
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
   --- End of inner exception stack trace ---
   at System.Windows.Markup.XamlReader.RewrapException(Exception e, IXamlLineInfo lineInfo, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
   at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
   at System.Windows.Application.LoadBamlStreamWithSyncInfo(Stream stream, ParserContext pc)
   at System.Windows.Application.DoStartup()
   at System.Windows.Application.<.ctor>b__1_0(Object unused)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
   at System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   at System.Windows.Application.RunDispatcher(Object ignore)
   at System.Windows.Application.RunInternal(Window window)
   at  . .?()
Eccezione generata in corrispondenza di 0x00007FF9118CBB0A (KernelBase.dll) in ProvaSemplice.exe: 0xE0434352 (parametri: 0xFFFFFFFF80131501, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00007FF84A8F0000).
Eccezione non gestita in 0x00007FF9118CBB0A (KernelBase.dll) in ProvaSemplice.exe: 0xE0434352 (parametri: 0xFFFFFFFF80131501, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00007FF84A8F0000).

Stack

>   KernelBase.dll!00007ff9118cbb0a()   

Could someone please tell me how to solve the above problem, that is, I would also like to obfuscate the public methods and classes, but the application should work. The source file of the obfuscator I use is at this link: .2.41 The language used is c#. Thanks to those who will help me

Since I'm doing research on obfuscators. I'm creating a simple application in WPF with .NET 9.0. The application consists of a button that when you click it changes the value of the textbox. Below is the code of the two main classes.

Class.xaml:

<Window x:Class="ProvaSemplice.MainWindow"
        xmlns="http://schemas.microsoft/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats./markup-compatibility/2006"
        xmlns:local="clr-namespace:ProvaSemplice"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Button Content="Click" HorizontalAlignment="Left" Margin="348,242,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.997,0.728" Click="Button_Click"/>
        <TextBox Name="Print" HorizontalAlignment="Left" Margin="302,217,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="120"/>

    </Grid>
</Window>

class xaml.cs:

using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace ProvaSemplice;

/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        Print.IsReadOnly = true;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Print.Text = "Hai Cliccato!";
    }
}

When I obfuscate with Obfuscar 2.2.41, and I don't rename the public classes or methods, the application restarts after obfuscation. Below is the code from the .xml file of the obfuscar configuration:

<?xml version='1.0'?>
<Obfuscator>
    <Var name="InPath" value=".\" />
    <Var name="OutPath" value=".\Output"/>
    <Module file="$(InPath)\ProvaSemplice.dll" />
    

    <AssemblySearchPath path="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\9.0.2\ref\net9.0"/>
        
    <Var name="UseUnicodeNames" value="true" />
    <Var name="KeepPublicApi" value="true"/>
    
</Obfuscator>

While when I go to obfuscate also the public classes and methods the application does not start anymore. Below is the .xml file of the obfuscar configuration:

<?xml version='1.0'?>
<Obfuscator>
    <Var name="InPath" value=".\" />
    <Var name="OutPath" value=".\Output"/>
    <Module file="$(InPath)\ProvaSemplice.dll" />
    

    <AssemblySearchPath path="C:\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\9.0.2\ref\net9.0"/>
        
    <Var name="UseUnicodeNames" value="true" />
    <Var name="KeepPublicApi" value="false"/>
    
</Obfuscator>

If I go to analyze the application debug with Visual Studio, I get the following logs:

Output Debug
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Users\Antonio\Desktop\TestProgetto\ProvaSemplice\ProvaSemplice\bin\Debug\net9.0-windows\Output\ProvaSemplice.exe' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\ntdll.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\kernel32.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\KernelBase.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\shell32.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\msvcp_win.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\ucrtbase.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\user32.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\win32u.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\gdi32.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\gdi32full.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\advapi32.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\msvcrt.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\sechost.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\rpcrt4.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\imm32.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\host\fxr\9.0.2\hostfxr.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\hostpolicy.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\coreclr.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\ole32.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\combase.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\oleaut32.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\bcryptprimitives.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
Eccezione generata in corrispondenza di 0x00007FF9118CBB0A (KernelBase.dll) in ProvaSemplice.exe: 0x04242420 (parametri: 0x0000000031415927, 0x00007FF84A8F0000, 0x000000010017E6E0).
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Private.CoreLib.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\kernel.appcore.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\clrjit.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\icu.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Users\Antonio\Desktop\TestProgetto\ProvaSemplice\ProvaSemplice\bin\Debug\net9.0-windows\Output\ProvaSemplice.dll' completato. Modulo compilato senza simboli.
Il thread 13700 è terminato con il codice 0 (0x0).
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\9.0.2\PresentationFramework.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\9.0.2\WindowsBase.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Runtime.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\9.0.2\System.Xaml.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\uxtheme.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\9.0.2\System.IO.Packaging.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Private.Uri.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\9.0.2\PresentationCore.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Runtime.InteropServices.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\Microsoft.Win32.Primitives.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\DWrite.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\9.0.2\DirectWriteForwarder.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Runtime.Extensions.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Diagnostics.Debug.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Runtime.CompilerServices.VisualC.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Threading.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Collections.NonGeneric.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\bcrypt.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\Microsoft.Win32.Registry.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Diagnostics.TraceSource.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Collections.Specialized.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Collections.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Memory.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.ComponentModel.Primitives.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Threading.Thread.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\9.0.2\PresentationNative_cor3.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\9.0.2\System.Configuration.ConfigurationManager.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Xml.ReaderWriter.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Private.Xml.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Net.WebClient.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Text.Encoding.Extensions.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Linq.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Numerics.Vectors.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\msctf.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.ComponentModel.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.ComponentModel.TypeConverter.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\9.0.2\System.Windows.Extensions.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Threading.ThreadPool.dll' completato. 
Eccezione generata in corrispondenza di 0x00007FF9118CBB0A (KernelBase.dll) in ProvaSemplice.exe: 0xE0434352.
Eccezione generata in corrispondenza di 0x00007FF9118CBB0A (KernelBase.dll) in ProvaSemplice.exe: 0xE0434352.
Eccezione generata in corrispondenza di 0x00007FF9118CBB0A (KernelBase.dll) in ProvaSemplice.exe: 0xE0434352.
Eccezione generata in corrispondenza di 0x00007FF9118CBB0A (KernelBase.dll) in ProvaSemplice.exe: 0xE0434352 (parametri: 0xFFFFFFFF80131501, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00007FF84A8F0000).
Eccezione generata in corrispondenza di 0x00007FF9118CBB0A (KernelBase.dll) in ProvaSemplice.exe: 0xE0434352.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Windows\System32\version.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\Microsoft.DiaSymReader.Native.amd64.dll' completato. Caricamento dei simboli disabilitato dall'impostazione Include/Exclude.
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Diagnostics.StackTrace.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Reflection.Metadata.dll' completato. 
'ProvaSemplice.exe' (Win32): caricamento di 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\9.0.2\System.Collections.Immutable.dll' completato. 
Unhandled exception. System.Windows.Markup.XamlParseException: The method or operation is not implemented.
 ---> System.NotImplementedException: The method or operation is not implemented.
   at System.Windows.Baml2006.Baml2006SchemaContext.ResolveBamlType(BamlType bamlType, Int16 typeId)
   at System.Windows.Baml2006.Baml2006SchemaContext.GetXamlType(Int16 typeId)
   at System.Windows.Baml2006.Baml2006Reader.Process_ElementStart()
   at System.Windows.Baml2006.Baml2006Reader.Process_OneBamlRecord()
   at System.Windows.Baml2006.Baml2006Reader.Process_BamlRecords()
   at System.Windows.Baml2006.Baml2006Reader.Read()
   at System.Windows.Markup.WpfXamlLoader.TransformNodes(XamlReader xamlReader, XamlObjectWriter xamlWriter, Boolean onlyLoadOneNode, Boolean skipJournaledProperties, Boolean shouldPassLineNumberInfo, IXamlLineInfo xamlLineInfo, IXamlLineInfoConsumer xamlLineInfoConsumer, XamlContextStack`1 stack, IStyleConnector styleConnector)
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
   --- End of inner exception stack trace ---
   at System.Windows.Markup.XamlReader.RewrapException(Exception e, IXamlLineInfo lineInfo, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
   at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
   at System.Windows.Application.LoadBamlStreamWithSyncInfo(Stream stream, ParserContext pc)
   at System.Windows.Application.DoStartup()
   at System.Windows.Application.<.ctor>b__1_0(Object unused)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
   at System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   at System.Windows.Application.RunDispatcher(Object ignore)
   at System.Windows.Application.RunInternal(Window window)
   at  . .?()
Eccezione generata in corrispondenza di 0x00007FF9118CBB0A (KernelBase.dll) in ProvaSemplice.exe: 0xE0434352 (parametri: 0xFFFFFFFF80131501, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00007FF84A8F0000).
Eccezione non gestita in 0x00007FF9118CBB0A (KernelBase.dll) in ProvaSemplice.exe: 0xE0434352 (parametri: 0xFFFFFFFF80131501, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x00007FF84A8F0000).

Stack

>   KernelBase.dll!00007ff9118cbb0a()   

Could someone please tell me how to solve the above problem, that is, I would also like to obfuscate the public methods and classes, but the application should work. The source file of the obfuscator I use is at this link: https://github/obfuscar/obfuscar/tree/2.2.41 The language used is c#. Thanks to those who will help me

Share Improve this question edited Mar 13 at 14:24 programmerconsociatio asked Mar 13 at 12:00 programmerconsociatioprogrammerconsociatio 1151 gold badge2 silver badges7 bronze badges 8
  • 1 WPF application is not just an assembly, it contains bamls (compiled xaml) and needs mork (haha, funny typo, mork = more work). Either look for wpf obsfucator or do not fiddle with classes used in xamls. Another possibility I can think of: you can extract important code into separate class library (dll) and obsfucate only this assembly. – Sinatr Commented Mar 13 at 12:08
  • I removed the "dependency-injection" tag and added the "obfuscar" tag for you – Klaus Gütter Commented Mar 13 at 12:09
  • 5 "I'm making a simple application in WPF with 9.0" - why obfuscate, then? Are you trying to learn about obfuscation? – Fildor Commented Mar 13 at 12:12
  • 3 Before obsfucating your code I would recommend reading The real value isn’t in the code or one of the many other articles making the same point. I'm not saying obfuscation is never appropriate, but it has a real maintenance cost, and you need to carefully consider if the benefit is worth that cost. – JonasH Commented Mar 13 at 13:20
  • 1 "I'm doing research on obfuscators" that would be in the first line of the Question, if I were to write it :) It makes your Question make so much more sense and will prevent the obligatory "just don't" comments. – Fildor Commented Mar 13 at 14:16
 |  Show 3 more comments

1 Answer 1

Reset to default 1

Simply put, you can't obfuscate public classes and methods that WPF needs to access when using a reflection-based framework like WPF.

The very reason WPF requires UI-related classes, properties, and methods to be public is because it relies heavily on reflection, not just for bindings but even to contruct your App object in the first place. Note how WPF apps don't have a Main method - they use reflection to find your application class and instantiate it. That's likely the reason your app is crashing, though not the only possibility.

Most obfuscators will honor the .NET ObfuscationAttribute which you can apply to classes and/or class members. This would theoretically allow you to still use the general setting to obfuscate public identifiers but exclude those critical to WPF. The trouble is it will be very easy to miss and/or fet critical items as your app grows, and diagnosing the problem will be quite tedious (as you learned).

If you want to protect as much of your IP as possible, simply stuff as much code as possible into internal classes and internal or private members, and only obfuscate those. The public classes/properties/methods should just be thin wrappers for the real meat, which is obfuscated.

And while I strongly disagree with those who say never to bother with obfuscation in general, when it comes to UI-specific code, I do agree the need is less pressing. There are very few, if any, trade secrets when it comes to UI, especially on a 20 year old framework. Save obfuscation for the stuff that's really important - your secret sauce - or better yet keep that on a server if you can so the assemblies never get distributed at all.

发布评论

评论列表(0)

  1. 暂无评论