Интересно как сейчас аверы реагируют на крипторы ?
Немножко для тех-кто в "танке":
1)Конструктор(Bulder) – Будет криптовать наш вирус, запихивать его в конец стаба, в общем-то и вся задача конструктора, имеет как-правило GUI - интерфейс, для упрощения создания "обработанного вируса"!
2)Стаб(Stub) – Это наши «Мозги», он расшифровывает вирус и запускает его в памяти. Часто в стабе реализованны различные приёмы антиотладки, антиэмуляции. В идеале хорошо, если в каждом новом билде "обработанного вируса" был-бы изменённый стаб.
Сделать это можно, например если в креаторе использовать "Генератор мусора - В стаб добавляются не влияющие на исполнение и поведение программы инструкции, либо генерируется немного изменённый код стаба в каждом билде".
Ещё рекомендую прочесть, кто в "танке":Ещё раз про джойнеры, крипторы, стабы и прочую хрень
А теперь основная часть поста:
Кто-нить знает, что будет, если сделать так, методология простого криптора:
Берём вирус, который детектят 64/64, далее конструктором (Тупо форма или консоль) считываем его как массив байт кодов, получится массив байт, далее шифруем его, пусть простой алгос шифрования (Например XOR) c ключом А.
Ключь А - Это у нас будет результат какой-то функции, ну или например можно сделать алгоритм получения нашего ключа в стабе (Пример ниже по тексту).
Далее это всё дело запихиваем в стаб, либо ниже стаба, либо в ресурсы, даже незнаю что лучше ?
Далее если идёт запуск стаба, мы проверяем следующее:
1) Запустил-ли юзер вирус, или используется виртуалка:
Сделать это можно например так (самое простое), например поставить хук на клавиатуру и в бесконечном цикле ждать пока кто-то не нажмёт клавишу, или не шивильнёт мышку, или не нажмёт на клавишу мышки, если событие произошло, значит мы не-под виртуалкой, идём в шаг 2)
2)Шаг два нужно получить наш ключ расшифровки, как это сделать ?
Самое простое, написать простую функцию например, то-что делается выше, если мы под виртуалкой аверов, то будем генерировать число 0xAA, а если мы не под виртуалкой, то сгенерим 0x55 (0x55 и будет наш ключ расшифровки).
Можно в качестве ключа использовать значение какой-то API, главное что-бы не было заметно что-это ключ ! :)
3)Третий шаг, считываем из ресурсов, или то-что ниже стаба, наш шифрованный массив байт.
4)Четвёртый шаг, расшифровываем его, с тем-же ключом (XOR обратный алгос шифрование, что-бы расшифровать, нужно проделать то-же, что и при шифровании с тем-же ключом :)).
5)Далее самое интересное и сложное, нужно запустить вирус в памяти, есть уже готовые функции и методы, на разных языках, но смысл везде примерно такой:
Нужно "порадить новый процесс", как это сделать:
- Например при помощи API - винды CreateProcess, создать процесс;
- Выделить для него память, при помощи VirtualAllocEx;
- Записываем наш расшифрованный вирус (Расшифрованный массив байт) в выделенную область памяти при помощи WriteProcessMemory.
- Далее нужно установить контектс потока, при помощи SetThreadContext и запустить его при помощи ResumeThread.
Вообще это всё реализовано, практически в любом исходнике криптора, пример тут
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
или на хабре даже есть:
Вы должны зарегистрироваться, чтобы увидеть внешние ссылки
Или у нас на Делфи:ВАЖНО - Делаем криптор вместе
Вот вам и алгоритм простого криптора, НО без антиэмуляции, в качестве антиэмуляции тут "Проверка на запуск под виртуальной машины АВ, и-то примитив", понятно что для уменьшения детекта, процедуру расшифровки и запуска в памяти нужно как-то маскировать, что-бы антивирусный сканер до неё не добрался ! :)
Кто-нить использовал это, как современные антивирусы реагируют на такое ?
Если не будет лень и время, то следующая часть реализация этого всего на Visual C++, плюс продумать методы антиэмуляции и генерации ключа, отписывайтесь если есть что сказать ? :)