Codecepticon は、C#、VBA/VB6(マクロ)、および PowerShell のソースコードを難読化できる .NET アプリケーションであり、Red/Purple Team などのオフェンシブセキュリティエンゲージメント向けに開発されています。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 パッケージがダウンロードされるまで待ってからソリューションをビルドします。コンパイル済みの Release をダウンロードすることもできます。
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を作成してください。
プルリクエストの提出については、Contributionsセクションを参照してください。
Codecepticonを実行する前に、対象プロジェクトのクリーンなバージョンをコンパイルできることを確認してください。この問題が発生する場合、多くの場合Codecepticonではなく、対象ソリューションの依存関係の不足が原因です。それでもコンパイルできない場合は:
最善を尽くしますが、PowerShellスクリプトは非常に複雑になる可能性があり、PSParserはC#向けのRoslynほど高度ではないため、約束はできません。VBA/VB6についても同様です。
ある時点で、次のエラーに遭遇するかもしれません:

この問題の根本原因の解明に引き続き取り組んでいますが、簡単な修正方法は、NuGetパッケージマネージャーからSystem.Collections.Immutableパッケージをアンインストールして再インストールすることです。
タイポ、バグ、新機能のいずれであっても、以下の点に同意いただける限り、Codecepticonはコントリビューションを非常に歓迎します: