1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

.Net ReactorでWPFアプリケーションのDLLを難読化してみる記事

Last updated at Posted at 2025-05-06

いいね、悪いね、フォロー、フォロー解除、ちゃんねる登録がはげみになります。

最近はこのようなものを制作しておりまして(WPFのTextBoxdで表示するSyntax Highliter または SpellChecker)、なかなか開発時間取れないんだけどAIがあるので助かっています。

外部プロジェクトで読み込ませた場合。

今回は自作のDLLを難読化することで、ソースコードの流出を防ごうという記事です。生成AIのせいで簡単にマネされちまうんで

参考

.NETで難読化を試してみる 第1回

Eazfuscator.NETが個人的ランキング1位とのこと

C# ソースコードを守る 難読化ソフト

Native EXEにするとウィルス判定されてしまうとのこと

ConfuserExは  supports .NET Framework from 2.0 - 4.8, .NET Standard, .NET Core and Mono.
とあり、古くて使い物にならない。

価格

US$ 199 (現在のレートで 32,808 JPY(税込み))

サポートは1年間受けることが可能で、その後もそのバージョンは永続的に使える、らしい。あまり明確に書いてないのでわからないです💦

Version
Update Support
Secure Ordering
7.0.0.0
1 year included
via PayPro Global

.Net Reactorの公式サイト

サポートするフレームワーク

によると
.NET 5.0-9.0
NET Framework 1.1/2.0/3.0/3.5/4.x
.NET Core 1.0-3.x
.NET Standard 1.0-2.x
.NET MAUI
.NET Portable
.NET CF 1.1/2.0/3.5
Universal Windows
Xamarin Android, iOS, Mac
Mono 1.x-6.x
WinRT/Metro
Unity 3D
Windows Phone 7/8/10

です。かなり手厚いと言える。

設定例を解説

※解説生成はGrokで行いました。

設定の詳細な説明は以下URLのDocumentから探してください

設定項目 説明 効果
NecroBit CILコードを暗号化 逆エンジニアリングを阻止
Anti ILDASM ILDASMによる逆アセンブル防止 デコンパイラでのコード閲覧をブロック
Anti Tampering 改ざん防止(整合性チェック) 不正改変を検知し実行を阻止
Control Flow Obfuscation コードをスパゲティコード化 ロジック解析を困難に
String Encryption 文字列を暗号化 機密情報の漏洩を防止
Hide Method Calls メソッド呼び出しを隠蔽 コード追跡を困難に
Anti Debug デバッガ検出とプロセス終了 デバッグ解析を阻止
Obfuscation コード全体の難読化 コードの可読性を低下
Code Virtualization コードを仮想マシン命令に変換 直接解析をほぼ不可能に
Merge Enums 列挙型をマージ アセンブリサイズ削減と構造複雑化
Create Mapping File 難読化マッピングファイル生成 デバッグ用コード対応を記録
Compress & Encrypt Resources リソースを圧縮・暗号化 リソース保護とサイズ削減
Rules カスタム難読化ルール設定 特定部分の保護を細かく制御

実際に使ってみた

今回は.net8で出力したDLLに難読化を掛けてみました。

1.MainAssemblyでファイル選択 → 自作DLLを読み込ませる

image.png

2.Quick Settings で必要な項目にCheckを付ける

image.png

3.Protect(保護)を実行する

image.png

4.Lisence登録していないと
Demo Version. The protected file(s) will stop working after 14 days. 
と出力され14日間しか動作しない。

image.png

5.出力先
読み込んだDLLと同じディレクトリ上の{ProjectName}_Secureフォルダに出力されます。

名前はそのままなので、_secure.dllとしておくと良い
プロジェクトがDLLのアセンブリ名に依存しているのでエラーA null or zero length string does not represent a valid Type.が発生してしまいました。名前はプロジェクト内で変えるしかないですね

image.png

DLLを外部プロジェクトに登録してみた

1.Visual studio でDLLを読み込む
依存関係を右クリックして
image.png

Usingを追加。
Dllを読み込んでから、TextBoxへの独自イベント登録とかしておく

DLLは
プロジェクトフォルダ\ProjectName.csproj内に
<HintPass>として設定が保存されるため、
これをプロジェクト内の全文検索で見つけると良い

今回は "SinWaveSample_secure.dll"

  <ItemGroup>
    <Reference Include="SinWaveSample">
      <HintPath>..\..\..\TestCode\SinWaveSample\SinWaveSample\bin\Debug\net8.0-windows\SinWaveSample.dll</HintPath>
    </Reference>
  </ItemGroup> 

ちなみに既に何か登録してあると、<HintPath>が新しく登録されない不具合がある(Microsoft Visual Studio Community 2022 (64 ビット) - Current
Version 17.13.4)。

この場合は<HintPath>を丸ごと削除して登録しなおすと良い。私はTargetProject.csprojを直接編集しています。

<HintPath>はフルパスがおすすめです。

image.png

ソリューションをビルドするとエラーが出るようになるので再度登録する。

image.png

WPFのXAMLコントロールとして登録する場合

TextBoxを使用したクラスライブラリDLLの場合、既存のTextBoxにそのまま置き換えることができる
image.png

XAMLのWindow要素に独自DLLのUsingを登録しておく

以下設定例

<Window
        xmlns:custom="clr-namespace:MakizunoUI.Controls;assembly=SinWaveSample"

Textboxコントロール

設定例
  <custom:IdleTextBox 
      IsUndoEnabled ="True"
      Width="350" Margin="10,3,0,0"
      Loaded="ParamText_Loaded"/>

DLLに独自イベントが登録してある場合、コード補完で出ます。
image.png

もちろん、コードビハインドで登録もできます。

デザインビューを表示させるにはソリューションをクリーン&ビルドします。デザインビューは閉じておくのがいいかも

image.png

実行結果(自作品に適用)

bandicam 2025-05-07 04-11-57-278_Harua.mp4.gif

Ilspyで覗いた図
image.png

内部の関数に大量のダミーが配置され、解析が難しくなりました。でもクラス名とかそのままなんだよね。外部公開用のを作成して、そこで出力させるようにします。
自前で大量のダミークラス作ろうとか考えている

以下、動作した設定例。 
AntiDebugはオンにしたら動かなかったです。
 →Xaml parse Exceptionになった
他は全部オンにしても動作しました。

NecroBit true
Quick Settings True
Anti ILDASM True
Anti Tampering True
Control Flow Obfuscaton Level9
String Encryption True
Hide Method Calls True
Anti Debug false
Obfuscation True
Code Virtualization True
Merge Enums True
Create Mapping File True
Compress & Encrypt Resources True
Rules False

あとがき

かなり強力な設定にしましたが、動作やパフォーマンスにはさほど影響が出ませんでした(すごいですね)。投資の価値はありそうです。

いいね、悪いね、フォロー、フォロー解除、ちゃんねる登録がはげみになります。
最後までお読みいただいた方はお疲れ様です

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?