Вне зависимости от способа доставки бэкдора, после получения ответа от С2-сервера в памяти процесса будет находиться зашифрованная полезная нагрузка. После ее расшифровки и успешной проверки аутентификационного кода агент выполняет рефлективную загрузку модуля и вызов его экспортируемой функции, передавая в качестве аргумента ранее извлеченные конфигурационные данные, а также адреса уже разрешенных функций, необходимых для дальнейшей работы.
В процессе инициализации Loki формирует стартовое сообщение, предназначенное для отправки на управляющий сервер. Это сообщение содержит фиксированное magic-значение 01 00 01 00 00 00 и шифруется с использованием того же алгоритма и ключа, что и в загрузчике. Способ передачи данных (GET или POST) также определяется жестко заданным в коде параметром и не зависит от содержимого конфигурации.
Получив ответ от управляющего сервера и успешно расшифровав его, бэкдор приступает к его обработке. Здесь следует отметить, что ответ C2-сервера может содержать более одной команды, — в этом случае каждая команда обрабатывается последовательно до их исчерпания.
Функциональность обновленного Loki не была изменена в сравнении с его первой версией, что было отмечено в разборе.
Перечень поддерживаемых бэкдором команд
Результаты выполнения команд передаются на C2-сервер в виде структурированных сообщений. Для сообщений об успешном выполнении используется статус 0x04, тогда как при ошибках выполнения применяется значение 0x05. Помимо статуса, сообщения содержат фиксированное значение 0x01, предположительно используемое в качестве идентификатора версии бэкдора, а также код выполненной команды.
Опционально сообщение о выполненной команде может содержать дополнительные поля, в частности подтип выполненной команды, определяющий вариант ее обработки, внутренний код ошибки и значение LastError. Если команда выполнена успешно, к сообщению также добавляются данные, содержащие результат ее выполнения, если его передача предусмотрена.