• XSS.stack #1 – первый литературный журнал от юзеров форума

анализ по имени функции

chuchak

floppy-диск
Пользователь
Регистрация
13.05.2025
Сообщения
5
Реакции
-1
здравствуйте недавно начал изучать ревеерс инжиниринг и у меня возникла проблема. библиотека которую я анализирую утыкана сложными именами функций, можете дать совет как по имени немного понять какие данные функция принимает, и что делает на подобе этой:
_tlgWriteTemplate<long (_tlgProvider_t const *,void const *,_GUID const *,_GUID const *,uint,_EVENT_DATA_DESCRIPTOR *),&_tlgWriteTransfer_EventWriteTransfer(_tlgProvider_t const *,void const *,_GUID const *,_GUID const *,uint,_EVENT_DATA_DESCRIPTOR *),_GUID const *,_GUID const *>::Write<_tlgWrapSz<char>,_tlgWrapperByRef<16>,_tlgWrapSz<char>,_tlgWrapSz<ushort>,_tlgWrapperByVal<1>,_tlgWrapSz<ushort>,_tlgWrapperByVal<4>,_tlgWrapSz<ushort>,_tlgWrapSz<ushort>,_tlgWrapSz<ushort>,_tlgWrapperByVal<4>,_tlgWrapSz<ushort>,_tlgWrapperByVal<4>,_tlgWrapSz<ushort>,_tlgWrapSz<ushort>,_tlgWrapSz<ushort>,_tlgWrapSz<ushort>,_tlgWrapSz<ushort>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapSz<ushort>,_tlgWrapperByVal<4>,_tlgWrapSz<char>,_tlgWrapSz<char>,_tlgWrapSz<char>,_tlgWrapSz<char>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<8>>(_tlgProvider_t const *,void const *,_GUID const *,_GUID const *,_tlgWrapSz<char> const &,_tlgWrapperByRef<16> const &,_tlgWrapSz<char> const &,_tlgWrapSz<ushort> const &,_tlgWrapperByVal<1> const &,_tlgWrapSz<ushort> const &,_tlgWrapperByVal<4> const &,_tlgWrapSz<ushort> const &,_tlgWrapSz<ushort> const &,_tlgWrapSz<ushort> const &,_tlgWrapperByVal<4> const &,_tlgWrapSz<ushort> const &,_tlgWrapperByVal<4> const &,_tlgWrapSz<ushort> const &,_tlgWrapSz<ushort> const &,_tlgWrapSz<ushort> const &,_tlgWrapSz<ushort> const &,_tlgWrapSz<ushort> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapSz<ushort> const &,_tlgWrapperByVal<4> const &,_tlgWrapSz<char> const &,_tlgWrapSz<char> const &,_tlgWrapSz<char> const &,_tlgWrapSz<char> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<8> const &)
 
Отличный вопрос — такие имена и правда могут свести с ума 😅
Похоже, вы анализируете бинарь или символы из телеметрической/трейсинговой библиотеки Microsoft (судя по _tlg*, это Telemetry Logging — часть Event Tracing for Windows, ETW).
Разберём, как можно по одному имени функции вроде



_tlgWriteTemplate<long (_tlgProvider_t const *, void const *, _GUID const *, _GUID const *, uint, _EVENT_DATA_DESCRIPTOR *), &_tlgWriteTransfer_EventWriteTransfer(...) , _GUID const *, _GUID const *>::Write<...>()


понять, что она делает и какие данные принимает, даже не имея документации.




🧩 1. Распознаём "каркас" имени​


Синтаксис похож на:



tlgWriteTemplate<функция, &ссылканареализацию, типыаргументов>::Write<типы_параметров>()


Это шаблонная обёртка вокруг функции записи события в телеметрию.
Она не "настоящая" функция, а инстанциация шаблона, которая компилируется под конкретный набор типов данных.




📘 2. Расшифровка общих префиксов и элементов​


ЭлементЧто значит
_tlgTelemetry Logging (внутренние структуры ETW/TraceLogging)
_tlgProvider_tСтруктура с метаданными провайдера событий (GUID, имя, теги и т. д.)
_GUID const *Указатели на идентификаторы GUID событий
_EVENT_DATA_DESCRIPTOR *Структура, описывающая массив данных для события
WriteМетод, который реально пишет событие (вызывает системный API EventWrite или EventWriteTransfer)
_tlgWrapSz<char>"Wrap" — упаковка строки (char*), Sz — null-terminated строка
_tlgWrapSz<ushort>Аналогично, но для wchar_t* (UTF-16)
_tlgWrapperByVal<N>Значение фиксированной длины (число, enum и т. п.)
_tlgWrapperByRef<N>Ссылка на буфер данных размером N байт



🔍 3. Что делает конкретно ваш пример​


Имя:



_tlgWriteTemplate<...>::Write<_tlgWrapSz<char>, _tlgWrapperByRef<16>, _tlgWrapSz<char>, ...>


означает, что вызывается инстанциация шаблона записи события с набором параметров:


  • несколько строк (_tlgWrapSz<char> / _tlgWrapSz<ushort>),
  • несколько чисел фиксированной длины (_tlgWrapperByVal<4> — скорее всего int или DWORD, <8> — long long или double),
  • один-два GUID’а (идентификаторы события/транзакции),
  • структура _tlgProvider_t (контекст провайдера),
  • и void const * — указатель на данные или контекст события.

То есть фактически это “специализация” функции EventWriteTransfer() или её аналога, которая собирает и отправляет набор параметров в ETW.




🧠 4. Как "дешифровать" имена в будущем​


  1. Игнорируйте шаблонные слои (<...> внутри <...>). Начните с базового имени:
    _tlgWriteTemplate::Write → функция записи.
  2. Смотрите на типы:
    • WrapSz<char> → строка (ANSI)
    • WrapSz<ushort> → строка (Unicode)
    • WrapperByVal<4> → число (32-бит)
    • WrapperByVal<8> → число (64-бит)
    • WrapperByRef<16> → GUID / бинарный блок
  3. Смотрите на контекст вызова (в дизассемблере, в месте использования):
    Если передаются GUID и строки — это почти наверняка телеметрия или логирование события.
  4. Если нужно понять назначение события — ищите Provider или EventDescriptor поблизости: там обычно имя события ("AppLaunch", "Error", "Telemetry", и т. д.)



🛠️ 5. Инструменты, которые помогают​


  • IDA / Ghidra — с плагином demangle для MSVC (разберёт шаблонные имена).
  • undname.exe (входит в Visual Studio):

    undname _tlgWriteTemplate<long (_tlgProvider_t const *,void const *,_GUID const *,...)>::Write<...>
    → выдаст развернутое имя с читаемыми типами.
  • TraceLogging headers (traceloggingprovider.h) — там можно увидеть определения этих _tlg* шаблонов.
 
здравствуйте недавно начал изучать ревеерс инжиниринг и у меня возникла проблема. библиотека которую я анализирую утыкана сложными именами функций, можете дать совет как по имени немного понять какие данные функция принимает, и что делает на подобе этой:
_tlgWriteTemplate<long (_tlgProvider_t const *,void const *,_GUID const *,_GUID const *,uint,_EVENT_DATA_DESCRIPTOR *),&_tlgWriteTransfer_EventWriteTransfer(_tlgProvider_t const *,void const *,_GUID const *,_GUID const *,uint,_EVENT_DATA_DESCRIPTOR *),_GUID const *,_GUID const *>::Write<_tlgWrapSz<char>,_tlgWrapperByRef<16>,_tlgWrapSz<char>,_tlgWrapSz<ushort>,_tlgWrapperByVal<1>,_tlgWrapSz<ushort>,_tlgWrapperByVal<4>,_tlgWrapSz<ushort>,_tlgWrapSz<ushort>,_tlgWrapSz<ushort>,_tlgWrapperByVal<4>,_tlgWrapSz<ushort>,_tlgWrapperByVal<4>,_tlgWrapSz<ushort>,_tlgWrapSz<ushort>,_tlgWrapSz<ushort>,_tlgWrapSz<ushort>,_tlgWrapSz<ushort>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapSz<ushort>,_tlgWrapperByVal<4>,_tlgWrapSz<char>,_tlgWrapSz<char>,_tlgWrapSz<char>,_tlgWrapSz<char>,_tlgWrapperByVal<4>,_tlgWrapperByVal<4>,_tlgWrapperByVal<8>>(_tlgProvider_t const *,void const *,_GUID const *,_GUID const *,_tlgWrapSz<char> const &,_tlgWrapperByRef<16> const &,_tlgWrapSz<char> const &,_tlgWrapSz<ushort> const &,_tlgWrapperByVal<1> const &,_tlgWrapSz<ushort> const &,_tlgWrapperByVal<4> const &,_tlgWrapSz<ushort> const &,_tlgWrapSz<ushort> const &,_tlgWrapSz<ushort> const &,_tlgWrapperByVal<4> const &,_tlgWrapSz<ushort> const &,_tlgWrapperByVal<4> const &,_tlgWrapSz<ushort> const &,_tlgWrapSz<ushort> const &,_tlgWrapSz<ushort> const &,_tlgWrapSz<ushort> const &,_tlgWrapSz<ushort> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapSz<ushort> const &,_tlgWrapperByVal<4> const &,_tlgWrapSz<char> const &,_tlgWrapSz<char> const &,_tlgWrapSz<char> const &,_tlgWrapSz<char> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<4> const &,_tlgWrapperByVal<8> const &)
на это необязательно обращать внимание, дружище
ты через псевдокод анализируешь? кинь скрин
 
на это необязательно обращать внимание, дружище
ты через псевдокод анализируешь? кинь скрин
Я пытаюсь статически анализировать функции в системной библиотеке wlansvc.dll в виндовс. она отвечает за хэндшейк с роутером. И при том это не псевдокод а реальное имя функции хз зачем так сложно, но это имя.
 

Вложения

  • Снимок экрана 2025-10-15 183524.png
    Снимок экрана 2025-10-15 183524.png
    176.1 КБ · Просмотры: 16
Последнее редактирование:
Я пытаюсь статически анализировать функции в системной библиотеке wlansvc.dll в виндовс. она отвечает за хэндшейк с роутером. И при том это не псевдокод а реальное имя функции хз зачем так сложно, но это имя.
Это шаблонные параметры с плюсов. Какая задача вообще твоего анализа? Что ты хочешь узнать?
Если тебе нужно просто понять, как работает дллкак, анализируй ВинАпи вызовы в правильной последовательности, и основываясь уже на этом строй полноценную картину
1760545277194.png
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх