DotFucastor の Control Flow 難読化機能
Renaming とあわせて、難読化ツールの主機能とも言える部分。Community Edition では使用できない。
設定上は、「低」「中」「高」の3段階で切り替えることができる。長々と生成された IL を眺め続けたわけではないが、最低限抑えておかないといけないことは、
- コードの解析がどれぐらい面倒になるか
- そもそも、きちんと元のコードと同じ結果を得られるの?
- 実行速度への影響度は?
といったところ。
1点目のコード解析だが、少なくともポピュラーなディスアセンブル/デコンパイルツールによる高級言語への変換は概ね防ぐことができているようだ。たとえば C# にはメソッドの実装において、任意の位置に GOTO を埋め込むことができないので、GOTO を利用して処理順序を制御するだけで C# へのデコンパイルは概ね防げるようになる。
当然ながら、バイナリファイルとして読めなくなるわけでもないし、IL としてのディスアセンブルは問題なく可能になっているので、IL を眺めて読める人にとっては得られる IL の難読レベルが問題になるが、ポピュラーなツールで手軽に高級言語形式でコードを見られないというだけで面倒だという感触を与えることは可能だろう。*1
2点目については、製品として成り立つためには必須の項目であるから売ってる側もきっちりやってることだろう。とはいえ、不具合はつきものなので、気になるかぎりのテストコードを試してみて、それでも本番環境で問題がでたらサポートに泣きつくしかないといったところだろう。少なくとも最初の1つのプロダクトについては、評価版を利用して、難読化後のアセンブリの完全なテストシナリオの確認は行ってからの製品購入にしたいところだ。
3点目に関しては、まだほとんど評価できていない。IL のレベルの難読化によっては、生成される Native Code に大きく影響が発生する場合と、実質的な影響が発生しない場合があり、テストコードを何本も通してみる以外に、プライマリプロダクトによるテストを行いたいところである。
*1:こんな IL がどうなるこうなると書くのはマズイ気もするし