c#等で作成した.netアプリケーションを難読化するObfuscarと言うオープンソースのコマンドラインツールがある。
NuGetでインストールすると難読化できる様になる。
公式サイト(英文)
CUIアプリを作成した場合、このObfuscarで問題なく難読化できる。
但し、WPFによるGUIアプリを難読化するとアプリが起動しなかった。
イベントビューアーを見てみると、System.Windows.Markup.XamlParseExceptionと言う例外を吐いてアプリが異常終了しとった。
この例外を手掛かりにネットを調べてみても中々解決方法が見つからない。
中にはWPFのObfuscarでの難読化は諦めたと言う投稿も。
結論から言うとXAMLから参照している全てのプロパティ等を難読化の対象から外してやる必要がある。
Obfuscarでは以下の様にConmfigファイルにmodule要素を追加し、SkipType要素、SkipProperty要素で除外設定する事で、WPFアプリが動作する状態で難読化する事ができた。
<?xml version='1.0'?>
<Obfuscator>
<Var name="InPath" value=(難読化対象dllのパス) />
<Var name="OutPath" value=(難読化後dllのパス) />
<Var name="AnalyzeXaml" value="true" />
<Var name="KeepPublicApi" value="true" />
<Var name="HidePrivateApi" value="true" />
<AssemblySearchPath path="C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\8.0.11" />
<Module file="$(InPath)\(サンプル).dll">
<SkipType name="(サンプル).ViewModel.MainWindowViewModel"/>
<SkipProperty type="(サンプル).ViewModel.MainWindowViewModel" name="MainWindowCommand" />
</Module>
</Obfuscator>
上の例ではViewModelとXAMLから呼ばれているパブリックプロパティを難読化から除外している。
除外は他にも名前空間や、メソッド等も指定できる様。
設定要素の公式ドキュメント(英文)
対処方法の結論としてはこんな感じではあったけど、ここにたどり着くまでネット漁っても直接的な解決方法が出ていなかった。
何かの足しにでもなればとm(_ _)m
開発環境:.net8.0
Obfuscarバージョン:2.2.40
OSバージョン:Windows11 Home 24H2