
.NET/PowerShell/VBA Обфускатор для наступательной безопасности
[!CAUTION] Этот репозиторий не поддерживается, посетите https://github.com/sadreck/Codecepticon для последней версии.
Codecepticon — это .NET-приложение, которое позволяет запутывать исходный код на C#, VBA/VB6 (макросах) и PowerShell, и разработано для задач наступательной безопасности, таких как Red/Purple Teams. Отличие 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: либо указать все аргументы в командной строке, либо передать один 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 должен работать со всем. Профили — это лишь небольшие дополнительные настройки, которые применяются к целевому проекту, чтобы сделать его более надёжным и удобным в работе.
Но поскольку весь код уникален, будут случаи, когда запутывание проекта приведёт к одной-двум ошибкам, которые не позволят его скомпилировать или выполнить. В таком случае может потребоваться новый профиль — пожалуйста, создайте новый вопрос, если это так.
Тот же принцип применим к коду PowerShell/VBA — хотя сейчас у них нет профилей, поставляемых с Codecepticon, добавить их при необходимости несложно.
Для сообщения об ошибках и предложения новых функций, пожалуйста, создайте вопрос.
Для отправки запросов на включение (pull request) ознакомьтесь с разделом Вклад.
Перед запуском Codecepticon убедитесь, что вы можете скомпилировать чистую версию целевого проекта. Очень часто, когда возникает эта проблема, она связана с отсутствующими зависимостями целевого решения, а не с Codecepticon. Но если всё ещё не компилируется:
Я сделаю всё возможное, но так как скрипты PowerShell могут быть ОЧЕНЬ сложными, а PSParser не так продвинут, как Roslyn для C#, никаких гарантий дать нельзя. То же самое относится к VBA/VB6.
Вы можете в какой-то момент столкнуться со следующей ошибкой:

Всё ещё пытаемся разобраться с этим, быстрое решение — удалить и переустановить пакет System.Collections.Immutable через менеджер пакетов NuGet.
Будь то опечатка, ошибка или новая функция, Codecepticon очень открыт для вклада, при условии согласия со следующим: