Разбираю обфусцированный .NET-стилер: de4dot сдался на control-flow flattening

Рейтинг: 34.2% · 2 голосов
Capture The Flag, реверс бинарных файлов, разработка эксплойтов, ассемблер, форензика, крэкми и задачи по информационной безопасности.
Ответить
Аватара пользователя
tsav
Сообщения: 52
Зарегистрирован: 11 май 2026, 01:00

Разбираю обфусцированный .NET-стилер: de4dot сдался на control-flow flattening

Сообщение tsav »

Ковыряю обфусцированный .NET-стилер для внутреннего отчёта (прилетел в фишинге коллеге, машину изолировали). Хочу вытащить конфиг и адреса C2 для блокировки и индикаторов.

Проблема: de4dot на нём складывает лапки — строки зашифрованы, поверх control-flow flattening, методы развёрнуты в один большой switch по стейту, читать невозможно. Похоже на ConfuserEx-производную, маркеры стандартного профиля de4dot не подходят.

Чем разворачиваете CFF и снимаете шифрование строк в таких? Интересует и статический, и динамический путь — что в 2026 реально работает, кроме 'руками по байтам'.
👍2 ❤️ 🔥2 😄 🤔1
✔ Лучший ответ сформирован автоматически — HaskellGuru
@tsav, Я бы не упирался в статику, по стилерам динамика почти всегда быстрее. Распишу свой обычный маршрут. Запускаешь сэмпл в изолированной виртуалке (без сети или с fakedns/inetsim, чтобы он считал, что дозвонился до C2). Многие .NET-стилеры распаковывают и дешифруют реальный пейлоад в память — то, что лежит на диске, часто просто лоадер. Снимаешь распакованные сборки из памяти: pe-sieve/hollow…
Перейти к ответу →
Аватара пользователя
rawgoblin
Сообщения: 39
Зарегистрирован: 13 май 2026, 07:42

Re: Разбираю обфусцированный .NET-стилер: de4dot сдался на control-flow flattening

Сообщение rawgoblin »

По описанию это почти наверняка ConfuserEx 2 или его форк (их сейчас десяток). Порядок такой:

1) de4dot-cex (форк de4dot именно под ConfuserEx) — снимает базовый proxy-call и часть строк лучше, чем ванильный de4dot.
2) Если CFF остаётся — есть отдельные деобфускаторы flattening под ConfuserEx, либо пишешь свой проход на dnlib: находишь switch-диспетчер, восстанавливаешь порядок блоков по константам стейта.
3) Строки часто расшифровываются одним статическим методом-декриптором с int-ключом. Найди его в dnSpyEx и прогони все вызовы оффлайн через тот же dnlib, подставляя реальные литералы прямо в IL.

После этого ILSpy 9 читается уже по-человечески.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
HaskellGuru
Сообщения: 12
Зарегистрирован: 17 май 2026, 00:52

Re: Разбираю обфусцированный .NET-стилер: de4dot сдался на control-flow flattening

Сообщение HaskellGuru »

✔ Лучший ответ — сформирован автоматически
@tsav, Я бы не упирался в статику, по стилерам динамика почти всегда быстрее. Распишу свой обычный маршрут.

Запускаешь сэмпл в изолированной виртуалке (без сети или с fakedns/inetsim, чтобы он считал, что дозвонился до C2). Многие .NET-стилеры распаковывают и дешифруют реальный пейлоад в память — то, что лежит на диске, часто просто лоадер. Снимаешь распакованные сборки из памяти: pe-sieve/hollows_hunter по процессу либо managed-дамперы вроде ExtremeDumper. Получаешь уже расшифрованные модули, где строки лежат открыто.

Конфиг и C2: у большинства семейств конфиг расшифровывается на старте в строку или JSON. Ставишь бряк в dnSpyEx на строковый декриптор или на сетевые вызовы (HttpClient/WebClient/Socket.Connect) и просто читаешь аргументы в рантайме. Часто C2 виден прямо в стеке параметров до всякого реверса логики.

Если совсем лень — снимаешь сетевой дамп при коннекте к фейковому C2, адрес и формат бикона видно в трафике. Для отчёта с IOC этого обычно достаточно, а полную логику дореверсишь уже статикой по дампу из памяти.

По семействам: если это что-то из ветки RedLine и наследников — там конфиг обычно прямолинейный, декриптор один. Если новодел — может быть многослойно, тогда динамика экономит часы.
👍 ❤️ 🔥1 😄 🤔
Аватара пользователя
barbs
Сообщения: 50
Зарегистрирован: 19 май 2026, 04:16

Re: Разбираю обфусцированный .NET-стилер: de4dot сдался на control-flow flattening

Сообщение barbs »

Плюсую dnlib для своего деобфускатора — это в итоге самый надёжный путь, когда готовые тулзы спотыкаются. CFF снимается так: строишь граф блоков метода, находишь переменную-стейт и диспетчерский switch, эмулируешь переходы по константам, перелинковываешь базовые блоки в восстановленном порядке и выпиливаешь диспетчер. Сотня строк кода, и метод снова читаемый.

Строковый декриптор оборачиваешь и зовёшь рефлексией прямо из своего инструмента, заменяя ldstr-цепочки на готовые литералы. Сохраняешь сборку — дальше ILSpy/dnSpyEx. Один раз написал каркас под ConfuserEx, потом переиспользуешь на всех его форках.
👍 ❤️ 🔥 😄 🤔1
Аватара пользователя
QemuAdmin
Сообщения: 2
Зарегистрирован: 09 июн 2026, 21:16

Re: Разбираю обфусцированный .NET-стилер: de4dot сдался на control-flow flattening

Сообщение QemuAdmin »

Главное — все манипуляции только в отдельной ВМ со снапшотом и без проброса в рабочую сеть, стилеры любят хапать всё подряд из окружения и токены. И не запускай managed-дамп на хосте. А для блокировки прямо сейчас не жди полного реверса: подними фейковый C2, сними индикаторы из памяти и трафика, отдай в блок — разбор логики доделаешь потом спокойно.
👍1 ❤️ 🔥1 😄 🤔
Ответить
Поделиться темой: ✈ Telegram VK

Вернуться в «CTF и реверс-инжиниринг»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость