Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос Реверс функции в EarTrumpet + system DLL на Windows 11: как восстановить структуру и логику?

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
19 Окт 2025
Сообщения
102
Реакции
4
Всем привет.

Разбираюсь с поведением одной функции в связке «пользовательская утилита + системная DLL» на Windows 11. Интересуют именно методики реверса, а не конкретные оффсеты/патчи.

Что реверсю конкретно

1. Пользовательское приложение
- ОС: Windows 11 Pro x64 (актуальные обновления).
- Приложение: EarTrumpet — популярная утилита для управления громкостью приложений, ставится как обычный UWP/Store‑софт.
- Задача: понять внутреннюю функцию, которая, судя по поведению, агрегирует информацию о аудиосессиях и рассчитывает «эффективную» громкость/состояние значков для трея.

2. Системный компонент
- Системная библиотека: одна из стандартных DLL Windows, через которую EarTrumpet дергает аудио‑API (WASAPI / Core Audio и т.п.).
- Дополнительно смотрю на поведение системных вызовов, которые идут в сторону `ntoskrnl.exe`, чтобы понять, какие флаги/значения реально оказываются в ядре.

Контекст интересующей функции (со стороны приложения)

- Внутри процесса EarTrumpet есть функция (условно `UpdateSessionsState`), которая:
- принимает структуру с текущими сессиями/параметрами (громкость, mute, активность, привязка к устройству вывода);
- обращается к системным COM/WinAPI интерфейсам;
- на выходе возвращает код/флаг, от которого зависит, как будет обновлён UI (иконки, слайдеры, всплывающие подсказки).

Что у меня уже есть

- Несколько версий EarTrumpet (старый и новый билд) для сравнения изменений в целевой функции.
- Среда анализа:
- IDA / Ghidra для статического анализа модулей приложения и завязанных DLL;
- x64dbg для динамики на уровне пользовательского процесса (брейки на вызовы целевой функции и связанных WinAPI);
- Process Explorer / Process Hacker для мониторинга модулей и дескрипторов аудиоустройств.

Что уже сделал

- Нашёл точку входа интересующей функции по xref’ам (место, где UI обновляется после изменения громкости или подключения/отключения устройства).
- Через отладчик отследил:
- структуру/объект, который передаётся в функцию (поля, которые явно связаны с громкостью/состоянием);
- значения до/после вызова (часть полей меняется, часть остаётся постоянной).
- В статике вижу:
- несколько таблиц констант и магических чисел, используемых в условиях/сравнениях;
- довольно разветвлённый CFG с множеством веток и проверок.

Собственно вопросы по методике

1. Как вы подходите к реверсу подобных функций в живом десктопном софте под Windows 11 (на примере EarTrumpet или похожих утилит из списка популярных Windows‑приложений):
- сначала максимально детализировать структуру данных и объектную модель (какие поля за что отвечают),
- или сперва пытаться классифицировать тип алгоритма (агрегация состояний, нормализация уровня громкости, выбор приоритетной сессии)?

2. Какие приёмы в IDA/Ghidra лучше всего помогают привести такую функцию к вменяемому виду:
- ручное разбиение на логические подфункции;
- агрессивное переименование полей/переменных по мере понимания;
- работа с графом управления и группировкой блоков?

3. Насколько имеет смысл глубоко залезать в системную DLL / тот же `ntoskrnl.exe`, чтобы до конца понять, что происходить под капотом:
- достаточно ли уровня WinAPI/COM, если цель — воссоздать логику на уровне приложения;
- или вы, как правило, идёте до ядра, когда нужна максимально точная модель поведения?

Интересуют любые советы и шаблоны работы именно для реверса *современных утилит под Windows 10/11 и связанных с ними системных DLL*, когда цель — не кряк, а восстановление логики и структуры данных.
 
Назад
Сверху Снизу