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

最近、難読化するとウィルス判定

以前から使っているソフトは、.Net Reactorです。このソフト優秀でNativeEXEにしてしまうと、逆アセンブリソフトで、デコンパイルできません。

とても重宝していたのですが、WindowsDefenderなどにウィルス判定されてしまうんです。

難読化した後、ソフトウェアを実行しようとするとウィルス判定されてしまい実行できません。

それに削除もされてしまうし。

困ったもの。

そこで、できる限りという意味でこんな感じにしています。

ILMergeで一つにまとめる

C#で開発し、参照の追加を行うと、DLLファイルなどが無数にできます。

EXEと、DLLファイルが別々だと、分かりやすくなってしまいますので、DLLを一つにまとめます。この時にMicrosoft の NuGetで手に入るILMergeを使うと手間いらずで一つのファイルになってくれます。

ILMerge

ILMerge.MSBuild.Task

の2つをインストールします。この状態でコンパイルすると、

Debugフォルダの中に ILMerge フォルダができ、その中に一つの実行ファイルができています。これはとても手軽です。勝手に一つにまとまってくれるので。

できるだけソースコードを大きな塊にする事で、逆コンパイルしても分かりにくく、追究しにくくします。

.NetReactorを使う

ここで、.NetReactorの登場です。

本来なら、Native Exeにしてしまうのが一番です。デコンパイルできなくなるので。しかしそれをやってしまうと、ウィルス判定されてしまう。痛しかゆしです。

そこで、Native EXEファイルのチェックを外しておきます。

それ以外の難読化機能をONにしておき、デコンパイルされてもよく分からないようにします。

ILSpy で逆アセンブルしてみる

実際に逆アセンブルしてみます。

今回逆アセンブルに利用したのはILSpyです。ダウンロードしたファイルをインストールしなくても動く優れものです。ダウンロードはこちらから。

解凍してできた exeを実行します。

逆アセンブルするとこんな感じ

CPNameなど、ところどころ読める文章もあるのですが、その中身のコードはほとんどないとか、変数名なども何かの文字の羅列になっていて、意味がよく分かりません。

できたアセンブリもそのままちゃんと実行できます。

うんなんか良さそうです。

まとめ

.NetReactor にも、DLLを mearge する機能があるのですが、その状態で様々な難読化オプションを有効にすると、exeがうまく実行できなくなることが多い気がします。

今回、ILMergeで一つにしたことで、その問題を回避できたのかなと。

おまけ Phoenix Protector

難読化に無償のPhoenix Protector も利用してみました。難読化のレベルは .NET Reactorよりも優れているかもしれないと思えるほど、中身が分からなくなっていました。

.NET Reactor では、 ところどころ単語が読める状態のところがありましたが、Phoenix Protectorは全く読めるところがない。

こいつはいけるかもと思ったのですが、実行ファイルが起動しない。

ダメでした。残念。