Палим Any.Run сигнатурно
полные исходники будут в конце
Привет. В качестве введения хочу сказать, что многих малварщиков и ботоводов уже изрядно позадолбал этот anyrun. Кто не знает - это аверская виртуалка пабликовая. Аверы туда заливают сэмплы и в динамике смотрят как че ведется. В общем хз, мой дефолтный анти-вм не палил эту парашу и поэтому я пошел разбираться.
Убедительная просьба после опубликования статьи проверить методы - автор может оперативно заморфить метод и тогда потребуется обновление сигнатур, так как этот антивирусник присутствует на форуме (последний вход - вчера)
И я, честно, в шоке. Я нашел аж 5 методов запалить эту недоподелку. В одном из них тут пойдет речь.
Вот цитата великого человека:
Думаете бред? Нет лол, ща будем сигнатуры на эниран пилить =D =D.
Вот статистика энирана, думается мне, всех их он тоже подзаебал:
Кто за то, чтобы подзаебать их?
Итак, в результате статьи имеем:
* Сигнатурный движок для проверки всех файлов в System32 на N-е количество сигнатур
* Сигнатуры на x86/x64 файлы Any.Run виртуалки
* Баггерт админа сервиса, который почему-то еще не в -7 за работу на аверов
Требования:
* Visual Studio
* IDA Pro
* Опционально: YARA
Предыстория
В общем, карданули мы с ботов аккаунт Searcher'а на этой виртуалке (хотя там есть Free тарифы) и пошли изучать че да как. В процессах висел какой-то windanr.exe из system32. Мы его залили себе и посмотрели че там да как. Короче че там да как непонятно - эта хрень тупо висит в цикле.
передайте этому аверу, что Sleep принимает параметр INFINITE. Это так, между слов
Особо оно ниче не делает. В той верхней функции проверяет какую-то static константу на неравенство нуля и делает че то там. Разбираться лень, суть в другом.
Этот код довольно уникален (ух вангую пойдут они морфить его)
Вот скриншот x64 версии:
Кода меньше, но тоже довольно уникально. Перейдем в HEX и посмотрим че байты:
Это для x86, для x64 делается аналогично. Наводится курсор на начало функции и переходится в окно Hex1
Для того, чтобы убедиться, что все работает и у нас нет False positive c реальными файлами, мы заюзаем yara. Кто не вкурсе это очень удобный аверский инструмент, чтобы пилить и тестить сигнатуры. Собственно вот сигнатура.
В ней содержатся правила для x64 и x86 версии файла. И условие стоит - любой из них.
Проверим...
Запустим на папку с этимифлагштоками файлами:
Видим, что оба успешно спалились. Попробуем запустить на system32, чтобы убедиться, что нет ложных срабатываний.
Все ок! Зальем туда файлик, как это у энирана и проверим еще раз
Кодим детекторпидоров энирана
Disclaimer: нет, тут не будет х#йни про легальность. Хочу сказать, что у меня new подразумевается noexcept, в обучающую статью мне лень было свой рантайм с перегрузкой копировать. Просто перегрузите new на VirtualAlloc. // я это написал чтоб избежать возможных будущих говн
Итак, я решил абстрагироваться, поэтому мой код будет в виде абстрактного класса. Сигнатуры будут задаваться при помощи linked list. Мы сможем задавать сколь угодно сигнатур.
Нам необходимо реализовать минимальную функциональность yara: Any of them. Этим и займемся. Мы можем, конечно, заюзать саму yara, но это тяжелое решение, да и статья обучающая в какой-то мере.
Примерно вот так это выглядит.
Обратите внимание, чтобы создать инстанс такого класса нам понадобится оператор new, чтобы заполнить vftable. Из-за тяжелости оператора его можно перегрузить на VirtualAlloc. Инициализатор vftable компилятор добавляет в неявном виде сразу после оператора new
В комментариях все ясно что принимает и почему.
sglist заполняется в отдельной функции:
Постепенно в список добавляет 2 сигнатуры. Думаю никому не надо объяснять, как работает linked list. Если надо, то погуглите - начальные азы алгоритмов.
где signatures_num - это наши сигнатуры с яры:
Я привык выделять конструкторы и деструкторы в отдельные функции Run и Destroy. Из деструктора вызывается также Destroy
Это то как выглядит Run, пробегается по списку сигнатур и вызывает функцию проверки массива на эту сигнатуру. Сама та функция работает примерно как функция поиска подстроки в строке, только вместо end-символа используется заранее известный размер.
Вот, кстати, она:
Думаю тут все предельно понятно. Интересно, я так говорю потому что я этот код писал 10 минут назад, или потому что тут правда все предельно понятно? :rofl:
Затестим наш код выполнив стандартный тест. Сделаем массив, содержащий сигнатуру и запустим на него сканер:
Тест успешно прошел. Номер сигнатуры верно вернул.
Осталось приебашить гвоздями и флагштоками поиск файлов, маппинг файлов и их проверку через Run.
Видим, что все работает.
Тестирование на Any.Run
Зальем на x64 версию вм:
Спалило по первой сигнатуре
Ура!
Скачать сорцы бесплатно и с флагштоками:
https://www.sendspace.com/file/i376dt
пароль exploit.in
сорри, я кодил укуренным. Там утечка памяти в Main. Кто нибудь, удалите этот поганый инстанс scanner. Спасибо
ПыСы:Меня тут постепенно отпускает. В перерыве между марихуаной и гашишем я тут увидел еще одну херовинку. В конце signature_exist пропишетефлагшток в жопу return FALSE; Я х#й знает как это работало раньше. Магия косяка 
автор: ibenji
взято с exploit
полные исходники будут в конце
Привет. В качестве введения хочу сказать, что многих малварщиков и ботоводов уже изрядно позадолбал этот anyrun. Кто не знает - это аверская виртуалка пабликовая. Аверы туда заливают сэмплы и в динамике смотрят как че ведется. В общем хз, мой дефолтный анти-вм не палил эту парашу и поэтому я пошел разбираться.
Убедительная просьба после опубликования статьи проверить методы - автор может оперативно заморфить метод и тогда потребуется обновление сигнатур, так как этот антивирусник присутствует на форуме (последний вход - вчера)
И я, честно, в шоке. Я нашел аж 5 методов запалить эту недоподелку. В одном из них тут пойдет речь.
Вот цитата великого человека:
И настанет то время, когда антивирусы будут криптовать свои файлы, чтобы малварь не спалила их сигнатурно (С) Ленин
Думаете бред? Нет лол, ща будем сигнатуры на эниран пилить =D =D.
Вот статистика энирана, думается мне, всех их он тоже подзаебал:
Кто за то, чтобы подзаебать их?
Итак, в результате статьи имеем:
* Сигнатурный движок для проверки всех файлов в System32 на N-е количество сигнатур
* Сигнатуры на x86/x64 файлы Any.Run виртуалки
* Баггерт админа сервиса, который почему-то еще не в -7 за работу на аверов
Требования:
* Visual Studio
* IDA Pro
* Опционально: YARA
Предыстория
В общем, карданули мы с ботов аккаунт Searcher'а на этой виртуалке (хотя там есть Free тарифы) и пошли изучать че да как. В процессах висел какой-то windanr.exe из system32. Мы его залили себе и посмотрели че там да как. Короче че там да как непонятно - эта хрень тупо висит в цикле.
передайте этому аверу, что Sleep принимает параметр INFINITE. Это так, между слов
Особо оно ниче не делает. В той верхней функции проверяет какую-то static константу на неравенство нуля и делает че то там. Разбираться лень, суть в другом.
Этот код довольно уникален (ух вангую пойдут они морфить его)
Вот скриншот x64 версии:
Кода меньше, но тоже довольно уникально. Перейдем в HEX и посмотрим че байты:
Это для x86, для x64 делается аналогично. Наводится курсор на начало функции и переходится в окно Hex1
Для того, чтобы убедиться, что все работает и у нас нет False positive c реальными файлами, мы заюзаем yara. Кто не вкурсе это очень удобный аверский инструмент, чтобы пилить и тестить сигнатуры. Собственно вот сигнатура.
В ней содержатся правила для x64 и x86 версии файла. И условие стоит - любой из них.
Проверим...
Запустим на папку с этими
Видим, что оба успешно спалились. Попробуем запустить на system32, чтобы убедиться, что нет ложных срабатываний.
Все ок! Зальем туда файлик, как это у энирана и проверим еще раз
Кодим детектор
Disclaimer: нет, тут не будет х#йни про легальность. Хочу сказать, что у меня new подразумевается noexcept, в обучающую статью мне лень было свой рантайм с перегрузкой копировать. Просто перегрузите new на VirtualAlloc. // я это написал чтоб избежать возможных будущих говн
Итак, я решил абстрагироваться, поэтому мой код будет в виде абстрактного класса. Сигнатуры будут задаваться при помощи linked list. Мы сможем задавать сколь угодно сигнатур.
Нам необходимо реализовать минимальную функциональность yara: Any of them. Этим и займемся. Мы можем, конечно, заюзать саму yara, но это тяжелое решение, да и статья обучающая в какой-то мере.
Примерно вот так это выглядит.
Обратите внимание, чтобы создать инстанс такого класса нам понадобится оператор new, чтобы заполнить vftable. Из-за тяжелости оператора его можно перегрузить на VirtualAlloc. Инициализатор vftable компилятор добавляет в неявном виде сразу после оператора new
В комментариях все ясно что принимает и почему.
sglist заполняется в отдельной функции:
Постепенно в список добавляет 2 сигнатуры. Думаю никому не надо объяснять, как работает linked list. Если надо, то погуглите - начальные азы алгоритмов.
где signatures_num - это наши сигнатуры с яры:
Я привык выделять конструкторы и деструкторы в отдельные функции Run и Destroy. Из деструктора вызывается также Destroy
Это то как выглядит Run, пробегается по списку сигнатур и вызывает функцию проверки массива на эту сигнатуру. Сама та функция работает примерно как функция поиска подстроки в строке, только вместо end-символа используется заранее известный размер.
Вот, кстати, она:
Думаю тут все предельно понятно. Интересно, я так говорю потому что я этот код писал 10 минут назад, или потому что тут правда все предельно понятно? :rofl:
Затестим наш код выполнив стандартный тест. Сделаем массив, содержащий сигнатуру и запустим на него сканер:
Тест успешно прошел. Номер сигнатуры верно вернул.
Осталось приебашить гвоздями и флагштоками поиск файлов, маппинг файлов и их проверку через Run.
Видим, что все работает.
Тестирование на Any.Run
Зальем на x64 версию вм:
Спалило по первой сигнатуре
Ура!
Скачать сорцы бесплатно и с флагштоками:
https://www.sendspace.com/file/i376dt
пароль exploit.in
сорри, я кодил укуренным. Там утечка памяти в Main. Кто нибудь, удалите этот поганый инстанс scanner. Спасибо
ПыСы:Меня тут постепенно отпускает. В перерыве между марихуаной и гашишем я тут увидел еще одну херовинку. В конце signature_exist пропишете
автор: ibenji
взято с exploit