Мир сегодня с "Юрий Подоляка"
Мир сегодня с "Юрий Подоляка"
Труха⚡️Україна
Труха⚡️Україна
Николаевский Ванёк
Николаевский Ванёк
Мир сегодня с "Юрий Подоляка"
Мир сегодня с "Юрий Подоляка"
Труха⚡️Україна
Труха⚡️Україна
Николаевский Ванёк
Николаевский Ванёк
ESCalator avatar

ESCalator

Tips and tricks от команды экспертного центра безопасности Positive Technologies (PT ESC)
Рейтинг TGlist
0
0
ТипПубличный
Верификация
Не верифицированный
Доверенность
Не провернный
РасположениеРосія
ЯзыкДругой
Дата создания каналаJun 03, 2024
Добавлено на TGlist
Nov 12, 2024

Развитие

Подписчиков
Индекс цитирования
Охват 1 поста
Охват рекламного поста
ER
ERR
DEC '24JAN '25FEB '25MAR '25APR '25

Популярные публикации ESCalator

24.03.202514:59
Как починить CFG. Часть вторая 🛠

Ранее мы рассказывали про то, как восстановить Control Flow Graph (CFG) в случае его обфускации. Однако часто при анализе даже необфусцированного ВПО можно встретить случаи, когда CFG некоторых функций генерируется с ошибками. Одним из таких примеров является написанное на Delphi ВПО, где из-за особенностей обработки исключений часто можно встретить картину, как на скриншоте 1.

🤔 Если присмотреться внимательнее (скриншот 2), то можно заметить, что в блоке (1) на стек сохраняется адрес одного из последующих блоков (3), после чего выполняется некоторая логика (зачастую — освобождение ресурсов или объектов) и происходит прыжок на сохраненный ранее адрес (2).

Из-за того что в блоке 2 присутствует дополнительная ссылка, IDA не может однозначно определить адрес, куда будет осуществлен прыжок в jmp eax. Чтобы исправить эту проблему, напишем небольшой хук, который будет проверять и автоматически патчить подобные места в коде.

Создадим класс хука, который будет ожидать событие ev_ana_insn. Для начала необходимо убедиться, что это действительно интересующая нас последовательность, после чего пройтись «вверх» и попытаться найти сохраненный на стек адрес. Затем пропатчить jmp eax на jmp short address.

class DelphiJmpEaxFixer(idaapi.IDP_Hooks):


Напишем функцию поиска сохраняемого на стек адреса lookup_push_insn. В ней найдем предположительную верхнюю границу блока 2 и проверим, что блок имеет единственную ссылку. Дополнительно ограничим диапазон поиска, в целях оптимизации.

def lookup_push_insn(self, start: int, limit: int = 30) -> int | None:


Добавим инициализацию хука при запуске скрипта и загрузим его в IDA. Запустим повторный анализ бинарного файла. В результате получим исправленный граф (скриншот 3).

Оставшиеся одиночные блоки — это вызовы обработчиков исключений; в данном случае они не влияют на ход работы программы. Стоит помнить, что пока хук активен, он будет автоматически вызываться даже при разметке нового кода, который не был размечен ранее.

hook_instance = DelphiJmpEaxFixer()
hook_instance.hook()


Happy reversing! 💫

#tip #reverse #idapython
@ptescalator
APT-группировка Cloud Atlas атакует предприятия ОПК России 🌎

В конце прошлого — начале текущего года группа киберразведки обнаружила миграцию управляющей инфраструктуры и эволюцию вредоносных документов в арсенале Cloud Atlas, ознаменовавшие начало новой кампании группировки в отношении предприятий оборонно-промышленного комплекса России.

Наблюдение за выявленной вредоносной инфраструктурой позволило в режиме реального времени отслеживать весь размах новой киберактивности группировки Cloud Atlas, в том числе вскрыть BEC-атаки с использованием электронной почты ранее зараженных предприятий ОПК России для отправки вредоносных документов Microsoft Office в адрес контрагентов.

📫 Вектором проникновения традиционно выступала фишинговая рассылка электронных писем с вредоносными документами Microsoft Office во вложении. Информация об управляющей инфраструктуре и вредоносные VB-скрипты были скрыты в альтернативном потоке данных (1Table) документов. Открытие файлов приводило к выполнению этих скриптов, которые взаимодействовали с API Google Sheets для передачи информации о зараженной системе и загрузки бэкдора PowerShower с последующей эксфильтрацией украденных данных в облачные хранилища (более подробно — в нашем прошлом исследовании).

По содержанию вредоносные вложения представляли собой приглашения на курсы повышения квалификации, документы об антикоррупционных проверках и мобилизационных мероприятиях, акты сверки взаимных расчетов, справки в отношении сотрудников, резюме соискателей на должность оператора ЧПУ.


🤷‍♂️ Обнаруженные документы — по большей части характерные для государственного сектора шаблоны — отсутствуют в открытом доступе и, вероятнее всего, были украдены из сетей ранее атакованных предприятий. Во избежание раскрытия предприятий, в сетях которых присутствует группировка, из зараженных документов накануне использования в новых атаках удалялись метаданные, о чем свидетельствуют временные метки их модификации.

Активность АРТ-группировки Cloud Atlas отслеживается с 2014 года. Традиционной географией атак являются страны СНГ. В 2024 году вектор кибератак существенно сместился в сторону России, их высокая интенсивность, частота миграции атакующей инфраструктуры и эволюции вредоносных документов сохраняются до настоящего времени.

Прогнозируется сохранение высокого уровня опасности киберугроз для российских учреждений и организаций, исходящих от APT-группировки Cloud Atlas.

🧐 Подробнее читайте на нашем сайте.

#TI #APT #Malware
@ptescalator
PT ESC обнаружил новую кампанию Joking Wolf 🐺

Юмористы проникают в популярные (и не очень) Telegram-каналы и публикуют несуществующие новости. Основная цель — ввести граждан в заблуждение, последствия — легкая растерянность и желание проверить информацию.

Попытки проникновения зафиксированы и в канал @ptescalator, но были успешно отбиты. Для защиты рекомендуем прокачивать навыки критического мышления. Эксклюзивное фото злоумышленников прикрепляем к посту.

IoCs опубликовали в Telegraph.

Будьте бдительны!
02.04.202511:45
@Вредонос попал в систему...
@Вредонос хочет сделать пакость...
@Вредонос вызывает WinAPI и...
@EDR-система обнаруживает его и начинает очень громко орать...

😱 Не самое приятное развитие событий для вирусописателей. Как же они борются с подобными ситуациями?

Один из способов — вызывать необходимую функцию Windows не через WinAPI, а через системные вызовы (system calls). Многие EDR-системы перехватывают вызовы WinAPI-функций, но далеко не всегда они определяют использование system calls. Этой особенностью можно воспользоваться для обхода защитных механизмов.

SysWhispers

Зачем самому реализовывать механизм вызова syscall, если добрые люди уже это сделали за тебя? Правильно, будем использовать готовое решение — SysWhispers (в этом посте будем говорить про его вторую версию). Стоит отметить, что помимо предоставления удобного интерфейса, с помощью которого можно вызывать syscall, SysWhispers также хеширует их.

Выглядит это так: вызываем функцию SW2_GetSyscallNumber, в которую передаем хеш необходимого syscall. В ответ функция возвращает номер системной функции, которую мы и вызываем с помощью инструкции syscall. Более подробно этот процесс показан на скриншоте 1 (на нем приведен пример вызова функции NtWriteVirtualMemory).

🧐 И вот теперь приходит исследователь, которому нужно это отреверсить. Как же ему понять, какой syscall используется?

Напрямую получить номер нужной системной функции мы не можем: он захеширован, поэтому придется что-то придумать. Можно написать скрипт, который будет реализовывать тот же алгоритм хеширования, что и SysWhispers (по сути, в нем используется XOR имени функции по случайному значению). Но можно пойти другим путем: с помощью механизма Appcall в IDA Pro (Appcall работает только в режиме отладки, поэтому с вредоносами лучше работать в виртуальной машине) напрямую вызвать SW2_GetSyscallNumber, передав ей хеш необходимой функции. Мы все также получим номер функции, но при этом процесс пройдет значительно быстрее.

Просто сравните — написать скрипт, который будет воссоздавать хеш-функцию, или одну строчку кода на Python:

syscall_id = idaapi.Appcall.SW2_GetSyscallNumber(hash).value


👋 Угу, номер syscall у нас есть, а что дальше, как узнать его имя?

Можем найти его по номеру в табличке, а можем обойтись без нее и податься в автоматизацию процесса. Как ранее было сказано, Appcall работает именно в режиме отладки, в этом режиме мы можем получить имена функций, определенных в различных модулях, загружаемых во время исполнения бинаря. Среди этих модулей самым интересным для нас является ntdll.dll: в нем находятся определения оберток над системными вызовами, которые имеют идентичные названия. По этим оберткам мы и получим имя системной функции.

Код скрипта, реализующего эту логику, представлен в публикации ниже. Основная идея заключается в том, что все функции-обертки над системными вызовами однотипны и выглядят примерно так, как показано на скриншоте 2. Перед вызовом инструкции syscall происходит передача номера нужной функции в регистр EAX (вторая инструкция). Мы можем взять вторую инструкцию функции-обертки, получить ее операнд — это и будет номер системного вызова. Далее остается сравнить его с тем, что ищем мы, и вывести результат (скриншот 3).

😮‍💨 Вот таким незамысловатым образом реверсер может облегчить себе жизнь, когда ему попадется вредонос с SysWhispers. Напоследок еще раз (на всякий случай) скажем, что представленный скрипт будет работать только в режиме отладки, поэтому, если речь заходит про анализ чего-то зловредного, то лучше делать это в виртуальной машине. Так что стоит отметить, что IDA работает со многими отладчиками, в нашем же случае все разрабатывалось и проверялось с использованием WinDbg.

#reverse #malware #tip
@ptescalator
04.04.202514:48
А вы знали, что злые люди не любят парсеры LNK-файлов? 👿

В марте мы писали об атаках XDSpy на российские организации. LNK-файлы, которые использовались в этой атаке, были модифицированы так, что при их обработке многие парсеры «падали». Например, это касается LECmd, LnkParse3 и ExifTool, который используется на VirusTotal (скриншот 1).

Разберемся, в чем кроется проблема и как ее исправить 🔧

В общих чертах структура LNK-файла выглядит следующим образом:

1. SHELL_LINK_HEADER с интересующим нас значением LinkFlags. Оно задает присутствие тех или иных структур в LNK-файле и выглядит так:

typedef struct
{
uint32 HasLinkTargetIDList : 1; // есть LINKTARGET_IDLIST
uint32 HasLinkInfo : 1; // есть LINKINFO
uint32 HasName : 1; // есть STRING_DATA
uint32 HasRelativePath : 1; // есть STRING_DATA
uint32 HasWorkingDir : 1; // есть STRING_DATA
uint32 HasArguments : 1; // есть STRING_DATA
uint32 HasIconLocation : 1; // есть STRING_DATA
uint32 IsUnicode : 1; // строки в UTF-16
// ... skipped
} LinkFlags;


2. [Optional] LINKTARGET_IDLIST.
3. [Optional] LINKINFO.
4. [Optional] STRING_DATA.

STRING_DATA — это массив структур StringData, каждая из которых имеет следующий формат:

CountCharacters (количество символов в строке, поэтому для юникода количество байт будет CountCharacters × 2).
String (строка, которая в соответствии с документацией MUST NOT be NULL-terminated).

Структура STRING_DATA содержит Description (Name), RelativePath, WorkingDir, Arguments и IconLocation в том порядке, который указан в LinkFlags.

🫱 Именно в CountCharacters и кроется проблема для парсеров, которые на него полагаются. Чтобы их «уронить» добрые дяденьки устанавливают большое значение в CountCharacters, например 0xFFFF. String делают длиной до 260 символов, а следующую StringData располагают ровно через 260 символов (в UTF-16 это 520 байт).

Как оказалось, Windows «под капотом» ограничивает длину строк Description, RelativePath и WorkingDir 260 символами. В итоге мы имеем следующее:

Парсеры «падают» из-за некорректных значений (считают смещение 0xFFFF и попадают на бессмысленные байты).

Windows ограничивается 260 символами, правильно попадая на следующую StringData, и запускает LNK-файл без проблем.

Ограничение в 260 символов точно подразумевается для Description, что было неочевидно, RelativePath и WorkingDir.

Для Arguments такого ограничения нет или порог сильно выше, что уже логично. При этом в свойствах LNK-файла при нажатии правой кнопкой будет отображаться только 260 первых символов команды.

Windows считает последний байт нулевым, даже если это не так, хотя из документации можно было предположить, что последний символ тоже учитывается.

🕵️‍♀️ В варианте LNK-файла от XDSpy атакующие «сломали» таким образом строку WorkingDir и установили ее значение в C:\Windows\System32\<пробелы> с длиной 260 символов (скриншот 2). Здесь можно посмотреть, как выглядит такой файл на VT (скриншот 3).

---- WorkingDir ----
0x0 CountCharacters (0XFFFF)
0x2 String (до 0x208) // C:\Windows\System32_______
---- Arguments ----
0x20A CountCharacters // Парсер Windows идет сюда
0x20C String // Arguments
...
0xFFFF RandomData // Обычные парсеры идут сюда


Чтобы исправить это недоразумение, нужно проверять размер CountCharacters для релевантных строк и ограничивать смещение до следующей StringData 260 символами с учетом флага isUnicode.

#tip #win
@ptescalator
14.04.202510:09
Большой браузер следит за тобой 👹

Группа киберразведки зафиксировала новую кампанию с использованием обновленного стилера Unicorn, начавшуюся в середине февраля и продолжающуюся по сей день. Целью атак является государственный сектор, а за их проведением стоит ранее не идентифицированная хакерская группировка.

Злоумышленники рассылают фишинговые письма с тематикой СВО, содержащие вложенные архивы с вредоносным HTA-файлом (скриншот 1). Этот файл содержит обфусцированный код и имеет название, совпадающее с темой письма. При его открытии запускается документ-приманка (скриншот 2), а вместе с ним — вредоносный код (посредством события window_OnLoad).

ВПО пытается мимикрировать под Яндекс Браузер. Вредоносный скрипт создает VBA-файлы по пути %USERPROFILE%\AppData\Local\YandexUpdate, добавляет полезную нагрузку в реестр HKCU\Software\YandexUpdate (скриншоты 3, 4), прописывает VBA-файлы в автозагрузку через реестр HKCU\Software\Microsoft\Windows\CurrentVersion\Run, а также регистрирует задания в планировщике с помощью schtasks.

🔤 Изначально злоумышленники использовали три скрипта:

log01.vbs — выполняет обход директорий пользователей, анализирует содержимое определенных папок и сохраняет файлы с заданными расширениями (.pdf, .txt, .doc, .docx, .rtf, .odt, .xls, .xlsx, .ods, .csv, .jpg, .png, .zip, .rar).
log02.vbs — похищает учетные данные из Telegram и браузеров (из Chrome, Edge, Opera, Яндекс Браузера).
log03.vbs — передает собранные данные на командный сервер.

👾 В последних атаках группировка модифицировала и расширила функциональность ВПО:

В crash_report.vbs (ранее — log01.vbs) увеличен список расширений файлов для сбора (.vsdx, .vdx, .7z, .tar, .jpeg, .cdr, .kmz, .kml, .aqe). Важно, что были добавлены расширения .kml и .kmz, используемые в военной топографии.
С помощью service_report.vba злоумышленники пытались получить список всех флеш-накопителей, но скрипт оказался нерабочим.
Добавлен механизм самозащиты: update_logging.vbs восстанавливает удаленные вредоносные файлы, подгружая их содержимое из реестра.

⚠️ Важно отметить, что VBA-скрипты не детектируются антивирусными решениями, так как считывают значения из реестра и запускают вредоносный код напрямую. Это усложняет процесс обнаружения (скриншот 5).

Анализ атаки указывает на развитие методики злоумышленников. Кроме того, стоит отметить, что группировка проявляет интерес к расширениям, связанным с картографией. Это может свидетельствовать о специфической цели или о стратегическом интересе в указанной области.

IoCs

Домен
vm-tiktok.org

Хеш-суммы
096c340e9a20476a191721e6eaeedcc2
0debff602f2912127c562839c7fcd3d7
e25042fba726356d7e88efe0608a4e36
290a4cff70029ca2a0095a3e3a8b19e7
65ef77db51277a046f76f21a59dee9e0
80bc350629a1ba59b2a19b9029feece5
d0f9fadbf157a8236b88cfc03f17a811
4feaa6c50348641799a8f56e76cd52e7


#TI #APT #Malware #Phishing
@ptescalator
🐾 По следам Puma: как обнаружить руткит через его же интерфейс

Сегодня в нашем обзоре технически интересный и многофункциональный руткит для Linux — Puma, недавно исследованный коллегами из Elastic Security Labs и Solar 4RAYS.

Puma представляет собой комплексный руткит уровня ядра (LKM), нацеленный на длительное скрытное пребывание в системе и кражу учетных данных для перемещения в инфраструктуре жертвы. Закрепляется в системе путем подмены штатного cron на модифицированный вредоносный аналог, состоящий из нескольких компонентов:

1️⃣ Загрузчик (wpn.bin) — отвечает за корректную установку модуля ядра.

2️⃣ Легитимный cron (tgt.bin) — обеспечивает исправную работу cron, чтобы жертва не заметила подмены.

3️⃣ LKM-модуль (audit) — основной компонент для перехвата системных вызовов и функций ядра Linux. Благодаря ему модуль эффективно скрывает процессы, файлы, директории и сетевые соединения, а также перехватывает чувствительную информацию, такую как учетные данные и криптографические ключи.

4️⃣ Бэкдор (libs.so) — обеспечивает связь с C2-сервером, получение команд от злоумышленников и передачу результатов.

🎯 Любопытная деталь

Помимо стандартного удаленного управления через C2-сервер в Puma используется и локальное, реализованное через переопределенный системный вызов rmdir: при наличии определенных аргументов руткит интерпретирует вызов как команду и возвращает инициировавшему процессу результат выполнения. Так, бэкдор использует этот механизм, чтобы запросить у модуля конфигурацию удаленного сервера или отобразить перехваченные конфиденциальные данные.

🔎 Что нам удалось обнаружить

Анализируя Puma, мы выявили в LKM-модуле важную уязвимость: он не проверяет, какой именно процесс вызывает переопределенный rmdir для выполнения команд. Таким образом, вызвав rmdir с определенными аргументами, можно однозначно определить присутствие руткита в системе.

📌 Почему это важно

Уязвимость трудноустранима: злоумышленники, используя возможности бэкдора, могут обновлять лишь его код, но не код загруженного в систему модуля ядра. Для этого потребуется значительно больше усилий. Таким образом, уязвимость можно использовать для быстрого детекта Puma в инфраструктуре.

🐍 Для удобства мы написали небольшой Python-скрипт, который поможет вам определить руткит в системе:

import ctypes


Не самый типичный случай — когда уязвимость играет не против защитника, а ему на руку. Такое бывает нечасто, но именно это дает возможность для точного детекта.

⚠️ Если вы обнаружили Puma, то в инфраструктуре почти наверняка есть и другое ВПО. Обязательно обратитесь за помощью к специалистам по реагированию на инциденты информационной безопасности.

#TI #detect #malware #linux
@ptescalator
26.03.202510:39
Mmaallwwaarree iinn ooppeennssoouurrccee!

В сети развивается примечательная кампания одного исследователя. Ему принадлежат следующие пакеты:

Пользователь lastbright:
🟢yyttt
🟢bbllaacckkwwoollff
🟢bbllaacckkwwoollff-6ad8f762-1a91-45d7-a9c5-356bd858356a
🟢bbllaacckkwwoollff6ad8f762
🟢bbllaacckkwwoollff6ad8f751
🟢bbllaacckkwwoollff6ad8f752
🟢bbllaacckkwwoollff6ad8f753
Пользователь lifeyi2253:
🟢f2d5cfdc642c3d4
🟢f2d5cfdc642c3d5

Нагрузка отрабатывает в момент установки пакета.

Интересно в реальном времени наблюдать, как развивается кампания:

🔤 PoC с комментариями на китайском. Вероятно, тут приложил руку LLM-ассистент (скриншот 1, библиотека yyttt 0.1).

🔤 Результат работы Unix-команды id отправляется на удаленный сервер (скриншот 2, bbllaacckkwwoollff 0.1, 0.2).

🔤 Выполняется код, полученный с C2-сервера (скриншот 3, bbllaacckkwwoollff 0.3, 0.4, bbllaacckkwwoollff-6ad8f762-1a91-45d7-a9c5-356bd858356a 0.1).

🔤 Почему бы не прихватить листинг интересных директорий (/opt/, /run/), переменные окружения и прочую радость (скриншот 4, bbllaacckkwwoollff6ad8f753 0.1)?

🔤 Нет, так много не надо, из директорий достаточно /etc/ (скриншот 5, f2d5cfdc642c3d5 0.1).

На хосте либо на виртуалке для тестов злоумышленник использует имя пользователя mind, о чем говорит путь /home/mind/configuration/config.py в четвертой итерации (скриншот 4).

Примечателен принцип именования пакетов. Кроме того, всегда интересно следить, как в режиме реального времени злоумышленник борется с тем, что его пакеты удаляют по репортам 😈

В информационной безопасности есть термин «пирамида боли» (The Pyramid of Pain) — он описывает сложность ухода от обнаружения. Так вот, в рамках кампании злоумышленник использует один и тот же уникальный файл __init__.py, представленный на скриншоте 6. Система PT PyAnalysis легко это подсвечивает 😑

Опасайтесь всяких волков.
#ti #scs #pyanalysis
@ptescalator
02.04.202511:45
Код скрипта:

import idaapi


@ptescalator
Реально тонкое взаимодействие 🕊

В ходе реверс-инжиниринга протокола одного из бразильских банковских троянов обнаружилось использование интересного сетевого фреймворка — RealThinClient. Процесс общения между клиентом и сервером в этом фреймворке построен на сериализации структур вызова функции в строковый формат и их последующей десериализации на другой стороне. Это делает RTC не только мощным инструментом разработки, но и удобной платформой для скрытого обмена командами — например, в случае малварного поведения.

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

Перейдем сразу к примеру и на нем разберемся в логике работы инструмента. Клиент хочет залогиниться на сервере и отправляет запрос, как на скриншоте.

Что здесь происходит

1. Клиент формирует запрос:

Устанавливает параметр FC (function call) в значение Login.

Добавляет параметры: логин, пароль и id. Они передаются в виде структуры-словаря RE=3 (record), содержащей ключи user, pwd, id и т. п. В user можно передать зашифрованный малварный запрос. RE обозначает тип rtc_Record — это структура вида «ключ:значение», аналогичная словарю или JSON-объекту.

• На стороне Delphi это будет примерно так:

with FunctionCall.Param do
begin
asText['user'] := '...'; // rtc_Text
asText['pwd'] := ''; // rtc_Text
asString['id'] := '8DF313279CD34B81A3FB438708B4E8F1'; // rtc_String
end;


А при сериализации все это превратится в следующее:

RE=3;
user:T=...;
pwd:T=...;
id:S=...


📁 Когда мы вызываем удаленную функцию через RTC SDK, мы создаем объект TRtcFunctionInfo — это класс, который описывает удаленную вызываемую функцию, ее имя, параметры и результат выполнения. Он используется как на клиенте (для упаковки вызова), так и на сервере (для распаковки и выполнения). Объект TRtcFunctionInfo упаковывается в контейнер TRtcValue и сериализуется в строку или поток байтов.

TRtcValue может хранить любой поддерживаемый тип данных: строку, число, массив, запись, дату, вложенную функцию и т. п. Фактически он используется везде, где нужно передать или получить данные по сети, например в параметрах удаленной функции (Param.asValue[...]) или результатах выполнения функций (Result.asValue). Это делает его гибким, но и потенциально непрозрачным, что хорошо для скрытой передачи команд, особенно если используются вложенные структуры типа rtc_Function.

Перед отправкой запроса клиент регистрирует хендлер OnLoginResult для обработки результата выполнения функции на сервере.

2. Запрос отправляется на сервер RTC:

Сервер принимает HTTP-запрос и интерпретирует параметр FC как указание на то, какую функцию нужно вызвать.

На стороне сервера вызывается обработчик для функции Login. Выполняется Delphi-процедура, связанная с этим именем.

3. Сервер отвечает:

Результат функции возвращается клиенту, и он вызывает свой хендлер OnLoginResult для обработки полученного ответа.

Ответ сервера десериализуется обратно в TRtcValue, чтобы мы смогли снова получить доступ к его структуре. Сервер может вернуть не просто данные, а вложенный вызов функции. Это структура, поле в которой содержит rtc_Function, rtc_Record или rtc_Array, которые клиент десериализует и выполняет.

Например:

if xData.isType = rtc_Record then
ExecuteRec(xData.asRecord)
else if xData.isType = rtc_Array then
ExecuteArr(xData.asArray)


👾 Это может успешно использоваться в малвари: сервер возвращает зашифрованное описание команды, которую клиент должен выполнить. Таким образом, в легитимный RTC-поток можно прятать вполне себе вредоносное поведение.

#reverse #hacktool
@ptescalator
Войдите, чтобы разблокировать больше функциональности.