mkaring / ConfuserEx

An open-source, free protector for .NET applications
https://mkaring.github.io/ConfuserEx/
MIT License
2.38k stars 370 forks source link

Application doesn't work when resource directory contains relative resource #550

Open ryanroe opened 6 months ago

ryanroe commented 6 months ago

Steps to Reproduce:

  1. create an empty WPF Application( .Net Framework )
  2. make it Console Application (to see the error info after obfuscated)
  3. create as the following image resource_test

contents of Color.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <SolidColorBrush x:Key="PrimaryBrush" Color="Red" />
</ResourceDictionary>

contents of Skin.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="./Color.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

contents of App.xaml

<Application
    x:Class="WpfRelativeResourceTest.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfRelativeResourceTest"
    StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="./Themes/Skin.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

contents of MainWindow.xaml

<Window
    x:Class="WpfRelativeResourceTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:WpfRelativeResourceTest"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
    <Grid Background="{DynamicResource PrimaryBrush}" />
</Window>
  1. obfuscate this with only rename feature on

    <rule pattern="true" inherit="false">
        <protection id="rename" />
    </rule>
    <rule pattern="namespace('WpfRelativeResourceTest') and name('App')" inherit="false">
        <protection id="rename" action="remove" />
    </rule>
  1. app throws exception (can't find themes/color.xaml)