Лоадер без секретов в main: как малварь прячет пейлоад в TLS Callbacks — 23 сентября 2026 г. в 07:10:22.773
Лоадер без секретов в main: как малварь прячет пейлоад в TLS Callbacks Стандартный брейкпоинт на OEP не гарантирует перехват первой инструкции: системный загрузчик Windows вызывает функции из директории IMAGE_DIRECTORY_ENTRY_TLS задолго до передачи управления на AddressOfEntryPoint. При старте процесса вызов ntdll!LdrpInitializeProcess инициирует ntdll!LdrpCallTlsInitializers. Загрузчик находит массив указателей через поле AddressOfCallBacks в структуре IMAGE_TLS_DIRECTORY и поочерёдно выполняет зарегистрированные коллбэки с причиной DLL_PROCESS_ATTACH. В MSVC массив создаётся без явных API-вызовов через атрибут слияния секций #pragma section(".CRT$XLB", read). На этапе линковки адреса сортируются по алфавиту и упаковываются в .rdata с NULL-терминатором на конце. На практике это даёт малвари окно для скрытого выполнения: коллбэк напрямую читает флаг BeingDebugged в структуре PEB или зануляет отладочные регистры Dr0–Dr7 через SetThreadContext. Если отладчик обнаружен, процесс тихо завершается через ExitProcess, так и не дойдя до main(). Статически наличие коллбэков проверяется через dumpbin /tls <binary> или парсинг секций в PE-bear. Чтобы поймать выполнение динамически, в x64dbg нужно заранее выставить флаг TLS Callbacks в меню Options -> Preferences -> Events. blog.poxek @poxek | @poxek_ai | MAX