
.NET/PowerShell/VBA オフェンシブセキュリティ難読化ツール
[!CAUTION] このリポジトリはメンテナンスされていません。最新バージョンについては https://github.com/sadreck/Codecepticon をご覧ください。
Codecepticon は、C#、VBA/VB6(マクロ)、PowerShell のソースコードを難読化する .NET アプリケーションであり、レッドチームやパープルチームなどの攻撃的セキュリティ演習向けに開発されています。Codecepticon が他の難読化ツールと異なる点は、コンパイル済みの実行ファイルではなくソースコードを対象としていることと、AV/EDR 回避のために特化して開発されていることです。
Codecepticon はコードの難読化と書き換えを可能にするだけでなく、コマンドラインの書き換えなどの機能も提供します。
! 始める前に !
このドキュメントは Codecepticon のインストールと使用方法のみを説明しています。Rubeus や SharpHound などのツールのコンパイル、使用、サポートについては提供しません。各プロジェクトのリポジトリを個別に参照してください。
Codecepticon は VS2022 で積極的に開発・テストされていますが、VS2019 でも動作するはずです。VS2019 以下のバージョンに関するチケットや問題は、VS2022 で再現可能でない限り調査されません。そのため、最新の VS2022 をご使用ください。
以下のパッケージは v3.9.0 でなければなりません。新しいバージョンには以下の未解決の問題があります:https://github.com/dotnet/roslyn/issues/58463
Codecepticon は実行時にこれらのパッケージのバージョンを確認し、v3.9.0 と異なる場合は通知します。
これはいくら強調してもしすぎることはありません:難読化したコードは常に最初にローカルでテストしてください。


Codecepticon を開き、すべての NuGet パッケージがダウンロードされるのを待ってからソリューションをビルドします。
Codecepticon を使用する方法は2つあります。すべての引数をコマンドラインに指定するか、単一の XML 設定ファイルを渡すかです。高度なカスタマイズが可能なため、--help の出力を手動で参照してどのパラメータを使うべきか判断することはお勧めしません。CommandLineGenerator.html を使用して、素早くコマンドを生成してください。

コマンドジェネレータの出力形式は、Console または XML のいずれかを選択できます。コンソールコマンドは次のように実行します。
Codecepticon.exe --action obfuscate --module csharp --verbose ...etc
一方、XML 設定ファイルを使用する場合は、次のように実行します。
Codecepticon.exe --config C:\Your\Path\To\The\File.xml
Codecepticon の機能について詳しく知りたい場合は、このドキュメント を参照してください。
使用できるヒントについては、このドキュメント を参照してください。
C# プロジェクトの難読化は簡単です。対象とするソリューションを選択するだけです。ソリューション自体のバックアップは作成されず、現在のものが難読化されることに注意してください。Codecepticon を実行する前に、対象プロジェクトが独立してコンパイルできることを確認してください。
VBA の難読化は、Microsoft Office ドキュメントではなくソースコード自体に対して行われます。つまり、doc(x) や xls(x) ファイルを Codecepticon に渡すことはできません。モジュールのソースコードそのものでなければなりません(Alt-F11 を押してそこからコードをコピーしてください)。
PowerShell スクリプトの複雑さと、スクリプト記述の自由度の高さから、すべてのエッジケースをカバーし、難読化結果が完全に機能することを保証するのは困難です。単純なスクリプト/機能に対しては Codecepticon が正常に動作することが期待されますが、PowerView のような複雑なスクリプトに対しては動作しません。これは現在開発中です。
アプリケーションやスクリプトを難読化した後、コマンドライン引数も名前が変更されている可能性が非常に高いです。解決策は、HTML マッピングファイルを使用して新しい名前を見つけることです。例えば、次のコマンドラインを変換するとします。
SharpHound.exe --CollectionMethods DCOnly --OutputDirectory C:\temp\
HTML マッピングファイルで各引数を検索すると、次のようになります。



すべての文字列を置き換えると、結果は次のようになります。
ObfuscatedSharpHound.exe --AphylesPiansAsp TurthsTance --AnineWondon C:\temp\
ただし、一部の値が複数のカテゴリに存在する場合があります。

したがって、常にローカル環境で結果をテストすることが極めて重要です。
Codecepticon を使用して実行ファイル(コンパイル済みの出力)にデジタル署名することも可能です。Codecepticon は署名証明書を生成し、それを使用して(または他の証明書を提供して)対象ファイルに署名することができます。
コンパイル済みの出力には多数の依存 DLL が含まれており、ライセンス要件により書面による同意なしに再配布することができません。
いいえ、Codecepticon はすべてのプロジェクトで動作するはずです。プロファイルは、対象プロジェクトに対してさらに信頼性を高め、作業を容易にするための追加調整に過ぎません。
しかし、すべてのコードは独自であるため、プロジェクトの難読化中に1つまたは2つのエラーが発生し、コンパイルや実行ができなくなる場合があります。その場合は新しいプロファイルが必要になるかもしれません。その際は新しい Issue を作成してください。
同じ原理が PowerShell/VBA コードにも当てはまります。現在 Codecepticon に付属するプロファイルはありませんが、必要であれば追加することは簡単です。
バグの報告や新機能の提案は、Issue を作成してください。
プルリクエストを送信する場合は、貢献 セクションを参照してください。
Codecepticon を実行する前に、対象プロジェクトのクリーンなバージョンがコンパイルできることを確認してください。多くの場合、この問題が発生するのは Codecepticon ではなく、対象ソリューションの依存関係が不足しているためです。それでもコンパイルできない場合:
最善を尽くしますが、PowerShell スクリプトは非常に複雑になる可能性があり、PSParser は C# の Roslyn ほど高度ではないため、約束はできません。VBA/VB6 についても同様です。
以下のようなエラーが発生することがあります。

この問題の原因はまだ調査中ですが、簡単な修正方法は NuGet パッケージマネージャーから System.Collections.Immutable パッケージをアンインストールして再インストールすることです。
誤字、バグ、新機能を問わず、Codecepticon は以下の点に同意いただける限り、貢献を歓迎します。