.NET アセンブリ(DLL / EXE)を IL レベルで難読化する CLI ツール。.NET 10.0 ランタイム上で動作し、Windows / Linux / macOS のいずれでも実行できる(クロスプラットフォーム)。dnlib をバックエンドに、11 種類の難読化技術 をひとつのパイプラインに束ねている。
【11 種の難読化技術】
デフォルトで適用される基本 4 種:
- 名前難読化(混同しやすい l / I / 0 / O / o へ変換、virtual メソッド/プロパティ/イベントはグループ単位で改名)
- 文字列暗号化(XOR / AES 切替可)
- 制御フロー難読化(状態機械化 + switch dispatcher)
- デッドコード挿入
opt-in で積める追加 7 種:
- Anti-ILDASM(SuppressIldasmAttribute 注入)
- Anti-Debug(module initializer と ~30% のメソッドに Debugger.IsAttached チェック)
- Anti-Tamper(SHA256 によるアセンブリ改ざん検知)
- NecroBit(メソッド本体を XOR 暗号化してリソースに格納、ランタイムで動的復元)
- HideMethodCalls(メソッド呼び出しを reflection 経由に置換)
- Code Virtualization(IL を自前 VM バイトコードに変換し、注入した interpreter で実行)
- Resource Protection(埋め込みリソースの暗号化 + リソース名の難読化)
【特徴】
- マルチアセンブリ対応 — 共有 NameMap / NameGenerator でクロスアセンブリ参照の整合性を維持
- C++/CLI(mixed-mode)サポート — 自動で NativeModuleWriter に切り替え(処理は OS 非依存)
- WPF / XAML 対応 — XAML ソースをスキャンして残すべき名前(Binding ターゲット、x:Type / x:Class、event handler、x:Static 参照など)を自動検出
- Roslyn AST ベースのソースコード難読化モードも同梱(-m source)
- public メンバ改名時のクロスアセンブリ参照同期(--rename-public)
- CI/CD パイプライン(GitHub Actions on Linux など)に統合しやすい CLI 設計
【使い方(最小)】
netbfsctn MyApp.dll -o MyApp.obf.dll
【フル防御】
netbfsctn MyApp.dll -o MyApp.obf.dll --anti-ildasm --anti-debug --anti-tamper --necrobit --hide-calls --virtualize --protect-resources --mapping-file map.json
【ベンチ(サンプルアプリ 18.5 KB / 143 型 / 91 文字列)】
- デフォルト 4 種: 38.5 KB(+108%)、実行 overhead +2.4%、平文文字列 0
- Full Protection: 69.5 KB(+276%)、実行 overhead +4.4%、平文文字列 4
全構成で 動作正当性(correctness)を検証済み。
【スタック】
- IL レベル難読化: dnlib
- ソースコード難読化: Roslyn AST rewriter
- 仮想化: 自前 VM 命令セット + interpreter 注入
.NET 10.0(クロスプラットフォーム) / MIT ライセンス。
ボイラー @dhq_boiler
ジャパニーズ一般おじさん。
サインイン すると評を残せるっす。
まだ評はないっす。最初の言葉を残すっすか?