Пишем нерезидентный RunPE лоадер на C++

Тема в разделе "Разное", создана пользователем ims0rry, 12 дек 2017.

  1. ims0rry

    ims0rry

    Сообщения:
    122
    Баллы:
    18
    А прежде чем приступить к прочтению - загляни в мой бложик, там я публикую свои авторские статьи по программированию, вирусологии и прочим интересным вещам
    Скрытый контент.
    https://t.me/ims0rryblog
    Нажмите, чтобы раскрыть...​


    Оригинал статьи -
    Скрытый контент.
    http://telegra.ph/Pishem-nerezidentnyj-RunPE-loader-na-C-12-12
    Нажмите, чтобы раскрыть...​


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


    Резидентная
    Эта версия в 100% случаев имеет какую-либо ПУ/Админку, после запуска -закрепляется в системе и удаленно получает команды на выполнение.
    Скрытый контент.
    В пример приведу свое творение, https://darkwebs.ws/threads/41806/.
    Нажмите, чтобы раскрыть...​



    Нерезидентная
    Данная версия чаще всего не имеет панели управления, но есть продукты, которые ее предоставляют. После запуска - выполняет все задания, которые предустановлены в лоадере, либо получены из админ-панели, затирает все свои файлы и самоудаляется.
    Скрытый контент.
    Ярким примером является продукт @foxovsky - http://miped.ru/f/threads/arkei-stealer-non-resident-loader.56575/.
    Нажмите, чтобы раскрыть...​



    В этой статье я хочу рассмотреть пример одной из функций нерезидентного лоадера: загрузка и запуск файла в памяти (средствами RunPe).


    Архитектура
    Для начала, нужно продумать алгоритм работы лоадера. В идеале, с сервера должен подгружаться не файл в чистом виде (иначе его сразу задетектит антивирус), а зашифрованный бинарник, который, впоследствии, будет расшифрован лоадером. Т.е. нужен отдельный энкодер.
    Далее, необходим какой-нибудь RunPe, функция скачивания файла и его дешифровка.

    Алгоритм получится, примерно, такой:
    Скачивание файла -> Дешифровка -> Запуск в памяти



    Encoder
    Особо сильно заморачиваться с энкодером не нужно, можно написать обычное вычитание байт из оригинального значения:
    https://image.prntscr.com/image/l7iUCt1VR6aViT0OPVb4hg.png
    Открываем файл, считываем его в unsigned char *, далее, вычитаем 0x56 из каждого значения массива, получившееся записываем в файл out.exe, пробуем таким же методом дешифровать и записываем дешифрованный файл в decrypted.exe.


    Loader
    Начнем по порядку алгоритма:
    https://image.prntscr.com/image/wogFJ-CEQYOQWbQsic1HKA.png
    Скачивание файла реализуем средствами URLMON, важный момент, преобразование char * в LPCWSTR, без этого файл будет качаться рядом с лоадером с непонятным названием (проблемы кодировки).
    https://image.prntscr.com/image/grFTyEeNSLixO4_pN_xyag.png
    Далее пишем метод дешифровки и запуска файла. Открываем файл, считываем его и отнимаем ключ от изначального значения массива в цикле, после чего запускаем полученный массив байт в памяти (метод RunPe можно найти в интернете, для особо ленивых выложу в сорцах).

    Метод Main будет выглядеть следующим образом:
    https://image.prntscr.com/image/383UoeCSTeaNWC5zwbBHbA.png
    Качаем файл в %temp%\pld.exe. Передаем в параметры DecryptAndRun полный путь до файла и значение, которое мы использовали в энкодере (0x56).
    Также, сюда можно прикрутить паунс всех файлов в корзину, но оставлю это на вас.



    Ссылки
    Scantime - http://viruscheckmate.com/id/BW8mQjZE15mx
    Исходники - https://github.com/ims0rry/Non-resident-RunPE-Loader
  2. Arbyzik

    Arbyzik

    Сообщения:
    67
    Баллы:
    6
    Ооо, дааа! Гайды...
    Спасибо, ты лучший!!!

    С наступающим)

Поделиться этой страницей

Top