Малварь как искусство Модификация кода. Часть три. Дополнение.

Тема в разделе "Технологии создания невидимой малвари", создана пользователем X-Shar, 12 ноя 2017.

↑ ↓
  1. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.431
    Симпатии:
    57
    Пол:
    Мужской
    Репа:
    +682 / 163 / -34
    Последняя наверное часть.

    Просто немного сказать, о чём не сказал.

    Предыдущие части тут:

    Малварь как искусство - Самомодификация и генерация кода на лету в си. Часть 1. Вкуриваем суть.

    Малварь как искусство - Генерация кода на си. Часть вторая. Исполняем код на лету

    Вообще этим можно таких дел наворотить. Dmeh-Smeh-Smeh!!!big010101sm3888

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

    Да-что там антивирус, даже реверсер в ахересе будет. :)

    Правда у способа есть минусы:

    1. Очень-уж сложная реализация, нужно-будет посидеть покодить если программа большая.

    2. Также размер ваших программ тоже может разрастись.

    Ну и последнее, вот ещё старый и рабочий способ поменять несколько байт в вашем процессе, при помощи WriteProcessMemory (если не установлены флаги защиты).

    Первое, что нужно сделать для этого – получить доступ к загруженному в память процессу, при помощи функции OpenProcess с атрибутами доступа PROCESS_VM_OPERATION и PROCESS_VM_WRITE.

    Вот пример, рабочий:
    Код:
    #include "stdafx.h"
    #include "stdio.h"
    #include "string.h"
    #include "windows.h"

    int WriteMe(void *addrint wb)
    {
       
    HANDLE
           h 
    OpenProcess(PROCESS_VM_OPERATION |
           
    PROCESS_VM_WRITE,
           
    trueGetCurrentProcessId());
       return 
    WriteProcessMemory(haddr, &wb1NULL);
    }
    int main(int argccharargv[])
    {
       
    _asm {
           
    push 0x74JMP >> JZ
               push offset Here
               call WriteMe
               add esp
    8
           Here
    JMP short Here
       
    }

       
    printf("Hello i am virus ! :)");
     
       while (
    1);
       return 
    0;
    }
    Получаем:

    upload_2017-11-12_12-22-41.

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

    Здорово, да?

    В общем способы интересные. :)
     
  2. Indy Уважаемый пользователь
    Indy
    Ответить в чате

    Форумчанин

    Регистрация:
    21.01.2015
    Сообщения:
    274
    Симпатии:
    161
    Пол:
    Мужской
    Репа:
    +206 / 7 / -34
    X-Shar,

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

    Идея отличная, это анклав. Реалация упирается во многие проблемы, которые очень сложно решаются. Из всех этих проблем главная - передача указателя в иной мод(км). Так как такие имплементации основаны на выборке данных из текущего мода, а выборка из более привилегед мода не доступна, то декрипт памяти этим обычным путём невозможен.
    Всякая передача указателя в км приведёт к крэшу. К примеру передаётся указатель в ядерный сервис на строку для вывода хеловорда, а эта память криптована или вообще не существует - результатом будет ошибка.
    Есть два пути решения: анклав для кода, так как к нему нет обращений из км, но для этого необходима особая структура модуля, где секция кода содержит только код и не имеет констант. Либо очень сложный путь решения, создание сервисных прототипов и подмена указателей. Во втором случае реализация становится слишком сложной.
     
  3. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.431
    Симпатии:
    57
    Пол:
    Мужской
    Репа:
    +682 / 163 / -34
    Всё упирается в ресурсы, в т.ч. и людские. Если это какая-то серьёзная малварь или направленная атака, то способ более-чем актуален, т.к. если работать в команде, относительно быстро это можно реализовать.

    Я уже не говорю, что вон последние исследования вирусов показали, что есть вирусы, которые вообще точат под определённое оборудование. Тот-же сименс например, а это даже ещё и сложнее. :)

    Если говорить про малварь, аля спамерное письмо бухгалтеру и шифрование с требованием выкупа. А таких сейчас наверное около 90%.

    То им нахрен не нужны такие технологии, им проще использовать какой-нить скрипт или легальный софт для атак (Типо RMS, WinRar и т.д. ).

    Ну а действительно, сейчас нужно минимальными знаниями обладать, что-бы закодить тот-же стилер например на С#. Про RMS, так-вообще, делают эти сборки кому не лень.

    Я это к тому-что, к сожалению обсуждать тематику перестали, причём давно.

    Я ведь незря эти темы тут создал, темы на самом деле не новые и простецкие, ну какая проблема скопировать функцию на си ? Да и сама идея давно обсуждалась, да например в старых статьях у того-же Криса.

    Мне было интересно, ответить-ли кто по этим темам. Но так практически никто и не ответил. :(

    Я это к тому, что развитие системного программирования вижу в небольших-то и отраслях. Это либо в разработке операционок реального времени, отрасль сейчас так-сказать в топе. Либо в создании конкретного софта для оборудования.

    Всё остальное к сожалению ведёт к постепенному ограничению программиста. Вот например та-же новая студия не даёт копирование памяти и т.д. Тот-же трушный memcpy, вы не сделаете, студия даже не соберёт проект.

    Всё скоро дойдёт, что программист будет делать только примитив, в виде условных операторов, циклов и т.д.

    На самом-деле на западе уже давно такая тенденция идёт, есть "кодировщики", которые просто переводят в код, то-что им сказали, не вникая в суть.

    Хоть всё-сказанное мало относится к VX. Но всё-же как-то мало приятного, раньше считалось что программист/разработчик всё-же творческая профессия, сейчас-же это постепенно всё сводится к обезьяней рутине, не более того. :(