Что такое криптор и стаб ?
< Что такое фаззинг? 06.12.2016 00:55 Давность: 2 yrs
Категория: Безопасность
Криптор (aka cryptor) — это тулза, которая предназначена для скрытия троянов, ботов и прочей нечисти от детектирования антивирусами.
Хорошие крипторы работают очень просто, быстро и надёжно, хоть и не безглючно. Они дописывают свой код (в контексте таких крипторов этот код называется стабом) в криптуемую программу и шифруют код самой программы. При запуске первым стартует стаб, он восстанавливает оригинальный код и программа начинает работать. Если криптор свежий (или просто хороший, об этом ниже), то закриптованная программа не будет детектироваться антивирусами.
Чаще всего такие крипторы полиморфны — т.е. код криптора в криптуемой программе каждый раз уникален, заполнен случайными инструкциями и бессмысленными вызовами функций API. Такие крипторы достаточно долго остаются недетектируемыми в силу уникальности каждого закриптованного файла. Такие крипторы тоже со временем детектируются, и если автор не чистит свой продукт, то криптор перестает быть уникальным.
Суть работы плохих крипторов вот в чем — есть стаб. Стаб в этом случае — это отдельная программа, к которой цепляется криптуемый файл. При запуске файл извлекается, расшифровывается и запускается.
Т.е. надеюсь поняли отличия в первом случае шифруется код программы, и стаб расшифровывает уже команды программы, а во втором случае шифруется сам файл программы и расшифровывается тоже сам файл, ну и понятно, что второй тип криптора это не что иное как ерунда, т.к. практически любой антивирусник спалит вирус при расшифровке ! 😉
Некоторые крипторы напрямую файл на диск не пишут, а запускают его из памяти, но это их не оправдывает, т.к. продвинутый антивирус словит это при запуске.
В таких крипторах уникальность каждого закриптованного файла достигается разными стабами. Но такой подход весьма ограничен — в хороших криптах это всего-лишь код, и его можно сгенерировать, а со стабами в плохих крипторах уже сложнее, поэтому авторы чаще всего создают под каждого клиента отдельный стаб. Подход глуп до безобразия, ведь ежели спалится антивирусами один закриптованный файл — за ним полетят и все остальные.
itmama.ru
Ну, антивирус, погоди! Создаем EXE-криптор на Python’е
Содержание статьи
Web мы спасли от антивирусов несколько месяцев назад. Это было нетрудно — область относительно новая, не освоенная. С исполнимыми же файлами антивирусы борются уже десятилетиями. Побороть EXE-модуль будет сложнее, но… мы справимся :).
Выпуск 1. Ознакомительный
Ты уже знаешь, что я считаю антивирусы абсолютно бесполезными — хотя бы по той причине, что они помогают только от самых примитивных зверьков, которые в условиях современного денежного малварьбизнеса встречаются не так часто. Современные злокодеры, подогретые денежными вливаниями, научились программировать довольно жестко, но есть у них одна маленькая проблема — криптовка — достаточно сложная штука, для написания которой нужны глубокие знания PE-формата, ассемблера и системного программирования. Из-за высокого «входного барьера» в этой области мало профессионалов.
И найти хорошего криптора ой как сложно.
Но решение проблемы есть! Как мы знаем, антивирусные компании обмениваются технической информацией и создают специальные ресурсы, посредством которых мы сами отсылаем им сэмплы (типа VirusTotal’а). Но ведь и вирмейкеры тоже могут обмениваться информацией! Необязательно палить приватные мазы — публичные технологии тоже сгодятся. Например, было бы круто, если бы в каком-то одном месте лежали функции для генерации PE-файла, генерации импорта, шифрования ресурсов, рабочие функции определения SandBox’ов, тогда мы могли бы создавать крипторы так же непринужденно, как домики из кубиков Лего.
Идеальным местом для обмена, наверное, будет GitHub, и туда я залью исходники написанного нами сегодня криптора — он будет доступен по адресу http://github.com/presidentua/ExePacker.
Кроме того, в решении проблемы здорово помогло бы использование высокоуровневых языков программирования. В паблике сейчас валяются исходники крипторов на С++ или VisualBasic’е, но ведь от этого проще не становится, поскольку разобраться в написанном коде — ой как непросто. На Python’е все выглядит в разы лучше, поэтому именно его мы сегодня и будем использовать. В общем, заложим фундамент этой благородной миссии. Присоединяйся!
Выпуск 2. PE-файл
Структура PE-файла довольно сложная, поэтому подробная документация будет ждать тебя на диске, а здесь я представлю твоему вниманию лишь избранные моменты.
PE-файл представляет набор разных служебных структур, связанных между собой, и набор данных, которые размещены в секторах. Загрузчик Windows’a читает структуры, обрабатывает их (например, импортирует DLL’ки) и потом передает управление на инструкцию, указанную в поле «Entry Point».
Теперь посмотрим, что же нужно нам сделать, чтобы изменить файл и при этом не испортить его.
Выпуск 3. Теоретический криптор
Для начала выберем файл, который будет у нас исполнять функции лабораторной мыши. Чтобы сделать приятное Андрюшку :), мы, пожалуй, будем издеваться над Putty.exe. Упрощенно его структура будет выглядеть так:
- Служебные данные
- Первая кодовая секция
- Другие секции с данными
Алгоритм криптора следующий. Создать две ассемблерные программы. Первая будет косить под обычную прогу и проверять, что мы не в эмуляторе, а потом передаст управление на вторую программу. Вторая же восстановит оригинальную структуру файла и передаст управление на оригинальную точку входа Putty. И записать эти программы в файл.
В результате получится следующая структура:
- Служебные данные
- Первая кодовая секция
- Наша первая программа, которая передаст управление на 4.2
- Шифрованный код первой секции
- Другие секции с данными
- Добавленная секция
- Часть кодовой секции, перезаписанной программой 2.1
- Вторая программа, которая оригинальный код из 4.1 поместит на 2.1, а потом расшифрует кодовую секцию и передаст на нее управление.
Выпуск 4. Практический криптор
Ну наконец-то мы добрались до сердца нашей статьи. Для работы криптора нам понадобится модуль pefile (будем использовать несколько модифицированную версию), и с помощью либы откроем Putty:
import pefile
pe = pefile.PE("putty.exe")
Теперь, если ты напишешь «print pe», то увидишь подробную инфу обо всех характеристиках файла, по этой инфе я советую искать нужные для изменения поля в файле. А о внутренней работе модуля обязательно прочитай во врезке. Теперь немного математики. У нас будут две программы, которые нужно внедрить в файл. Они будут занимать где-то по 512 байт каждая максимум. Поэтому для размещения добавим новую секцию в 1024 килобайт вызовом:
pe.add_last_section(size=1024)
Закриптуем первую секцию XOR’ом с ключом «1»:
pe.sections[0].xor_data(code=1)
Магия, правда? :). А теперь прикинь, что все это пришлось бы писать на С++!
Поскольку в начале программы будет наш код, то сохраним оригинальный код, скопировав его в последнюю секцию. Адрес первой секции в файле находится в переменной — pe.sections[0]. PointerToRawData, а последней, соответственно — в pe.sections[-1].PointerToRawData:
pe.data_copy(pe.sections[0].PointerToRawData, pe.sections[-1].PointerToRawData, 512)
Оригинальный код сохранен, и мы приступим к написанию первой программы. Конечно же, писать мы ее будем на ассемблере, используя FASM для компиляции. Создадим файлик pack.tpl.asm с содержанием:
use32
mov eax, {{ go }}
jmp eax
Ты, наверное, уже догадался, что это не готовый исходник, это лишь шаблон для шаблонизатора из TornadoWeb, а его мы уже отлично знаем, ведь именно его мы использовали при написании HTML-морфера. Сгенерируем первую программу:
asm = Template(open("pack.tpl.asm", "r").read()).generate(
go=pe.OPTIONAL_HEADER.ImageBase + pe.sections[-1].VirtualAddress+512,
)
with open("pack.asm", "w") as f:
f.write(asm)
os.system(r"c:fasmwFASM.EXE pack.asm")
В переменной go мы передаем адрес в памяти, где будет наша вторая программа — то есть, в последней секции, начиная с 512 байта. А в последней строчке компилим результат на FASM’е. Теперь запишем получившийся код в начало первой секции:
new_pack = open("pack.bin", "rb").read()
pe.data_replace(offset=pe.sections[0].PointerToRawData, new_data=new_pack)
Вторую программу запишем в файл copy.tpl.asm. Размер у нее более внушительный, поэтому полный код смотри на диске. Там содержится два цикла, один скопирует 512 байт оригинальной программы с последней секции в первую, а второй цикл расшифрует всю первую секцию. После этого передается управление на оригинальную программу.
При компиляции темплейта нужно передать туда параметры для циклов копирования и расшифровки:
copy_from = pe.OPTIONAL_HEADER.ImageBase+pe.sections[-1].VirtualAddress
copy_to = pe.OPTIONAL_HEADER.ImageBase+pe.sections[0].VirtualAddress
oep = pe.OPTIONAL_HEADER.ImageBase+pe.OPTIONAL_HEADER.AddressOfEntryPoint
asm = Template(open("copy.tpl.asm", "r").read()).generate( copy_from=copy_from, copy_to=copy_to, copy_len=512, xor_len=pe.sections[0].Misc_VirtualSize, key_encode=1, original_oep=oep,)
Остался маленький штришок — записать вторую прогу в файл и сделать первую секцию записываемой, чтобы расшифровщик не выдавал ошибок, а также установить точку входа на начало первой секции:
new_copy = open("copy.bin", "rb").read()
pe.sections[0].Characteristics |= pefi le.SECTION_CHARACTERISTICS["IMAGE_SCN_MEM_WRITE"]
pe.OPTIONAL_HEADER.AddressOfEntryPoint = pe.sections[0].VirtualAddress
pe.write(fi lename="result.exe")
Выпуск 5. Завершающий
Если собрать кусочки кода вместе, то будет у нас всего 50 строк. Всего лишь 50 — и криптор готов! А теперь прикинь, сколько строк содержала бы программа на С? Конечно, это еще далеко не готовый продукт, над ним нужно работать и работать. Чтобы довести систему до реального криптора, нужно добавить как минимум шифрование ресурсов и импорта, а также антиэмуляцию. О том как теоретически эти проблемы решить, смотри во врезках. Удачи!
Желательный функционал 1. Обход песочниц
В крипторе нужно делать проверки на запуск в виртуальной машине, SandBox’е или анализаторе типа анубиса. Чтобы их зедетектить, нужно провести небольшое исследование и написать программу, которая будет на экран выводить разные внутренние параметры системы, а дальше — проверить этот файл на том же анубисе и в скриншоте посмотреть параметры, которые показала наша прога. Дальше все просто — при запуске на системе с подобными параметрами — просто уходим в цикл.
Обязательный функционал 2. Шифрование ресурсов и импорта
Для шифрования ресурсов мы должны пройтись по секции ресурсов и сохранить оттуда важные для запуска файла — иконки и манифест. Дальше создаем новые ресурсы с важными ресурсами, а остальное шифруем. После запуска криптора восстанавливаем все обратно.
Несколько сложнее получается с импортом, ведь его также нужно сначала зашифровать, потом сгенерировать липовый импорт, но после восстановления импорт еще нужно вручную проинициализировать, то есть — загрузить DLL’ки и сохранить в таблицу импорта реальные указатели на функции.
Обязательный функционал 1. АнтиЭмуляция
Кроме избавления от внешних сигнатур, очень важно, чтобы антивирус в своем эмуляторе не добрался до исходного файла. Для этого нужна антиэмуляция. Раньше были очень популярны приемы, основанные на предположении, что эмулятор не понимает все инструкции процессора. Сейчас же ситуация изменилась, и самые эффективные приемы основаны на использовании Windows API. Согласись, что антивирус вряд ли сможет эмулировать все API.
Вот тебе такая идейка для реализации:
- создаем Windows-приложение и один дополнительный поток;
- после создания потока он должен послать через API сообщение основному потоку с каким-то ключом;
- в главной программе проверяем, и если ключ правильный — передаем управление на код расшифровки основного файла;
- если код неправильный, то просто ничего не делаем и находимся в вечном цикле получения сообщений от Windows.
PS:Никогда не останавливай программу с ошибкой, это лишь прибавит криптору лишний вес. Вечный цикл получения сообщений от Windows — лучший способ.
Внутренности Антивирусов
В упрощенном виде, антивирус — это набор правил (сигнатур) и система, которая проверяет файл по этим правилам.
К примеру, пусть в антивирусе будут такие сигнатуры:
- секция с кодом, записываемая +10;
- после запуска прописывается в авторан +30;
- вторая секция с именем Zeus +30;
- меньше 4 энтропия кодовой секции +20;
- есть сертификат от майкрософта -10.
Дальше антивирь проверяет те правила, которые возможно проверить без запуска EXE, потом в эмуляторе запускает файл и проверяет все остальные правила. А после этого подсчитывает сумму, если она больше 100, значит вирус, если меньше — значит не вирус.
Как работает pefile
При загрузке в pefile экзэхи, библиотека сохраняет сам файл в pe.data, а потом обрабатывает его и создает массив структур pe.structures. Структура — это объект, у которого есть адрес. Адрес, по которому она находится в файле, и есть набор полей.
При сохранении файла pe.write(filename=»result. exe») либа проходит по всем структурам и сохраняет их по указанным адресам. Чтобы что-то добавить, например, в ту же секцию, нам сначала нужно найти адрес в памяти. Это можно посчитать так: адрес в памяти последней секции + размер секции. Дальше заполняем все поля в структуре и добавляем ее в массив pe.structures. Вот и все :).
Links
xakep.ru
Криптор — Википедия (с комментариями)
Материал из Википедии — свободной энциклопедии
Криптор (от англ. Cryptor — шифровщик) — название ряда программ для криптозащиты, используемых преимущественно создателями компьютерных вирусов и хакерами для маскировки вредоносного программного обеспечения.
Криптор, шифруя программу, обеспечивает защиту вредоносного программного кода от распространённых антивирусных методов поиска по сигнатурам. Существуют обычные и полиморфные крипторы.
Обычные: Крипторы со статической сигнатурой расшифровщика.
Полиморфные: Крипторы у которых декриптор не статический.
Принцип работы
Простой вариант:
Посредством криптора шифруется оригинальный программный файл и в его начало записывается код, при запуске выполняющий расшифровку и выполнение зашифрованной программы. Самый простой пример — распространение вирусов или троянов в запароленных архивах, где антивирусная программа не может их обнаружить.
Сложные вариации:
Изменение точки входа, анти-эмуляция, виртуализация, морфинг, обфускация кода, защита в памяти.
Недостатки
Антивирусы добавляют в базы сигнатур сигнатуры исполняемого для расшифровки кода криптора. Это приводит к тому что, зашифрованные, например для уменьшения размера, распространённым криптором программы определяются как заражённые. Недостаток исчезает если существует постоянная поддержка программы-криптора автором. Как правило, достаточно всего лишь перепаковать файл и антивирусная защита пропустит его.
Напишите отзыв о статье «Криптор»
Отрывок, характеризующий Криптор
Наташа удивленными глазами смотрела на Соню. Видно, ей самой в первый раз представлялся этот вопрос и она не знала, что отвечать на него.– Какие причины, не знаю. Но стало быть есть причины!
Соня вздохнула и недоверчиво покачала головой.
– Ежели бы были причины… – начала она. Но Наташа угадывая ее сомнение, испуганно перебила ее.
– Соня, нельзя сомневаться в нем, нельзя, нельзя, ты понимаешь ли? – прокричала она.
– Любит ли он тебя?
– Любит ли? – повторила Наташа с улыбкой сожаления о непонятливости своей подруги. – Ведь ты прочла письмо, ты видела его?
– Но если он неблагородный человек?
– Он!… неблагородный человек? Коли бы ты знала! – говорила Наташа.
– Если он благородный человек, то он или должен объявить свое намерение, или перестать видеться с тобой; и ежели ты не хочешь этого сделать, то я сделаю это, я напишу ему, я скажу папа, – решительно сказала Соня.
– Да я жить не могу без него! – закричала Наташа.
– Наташа, я не понимаю тебя. И что ты говоришь! Вспомни об отце, о Nicolas.
– Мне никого не нужно, я никого не люблю, кроме его. Как ты смеешь говорить, что он неблагороден? Ты разве не знаешь, что я его люблю? – кричала Наташа. – Соня, уйди, я не хочу с тобой ссориться, уйди, ради Бога уйди: ты видишь, как я мучаюсь, – злобно кричала Наташа сдержанно раздраженным и отчаянным голосом. Соня разрыдалась и выбежала из комнаты.
Наташа подошла к столу и, не думав ни минуты, написала тот ответ княжне Марье, который она не могла написать целое утро. В письме этом она коротко писала княжне Марье, что все недоразуменья их кончены, что, пользуясь великодушием князя Андрея, который уезжая дал ей свободу, она просит ее забыть всё и простить ее ежели она перед нею виновата, но что она не может быть его женой. Всё это ей казалось так легко, просто и ясно в эту минуту.
wiki-org.ru
Криптор
Итак, Вы решили стать крутым хакером и вирусописателем, и уже даже купили себе самую нужную книгу «Как стать хакером для чайников»? Быть хакером – это конечно круто, но прочитав книгу подобного рода, максимум, кем Вы станете, это хакером чайников.
В данной статье мы постараемся объяснить некоторые аспекты программирования некоего программного обеспечения, касающегося именно хакерских сторон деятельности – как написать вирус, чтобы его не палили антивирусы, какие программы при этом использовать и где эти программы брать.
Криптор (от английского слова «Cryptor» — шифровщик) – это название одного из вида программных продуктов, которые используются программистами-вирусописателями для того, чтобы скрыть вредоносную сущность написанного ими программного обеспечения от антивирусных программ.
Криптор, используя шифрование программы, содержащей вирус, маскирует и защищает ее от антивирусных программ, которые работают методами поиска по сигнатурам.
Различают два вида крипторов: обычный и полиморфный. Обычные крипторы имеют статическую сигнатуру декриптора-расшифровщика, а у полиморфных данная сигнатура динамическая, и каждый раз при компиляции они (файлы, упакованные такими крипторами) выглядят по иному.
Как же работают крипторы? Все довольно просто: берется исходный оригинальный файл вредоносной программы, затем данная программа шифруется каким-либо криптором, при этом в начало вновь полученного файла записывается код для расшифровки программы. Чтобы было более понятно, объясним на простейшем примере: берется некая троянская программа и архивируется архиватором WinRAR, причем архивируется не просто так, а с парольной защитой. После выполнения данных действий ни одна антивирусная программа не сможет добраться до данного трояна, так как расшифровывать пароли к архивам они не умеют.
Здесь присутствует один небольшой подводный камень. Антивирусы добавляют в свои базы сигнатур коды расшифровки наиболее распространенных программ-крипторов, но если Вы создали какую-либо программу, которая совсем не является вирусом, а выполняет какие-либо только полезные действия, но при этом запаковали ее для уменьшения размера каким-либо популярным криптором, то зачастую может так случиться, что антивирус при попытке скопировать данную программу на компьютер или запустить ее начнет ругаться, что в данной программе содержится страшный вирус. Ну, от этого никуда не деться, если Вы пользуетесь общедоступными крипторами.
Вообще, по типу доступности крипторы подразделяют на Публичные (Public) и Приватные (Private).
Первый вид крипторов является общедоступным, они широко распространены на просторах Интернета и при наличии желания их может скачать любой пользователь. Основной отрицательной стороной таких крипторов является то, что по истечении совсем небольшого срока они начинают палиться практически всеми антивирусами (ведь антивирусные лаборатории тоже не дремлют и стараются отловить свежие виды крипторов, тем более как их не отлавливать, если они лежат в свободном доступе).
Со вторым же видом все не так просто. Эти крипторы доступны только избранному сообществу людей либо же их можно приобрести за вполне реальные деньги (электронные в основном). Данный тип крипторов является более устойчивым к проверке их антивирусами благодаря как постоянно совершенствующимся алгоритмам шифрования, так и постоянно обновляемому стабу. Что такое стаб, спросите Вы? Ответим. Стаб – та часть кода криптора, которая используется для расшифровки данных вредоносной программы, которая и была зашифрована данным криптором.
Часто в раделах форумов, где представлены крипторы, присутствуют аббревиатуры FUD и semiFUD. Расшифруем эти аббревиатуры, чтобы Вам было более понятно. Что же это такое.
1)FUD — Full Undetected — «полностью не определяется антивирусами»
2)semiFUD — Semi-full undetected — «почти не определяется антивирусами».
Помимо крипторов, при написании вредоносного программного обеспечения (вирусов и троянских программ), используются и некоторые другие виды программ. Вкратце перечислим их названия и расскажем, для чего они служат.
Для кражи номеров ICQ, логинов и паролей к аккаунтам электронной почты и социальным сетям используются особые тоянские программы, которые называются пинчи и ксинчи.
Для приема и обработки полученной ворованной информации используются специальные php-скрипты, которые называются гейтами.
Для соединения в один файл безопасной программы и какого-либо вируса служат джойнеры. При этом функциональность как первого (допустим, фотографии), так и второго (например, троянского вируса), остается на высшем уровне.
Вот в принципе и вся основная теоретическая информация по крипторам, которую мы хотели Вам представить.
thelocalhost.ru
Криптор — Википедия (с комментариями)
Ты — не раб!
Закрытый образовательный курс для детей элиты: «Истинное обустройство мира».
http://noslave.org
Материал из Википедии — свободной энциклопедии
Криптор (от англ. Cryptor — шифровщик) — название ряда программ для криптозащиты, используемых преимущественно создателями компьютерных вирусов и хакерами для маскировки вредоносного программного обеспечения.
Криптор, шифруя программу, обеспечивает защиту вредоносного программного кода от распространённых антивирусных методов поиска по сигнатурам. Существуют обычные и полиморфные крипторы.
Обычные: Крипторы со статической сигнатурой расшифровщика.
Полиморфные: Крипторы у которых декриптор не статический.
Принцип работы
Простой вариант:
Посредством криптора шифруется оригинальный программный файл и в его начало записывается код, при запуске выполняющий расшифровку и выполнение зашифрованной программы. Самый простой пример — распространение вирусов или троянов в запароленных архивах, где антивирусная программа не может их обнаружить.
Сложные вариации:
Изменение точки входа, анти-эмуляция, виртуализация, морфинг, обфускация кода, защита в памяти.
Недостатки
Антивирусы добавляют в базы сигнатур сигнатуры исполняемого для расшифровки кода криптора. Это приводит к тому что, зашифрованные, например для уменьшения размера, распространённым криптором программы определяются как заражённые. Недостаток исчезает если существует постоянная поддержка программы-криптора автором. Как правило, достаточно всего лишь перепаковать файл и антивирусная защита пропустит его.
Напишите отзыв о статье «Криптор»
Отрывок, характеризующий Криптор
Настроения гулять у меня, честно говоря, слишком большого не было, так как после всего случившегося, состояние было, скажем так, очень и очень «удовлетворительное… Но оставлять Стеллу одну я тоже никак не могла, поэтому, чтобы обоим было хорошо хотя бы «посерединушке», мы решили далеко не ходить, а просто чуточку расслабить свои, почти уже закипающие, мозги, и дать отдохнуть измордованным болью сердцам, наслаждаясь тишиной и покоем ментального этажа…
Мы медленно плыли в ласковой серебристой дымке, полностью расслабив свою издёрганную нервную систему, и погружаясь в потрясающий, ни с чем не сравнимый здешний покой… Как вдруг Стелла восторженно крикнула:
– Вот это да! Ты посмотри только, что же это там за красота такая!..
Я огляделась вокруг и сразу же поняла, о чём она говорила…
Это и правда было необычайно красиво!.. Будто кто-то, играясь, сотворил настоящее небесно-голубое «хрустальное» царство!.. Мы удивлённо рассматривали невероятно огромные, ажурные ледяные цветы, припорошенные светло-голубыми снежинками; и переплёты сверкающих ледяных деревьев, вспыхивающих синими бликами при малейшем движении «хрустальной» листвы и высотой достигавших с наш трёхэтажный дом… А среди всей этой невероятной красоты, окружённый вспышками настоящего «северного сияния», гордо возвышался захватывающий дух величавый ледяной дворец, весь блиставший переливами невиданных серебристо голубых оттенков…
Что это было?! Кому так нравился этот холодный цвет?..
Пока почему-то никто нигде не показывался, и никто не высказывал большого желания нас встречать… Это было чуточку странно, так как обычно хозяева всех этих дивных миров были очень гостеприимны и доброжелательны, за исключением лишь тех, которые только что появились на «этаже» (то есть – только что умерли) и ещё не были готовы к общению с остальными, или просто предпочитали переживать что-то сугубо личное и тяжёлое в одиночку.
o-ili-v.ru
Малварь как искусство — Как написать криптор. Часть — 1. Разрабатываем алгоритм
Интересно как сейчас аверы реагируют на крипторы ?
Немножко для тех-кто в «танке»:
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.
Вообще это всё реализовано, практически в любом исходнике криптора, пример тут PE-Crypter/runPE.h at master · jozemberi/PE-Crypter · GitHub или на хабре даже есть: Запуск программы из памяти / Песочница / Хабрахабр
Или у нас на Делфи:ВАЖНО — Делаем криптор вместе
Вот вам и алгоритм простого криптора, НО без антиэмуляции, в качестве антиэмуляции тут «Проверка на запуск под виртуальной машины АВ, и-то примитив», понятно что для уменьшения детекта, процедуру расшифровки и запуска в памяти нужно как-то маскировать, что-бы антивирусный сканер до неё не добрался ! 🙂
Кто-нить использовал это, как современные антивирусы реагируют на такое ?
Если не будет лень и время, то следующая часть реализация этого всего на Visual C++, плюс продумать методы антиэмуляции и генерации ключа, отписывайтесь если есть что сказать ? 🙂
ru-sfera.org
Ещё раз про джойнеры, крипторы, стабы и прочую хрень
Я тут создал новый достаточно серьёзный раздел в хак. категории и сейчас думаю наверное зря, т.к. крипторы которые в паблике быстро устаревают, буквально 2-3 дня и палятся уже всеми антивирусниками и становится уже к сожалению не так интересно, ну и это ещё не самое хреновое, хреново то-что искать новые крипторы здесь опять-таки навряд-ли кто-то будет и тем-более тестить их, может-быть пару человек только…И как-бы тема не превратилась в унылый и никому не нужный копипаст…
В начале раздел хотел удалить, но потом решил, а почему-бы вместо крипторов не давать теоретический материал, а это различные статьи посвящённые этой проблеме, может-быть какие исходники крипторов, ну в общем инфа больше позновательного характера…
Возможно и это здесь мало кому интересно, но всяко лучше чем копипаст материала с ресурсов…
Итак давайте в начале разберёмся, а что-же такое крипторы, стабы и т.д. и вообще зачем они нужны…
Обо всём по порядку:
1) Что-же такое криптор и стаб и зачем нужно:
Криптор (aka cryptor) — это тулза, которая предназначена для скрытия троянов, ботов и прочей нечисти от детектирования антивирусами. Крипторы можно разделить на 2 вида: хорошие и дерьмовые.
Хорошие крипторы работают очень просто, быстро и надёжно, хоть и не безглючно. Они дописывают свой код (в контексте таких крипторов этот код называется стабом) в криптуемую программу и шифруют код самой программы. При запуске первым стартует стаб, он восстанавливает оригинальный код и программа начинает работать. Если криптор свежий (или просто хороший, об этом ниже), то закриптованная программа не будет детектироваться антивирусами.
Чаще всего такие крипторы полиморфны — т.е. код криптора в криптуемой программе каждый раз уникален, заполнен случайными инструкциями и бессмысленными вызовами функций API. Такие крипторы достаточно долго остаются недетектируемыми в силу уникальности каждого закриптованного файла. Но, как говорится, на каждую хитрую жопу найдется хуй с винтом — такие крипторы тоже со временем детектируются, и если автор не чистит свой продукт, то криптор перестает быть уникальным и посылается нахуй.
Другим же типом крипторов являются стабовые крипторы. Вообще только дебил будет называть это криптором, но в силу ебанутости и многочисленности авторов таких творений, мы не будем отрываться от стаи.
Итак, быдлокрипторы. Суть их работы вот в чем — есть стаб. Стаб в этом случае — это отдельная программа, к которой цепляется криптуемый файл. При запуске файл извлекается, расшифровывается и запускается.
Т.е. надеюсь поняли отличия в первом случае шифруется код программы, и стаб расшифровывает уже команды программы, а во втором случае шифруется сам файл программы и расшифровывается тоже сам файл, ну и понятно, что второй тип криптора это не что иное как не нужное гавно, т.к. практически любой антивирусник спалит вирус при расшифровке ! 😉
Некоторые крипторы напрямую файл на диск не пишут, а запускают его из памяти, но это их не оправдывает, т.к. продвинутый антивирус словит это при запуске как нехуй делать.
В таких крипторах уникальность каждого закриптованного файла достигается разными стабами. Но такой подход весьма ограничен — в хороших криптах это всего-лишь код, и его можно сгенерировать, а со стабами в говно-крипторах уже сложнее, поэтому авторы чаще всего создают под каждого клиента отдельный стаб. Подход глуп до безобразия, ведь ежели спалится антивирусами один закриптованный файл — за ним полетят и все остальные.
С крипторами пока всё, идём дальше…
2)Что такое джойнеры и зачем нужно:
Джоинер (также биндер, joiner, binder) — программа для склеивания нескольких файлов (к примеру картинки в формате JPG и трояна в виде исполняемого файла EXE) в один контейнер. При запуске контейнер извлекает из себя файлы и запускает их.
Чаще всего джоинеры используются для маскировки запуска вредоносных программ. Простейший вариант использования описан выше — склеиваем фотографию с вирусом. В итоге жертва запускает контейнер, видит фотку, а тем временем запускается троян и делает свое дело.
Джоинеры бывают разные, крутые и не очень. Некоторые позволяют настраивать множество опций — куда контейнер будет извлекать файлы (иногда это важно), будет он запускать файлы скрыто или по-обычному (т.е. если программа имеет окна — при запуске они будут видны, в скрытом режиме запуска никаких окон видно не будет, даже если автором программы это было задумано) и т.д.
Также большинство джоинеров позволяет настраивать внешний вид контейнера — иконку, информацию о версии и т.п.
Все, абсолютно все джоинеры создают контейнеры в виде исполняемых файлов EXE. Т.е. вариант склеить изображение с трояном и получить файл jpg — невозможно. Данный вопрос периодически поднимается на форумах, но увы — решения нет. Также некоторые джоинеры позволяют создавать контейнеры с расширением scr, pif и com — но контейнер все-равно остается EXE’шником.
В некоторых джоинерах есть опция мелтинга, о ней стоит рассказать подробнее. Во многих случаях она очень полезна. Суть вот в чем: при создании контейнера мы выбираем один из склеиваемых файлов. При запуске контейнера файлы извлекаются и запускаются, как и положено. И если мелтинг был включен и один из склеиваемых файлов был выбран — при запуске контейнер заменит себя выбранным файлом.
Да, немного запутанно, на примере будет проще: склеиваем песенку с трояном, выбираем в настройках мелтинга файл песни, и для пущего эффекта прикрепим к контейнеру иконку аудио-файла. При запуске контейнер извлечет оба файла, запустит их и заменит себя песенкой.
Источник: По материалам фака от Вазонеза (vazonez.com)
ru-sfera.org