Skip to Content
新しいバージョン 12 を公開しました 🎉

Blazor Web アプリ

Blazor アプリケーションは Babel Obfuscator で保護でき、それにはいくつかの利点があります。Blazor の Razor ページを使う主な利点の 1 つは、HTML マークアップと C# コードを組み合わせて、より簡潔で読みやすいコードを書けることです。これは、C# に慣れていて、JavaScript やほかのフロントエンド言語に頼らずに C# を直接使いたい開発者にとって特に便利です。

難読化では、クラス、メソッド、変数をリネームして元の名前を隠し、攻撃者がコードを理解したり変更したりすることを難しくできます。Blazor アプリケーションの場合、Razor ページを難読化することで、HTML と C# のコードをエンドユーザーによる閲覧や操作から保護でき、セキュリティのレイヤーがもう 1 つ加わります。

GitHub リポジトリ https://github.com/dotnet/blazor-samples  には、Blazor のさまざまな機能を示すサンプルアプリケーションがいくつか含まれています。ここでは、そのうちの 1 つを使って、Babel Obfuscator を統合して Blazor Web アプリケーションを難読化する方法を示します。

git clone https://github.com/dotnet/blazor-samples

Blazor アプリのサンプルを使い始めるには、GitHub にあるプロジェクトのリポジトリをクローンします。リポジトリをクローンしたら、「7.0\BlazorServerSignalRApp」フォルダーに移動し、BlazorServerSignalRApp.csproj という名前のプロジェクトファイルを Visual Studio で開きます。

Company ライセンスをお持ちの場合は、Babel.Obfuscator NuGet パッケージへの参照を追加することで、ビルドプロセスの中でアプリケーションを難読化できます。これにより難読化の手順がより簡単で効率的になり、アプリケーションをより効果的に保護できます。

「Solution Explorer」ウィンドウで「BlazorServerSignalRApp」プロジェクトノードをダブルクリックしてプロジェクトファイルを開き、</Project> 終了タグの前に次の MSBuild のコードスニペットを追加します。

<UsingTask TaskName="Babel" AssemblyName="Babel.Build, Version=10.0.0.0, Culture=neutral, PublicKeyToken=138d17b5bd621ab7" /> <Target Name="Obfuscate" AfterTargets="Compile"> <Babel InputFile="$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)" OutputFile="$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)" ObfuscateTypes="true" ObfuscateEvents="true" ObfuscateMethods="true" ObfuscateProperties="true" ObfuscateFields="true" VirtualFunctions="true" UnicodeNormalization="false" FlattenNamespaces="true" StringEncryption="hash" ResourceEncryption="true" ControlFLowObfuscation="if=on;switch=on;case=on;call=on" ControlFLowIterations="3" /> </Target>

ファイルを保存し、ソリューションをリビルドします。ビルドプロセスの中で Babel Obfuscator が自動的に実行され、ターゲットアセンブリを処理します。F5 を押して Visual Studio のデバッガーを起動すると、難読化されたアプリケーションをテストできます。

Blazor Server SignalR アプリケーション

Blazor では、各 Web ページは Razor コンポーネントであり、HTML と C# コードが混在する .razor ファイルとして実装されます。コンポーネントをコンパイルすると、Visual Studio は Razor コンポーネントに対応するパブリッククラスを生成し、このクラスがブラウザーで Web ページを構築するために使われます。Babel Obfuscator は既定では、アセンブリのパブリックインターフェイスを壊さないように、外部から参照できるシンボルをリネームしません。そのため、Blazor の Web ページに対応するパブリッククラスは難読化されません。

ただし、XML ルールを使って、これらのクラスを明示的に難読化するように Babel Obfuscator を設定すれば、これらの Web ページを保護できます。そうすることで、コードへの不正なアクセスや変更を防ぎ、攻撃者がアプリケーションのロジックをリバースエンジニアリングしたり盗んだりすることを難しくできます。

Razor ページのコードビハインドを Babel Obfuscator で保護する XML ルールを作成するには、まず任意の .NET 検査ツールでアプリケーションのアセンブリを開く必要があります。これには ILSpy、DotPeek、dnSpy などのツールを使用でき、アセンブリをデコンパイルして内容を調べられます。アセンブリを開いたら、保護したい Razor ページのコードビハインドを表すクラスを探します。このクラスは Razor ページと同じ名前で、名前が「Pages」または「Shared」で終わる名前空間にあります。

逆アセンブルされた BlazorServerSignalRApp

クラスが見つかったら、難読化したいクラスを対象とする Babel Obfuscator の XML ルールを作成できます。XML ルールには、保護したい名前空間の名前を指定します。この場合は

「babelRules.xml」という名前の新しい XML プロジェクト項目を作成し、次のルールを追加します。

<?xml version="1.0" encoding="utf-8" ?> <Rules> <Rule name="rule1" feature="renaming" exclude="false"> <Target>Classes</Target> <Pattern>*</Pattern> <Namespace>BlazorServerSignalRApp.Pages,BlazorServerSignalRApp.Shared</Namespace> </Rule> </Rules>

続いて、babelRules.xml ファイルを次のように Babel タスクに追加します。

<Babel RulesFiles="$(ProjectDir)babelRules.xml" ... />

ビルドを実行し、新しく生成されたターゲットアセンブリを調べます。

逆アセンブルされた BlazorServerSignalRApp

Web ページに対応するパブリッククラスは、もう見えなくなっています。

XML ルールで Babel Obfuscator を設定すると、どのクラスを難読化し、どのようにリネームするかをきめ細かく制御でき、柔軟性とカスタマイズの幅が広がります。

通常は、Visual Studio の「Publish」機能を使ってアプリケーションをフォルダーにデプロイできます。アプリを公開したら、実行可能ファイル BlazorServerSignalRApp.exe を実行してアプリケーションを起動できます。これにより、難読化されたアプリケーションをテストし、期待どおりに動作することを確認できます。

Babel Obfuscator を統合済みのサンプルアプリケーションは、こちら からダウンロードできます。

Last updated on