Мы уже рассказывали, как написать троян на Python. Сегодня покажу, как написать вирус-загрузчик Trojan.DownLoader. Мы напишем вирус-downloader для загрузки вредоносной DLL и получения удаленной сессии с Kali Linux.
Еще по теме: Создание ботнета с помощью Koadic
Что такое вирус-загрузчик Trojan.DownLoader
Вирус-загрузчик (Вирус Downloader или Trojan.DownLoader) — это тип вредоносного ПО, которое используется злоумышленниками для получения несанкционированного доступа к компьютерной системе жертвы. Основная цель вредоносной программы — загрузка установка основного вредоносного ПО.
После заражения вирусом-загрузчиком, малварь скачивает и запускает вредоносную программу на компьютере. Как правило вирус-загрузчик маскируется под обычную программу. Давайте рассмотрим код Trojan.DownLoader.
Статья в образовательных целях и предназначена для обучения этичных хакеров. Заражение чужих устройств является незаконным! При написании статьи использовались личные устройства автора. Ни редакция spy-soft.net, ни автор не несут ответственности за ваши действия.
Как написать вирус-загрузчик Trojan.DownLoader
Вот код на C++, демонстрирующий технику инжекта DLL, которая представляет собой метод, используемый для выполнения произвольного кода в контексте другого процесса. В этом коде злоумышленник сначала загружает DLL-файл с удаленного сервера, а затем внедряет его в память целевого процесса (в данном случае notepad.exe).
app.cpp
Код app.cpp полностью на Gist.
Вот краткий обзор того, что делает код:
- Включает в себя несколько файлов, такие как windows.h, iostream и tlhelp32.h.
- Определяет функцию getPIDbyProcName(), которая принимает имя процесса в качестве аргумента и возвращает идентификатор процесса (PID) первого процесса с таким именем.
- Определяет переменную с именем dllpath, указывающую место, где будет храниться загруженная DLL.
- В функции main() код вызывает функцию getPIDbyProcName(), чтобы получить PID процесса notepad.exe.
- Вызывает другую функцию, называемую downloadFile(), для загрузки DLL-файла с удаленного сервера и его сохранения в месте, указанном в dllpath.
- Открывает дескриптор целевого процесса с помощью функции OpenProcess() и выделяет память в целевом процессе с помощью функции VirtualAllocEx() для хранения полного пути к DLL.
- Записывает полный путь DLL в выделенную память с помощью функции WriteProcessMemory().
- Получает адрес функции LoadLibraryA в kernel32.dll с помощью функции GetProcAddress().
- Создает удаленный поток в целевом процессе с помощью функции CreateRemoteThread() и передает в качестве аргументов адрес функции LoadLibraryA и адрес пути DLL в целевом процессе.
- Ожидает завершения выполнения удаленного потока с помощью функции WaitForSingleObject().
- Закрывает дескриптор удаленного потока, освобождает выделенную память с помощью функции VirtualFreeEx() и закрывает дескриптор целевого процесса.
В целом этот код демонстрирует, как злоумышленник может использовать внедрение DLL для выполнения произвольного кода в контексте другого процесса. Важно отметить, что этот метод может использоваться как в законных целях (таких как отладка), так и в злонамеренных целях (таких как кража данных и запуск программ-вымогателей).
download.h
Код download.h полностью на Gist.
Это функция C++, называемая downloadFileпринимает два аргумента — адрес и путь к локальному файлу — и возвращает логическое значение, указывающее, была ли загрузка успешной или нет.
Функция использует библиотеку WinINet для загрузки файла с заданного адреса и сохранения файла по указанному локальному пути. Библиотека WinINet предоставляет набор функций для доступа к ресурсам в Интернете, включая загрузку файлов по протоколам HTTP и FTP.
Сначала функция создает сеанс связи, вызывая InternetOpen() с юзер-агентом «Mozilla/5.0». Затем открывает указанный адрес с помощью InternetOpenUrl() и возвращает дескриптор открытого файла. Если функции не удается открыть урл, возвращает значение false.
Затем функция создает новый файл в режиме записи с помощью CreateFile() и возвращает дескриптор только что созданного файла. Если функции не удается создать файл, возвращает значение false.
Затем функция считывает содержимое удаленного файла порциями по 4096 байт с помощью InternetReadFile() и записывает их в локальный файл с помощью WriteFile(). Если во время загрузки возникают ошибки, функция останавливает цикл (false).
Наконец, функция закрывает дескрипторы открытого файла и интернет-сеанса.
dll
Этот код представляет собой шелл-код Windows x64, который выполняет полезную нагрузку, закодированную в шестнадцатеричном формате и сохраненную в виде массива байтов в переменной, называемой payload.
Payload содержит инструкции машинного кода, которые выполняют ряд операций, включая загрузку значений в регистры, манипулирование данными и вызов системных функций. Точное поведение payload зависит от конкретных инструкций, содержащихся в ней, но в целом она предназначена для выполнения вредоносного действия в системе, в которой она запущена.
Функция Go — это точка входа шеллкода, и она начинается с резервирования и выделения памяти для полезной нагрузки с помощью функции VirtualAlloc. Затем копирует полезную нагрузку в выделенную память с помощью функции RtlMoveMemory и устанавливает защиту памяти для разрешения выполнения с помощью функции VirtualProtect.
Наконец, создает новый поток для выполнения полезной нагрузки с помощью функции CreateThread. Параметр LPTHREAD_START_ROUTINE этой функции приводится к указателю на выделенную память, что заставляет поток выполнять хранящийся там шеллкод.
Вирус-Downloader в действии
Запускаем HTTP-сервер Python на Kali Linux, на котором размещен наш вредоносный DLL.
Запускаем малварь, но для начала необходимо открыть блокнот, чтобы внедрить в него вредоносный процесс DLL.
А теперь EXE.
И получаем сессию и шелл.
Заключение
Это все, что касается этой вредоносной техники, я надеюсь, она вам понравится и вы будете использовать ее для внедрения шелл-кода в процесс с помощью инъекции DLL.
ПОЛЕЗНЫЕ ССЫЛКИ: