В статье рассмотрен пример того, как спрятать вирус или другую типа «В целях безопасности отключите антивирус и фаерволл!». ССЫЛКА НА СКАЧКУ UFR 3.1.5.0: http:// ССЫЛКИ НА САЙТЫ С КРИПТОРАМИ: http:// http://. Первое, что мне пришло в голову - скрыть имена этих функций из. антивирусов, а не сподвигнуть вас на написание тонн вирусов - за.
Обходим все популярные антивирусы, или лажовая защита в действии. На днях лень было заниматься чем-то сложным, поэтому решил заняться трендовым нынче направлением - обманом антивирусов. Сейчас статей типа "апходим мегакрутой онтевирус" в том же журнале "Хакер" развелось немеряно. причем способы обхода антивирусов авторы выбирают наиприметивнейшие: банальное шифрование строк статическим ключом, добавление формальных задержек (Sleep) и прочие вещи, вводящие в заблуждение только самые недалекие антивирусы.
А разве в незапароленном архиве вирус не будет уничтожен антивирусом? Поэтому, не думаю, что это выход из положения.
Хотите узнать как правильно удалить вирус с компьютера? вирусов с 99% гарантией, ведь не один современный антивирус не может и убираем галочки: Скрывать защищенные системные файлы, скрывать.
Представьте: автор пишет херню на 3-4 страницы, размазывая на них анализ своего мегавируса тремя антивирусами, и в итоге даже не способен обойти все из выбранных антивирей, а получает за это 5000 рублей. Несправедливо, тем более времени на написание такой статьи необходимо совсем немного, часа два. Итак, я потратил около часа на то, чтобы написать программу, скачивающую из интернета exe-файл и сразу запускающую ее. Удалось обойти антивирусы Kaspersky Internet Security 2011, NOD32, Dr. Web, Microsoft Security Essentials и Avast. Скорее всего, и другие бы ничего не заметили, просто не проверял. А антивирусы из списка выше даже не пикнули, когда запускался файл, скачанный только что из интернета.
Сразу скажу - я приведу не только тот способ, которым воспользовался в своей программе, но и некоторые идеи по обходу, которые я не проверял, но которые вполне могут быть на руку (и это не шифрование строк простым xor'ом со статическим ключом). Я выбрал язык assembler и компилятор MASM32. На ассемблере удобно можно творить беспредел, в отличие от других языков. Итак, сначала моя программа приняла такой вид:. А теперь по порядку. Добавилась процедура string_coder, принимающая единственный параметр - указатель на строку, которую необходимо расшифровать или зашифровать. Так как я использую операцию xor для шифрования, функция обратима: прогнали ей один раз строку - получили зашифрованную, прогнали второй - расшифровали.
Но я не использую статический ключ шифрования, я, как уже и сказал, воспользовался функцией QueryDosDevice. которая позволяет получить некоторую информацию о желаемом диске. Вся фишка тут в том, что я передал ей вполне легальные параметры, но вот размер буфера очень ограничил (последний параметр функции - 5 байтов, а этого явно мало для записи целой длинной строки с информацией). А это значит, что функция вернет ошибку (0), и дальше я проверяю это. Но и это еще не все - после такого обращения к функции последняя ошибка будет выставлена в ERROR_INSUFFICIENT_BUFFER.
о чем антивирус вообще едва ли знает, и именно это значение (после некоторых преобразований, чтобы зашифрованный вариант был текстовым, как и оригинальная строка) я и использую для шифрования строк. В остальной части программы ничего не поменялось, за исключением того, что теперь я сначала расшифровываю зашифрованные строки и только после этого вызываю сами функции. Теперь у меня и импорты менее приметные стали - используются штатные функции SetLastError. GetlastError. QueryDosDevice и ExitProcess. Теперь программа не то что не определяется, но и даже спокойно выполняется под контролем всех антивирусов, которые я перечислил в начале статьи - Kaspersky Internet Security 2011, NOD32, Dr.
Web, Microsoft Security Essentials и Avast. Такими результатами вполне можно гордиться.
Как мы только что выяснили, ни один из этих антивирусов не эмулирует PEB и ядро kernel32, подгруженное всегда в любой процесс Windows (или просто не знает ничего о функции QueryDosDevic e, или вообще и то и то одновременно). Скорее всего, после написания этой статьи такой способ быстро будет обнаруживаться по сигнатурам, но это ведь не мешает немного изменить код и добиться прежнего результата.
А теперь еще несколько мыслей по обходу, которые могут сработать (и точно работают со многими антивирусами). Эти способы совершенно не новы, но это не делает их устаревшими и неактуальными.
1. Запуск программой самой себя с некоторыми параметрами командной строки, обработка параметров и выбор пути дальнейшего действия в зависимости от переданных параметров, либо же использование переданных параметров для расшифровки некоторого блока кода, который не нравится антивирусам. 2. Использование сообщений Windows. В принципе, все как и в первом пункте, просто следует слать себе некое сообщение (либо пользоваться стандартными сообщениями Windows) и использовать в обработчике полученное сообщение как ключ шифрования либо как маркер для выбора дальнейшего пути исполнения. 3. Использование в коде большого количества малоизвестных WinAPI-функций (что, впрочем, я сделал в этом примере), применение возвращенных значений или кодов ошибок в дальнейшей логике программы.
4. Запись собственного кода в некое место штатной API-функции в памяти (это, естественно, затронет только наш процесс, т. DLL с API-функциями грузятся в каждый процесс отдельно), а затем ее вызов.
5. Для вирусов типа "скачай из интернета плохой exe-файл - запусти его" можно вместо URLDownloadToFile использовать, например, сокеты либо еще какие-то сетевые API Windows - и количество антивирусов, определяющих такую малварь, сразу уменьшится раза в полтора-два. Если немного подумать, можно и другие способы привести и реализовать, но этих пока хватит. Собранный исходный код я не выкладываю, если кого-то заинтересует тема, сможет собрать его и сам. И помните: материал приведен лишь с той целью, чтобы показать слабые места существующих современных антивирусов, а не сподвигнуть вас на написание тонн вирусов - за это нести ответственность будете вы сами. Также рекомендую почитать.
Да мне нужна не сама цель взломать определенный антивирь, а я хотел бы НАУЧИТСЯ это делать. Из языков я знаю паскаль и С++. flisk : Апрель 4th, 2012 at 20:27. Если вы действительно знаете С++, то купите/скачайте книгу Джефри Рихтера "Windows via C++", прочитав которую будете иметь глубокие знания по винапи и работе винды. И сможете накодить на Си макросы, аналогичные тем, что в данной статье по Масм. dx : Апрель 4th, 2012 at 20:34. Имхо, человек, знакомый с программированием, не будет спрашивать, запуститься ли программа, если ее сорс переименовать в exe :) Разве что, веб-программист, и то вряд ли.
flisk : Апрель 4th, 2012 at 20:51. Меня это тоже удивило, но с другой стороны, как же он написал те два трояна (для отсылки куки на FTP; для администрирования удалённого компьютера через клиент. )? разве что на компонентах + не особо вникая в тему, что такое компиляция. Или он нас так толсто троллит.
). UserXP : Апрель 4th, 2012 at 21:10.
dx, ты угадал, я действительно больше веб-программист и привык что пишу команды в блокноте, меняю формат файла, и программа работает. А насчёт двух троянов, я их собрал через конструкторы. Повторюсь ещё раз, я только начинаю вникать во все тонкости программирования, и хочу многое узнать. Именно поэтому я задаю вопросы знающим и опытным людям, пусть и настолько тупые.
Я уже понял насколько туп был мой вопрос, за это извиняюсь. dx : Апрель 4th, 2012 at 23:25. Хорошо, распишу ответ поподробнее.
Данный обход можно в принципе применить, только зная языки программирования. Либо писать полностью на MASM32, а потом компилировать, либо собирать с помощью MASM32 lib-файл с нужными вызовами функций через PEB (как в статье описано), а потом линковаться с этой либой из других языков, например, C++. Применить данный материал к готовому exe-файлу, скорее всего, не получится. Можно посидеть-подумать и реализовать похожие макросы для языка C или C++ вполне.
Но это опять-таки придется писать, готовое не применишь. flisk : Апрель 4th, 2012 at 23:05. Может [b]dx[/b] что-то скажет иное, но я бы советовал учить матчасть. Системный кодинг это не веб, где можно скачать скрипт, что-то там поправить и вставить в цмс. Тут надо знать систему, понимать что и куда, тем более в таких вопросах, как обход аверов (обычно тут используются какие-то нестандартные извраты).
Да вы что, издеваетесь? Ну блин, ну dx! Что ему объяснять? Что он накодил? Научился "конструировать" - скачал билдер троя типа пинча. Видно же, что человек очень и очень далек от какого-либо кодинга (если конечно не считать кодингом "язык хтмл" и вывод на экран "хэлоу ворлд" в паскале. Чувак, а ближайшие пару лет своей жизни ты проблему крипта решить не сможешь точно. В твоем случае - врятли когда-либо решишь своими силами.
Так что закажи сие удовольствие у криптовальщиков, стоит 15-20 уе. Живет крипт от 1 до 7 дней примерно. >Как мы только что выяснили, ни один из этих антивирусов не эмулирует PEB и ядро kernel32 В большинстве случаев, их эмуляция вообще ограничивается конкретным набором действий вместо попытки сэмулировать весь код. Приведу забавный пример. Пусть LoadLibrary и GetProcAddress используются "в открытую" и с их помощью получаем адреса URLDownloadToFileA и ShellExecuteA.
Строки с именами упрятаны как в статье. Такой код палится KIS. Теперь тупо возьмем адрес функции GetProcAddress (такого вида: 0х76d51222) и используем в коде. То есть вызовем GetProcAddress так: mov eax, 76d51222h push offset buf1 push h1 call DWORD PTR eax Такой код уже не палится, хотя, казалось бы, никакого труда сэмулировать это. Даже OllyDbg, если сделать брейк на call'е, покажет имя ф-ии, на которую прыгаем.
А ведь KIS считается одним из наиболее продвинутых аверов. К слову сказать, так вызывать GetProcAddress никуда не годится, потому что такое смещение начала функции может быть только для какой-то конкретной системы, конкретного сервис пака и установленных апдейтов. От системы к системе смещения системных библиотек в адресном пространстве меняются, поэтому на это полагаться не стоит. alias6969 : Июль 1st, 2012 at 01:55. Да это ясно. С другой стороны, kernel32 не выгружается из памяти, поэтому не перемещается по крайней мере после загрузки ОС. Все сводится к получению его адреса - можно помимо PEB ковырять стек вниз, смотреть на адреса в SEH или топорно забрать адрес возврата, помещенный в стек при запуске программы.
Есть еще извращенный вариант. Нужно найти процесс в ring3 с правами PROCESS_VM_READ и прочитать его IAT, найти там элемент для kernel32, сходить туда и найти хэдер дллки. Все процессы используют ExitProcess (ну, тут я не совсем уверен), поэтому kernel32 всегда импортируется, однако процесс с доступном для чтения VM теоретически может не найтись. В таком случае его можно запустить самому, то есть добиться того, что стандартный загрузчик импортирует kernel32, а потом нестандартно его выкусить из IAT. Минус в сложности. Плюс в базонезависимости и в том, что это вообще никто не проэмулирует еще сто лет. Всем добра.
Пытаюсь уже который день просто тупо закодировать строку и вывести её MessageBox-ом на экран, ничего не получаеться. Может напишешь код? Делов-то 5 минут. dx : Июль 31st, 2012 at 22:42. Делов 5 минут, а делаешь ты несколько дней. Отсюда вопрос: оно тебе вообще надо? Все материалы по программированию и сборке сорсов на MASM32 на блоге есть, было бы желание разобраться.
386. model flat, stdcall option casemap :none. include \masm32\include\windows. inc include \masm32\macros\macros. asm uselib kernel32, user32.
String_coder PROTO :DWORD. data fname db "URLDownloadToFileA",0 buffer db 128 dup(?).
data? funcname dd ?. code start:. mov funcname,FUNC(String_coder, offset fname). invoke wsprintf, offset buffer, chr$("Закодированное имя API-функции- %u "), funcname invoke MessageBox, NULL, offset buffer, chr$("Info"), 0. invoke ExitProcess, 0.
String_coder PROC strok:DWORD LOCAL buf[16]:BYTE. invoke lstrlen, strok mov esi, strok mov edi, eax. next_sym:.
if edi>0 invoke SetLastError, 0 invoke QueryDosDevice, chr$("C:"), addr buf, 5. if eax==0 invoke GetLastError and al,0Fh dec al xor byte ptr[esi],al inc esi dec edi. jmp next_sym.
endif. endif. mov eax, strok ret String_coder ENDP. Да подскажи-же почему у меня строка в цифру кодируется, или зачем тогда вообще тему выставлял? Не все же такие молодцы, а все хотят равнятся на тебя. dx : Август 1st, 2012 at 22:04.
Строка в цифру? Я не понял, что не так. И у тебя в коде нет ни одной закодированной строки. dx : Август 1st, 2012 at 22:06. Или ты хочешь закодировать имя и получить закодированный вариант? Ну так ничто не мешает в результате вообще получиться не тексту, а какому-нибудь бинарному говну, которое через мессаджбокс не выведешь. Впрочем, ничто не мешает изменить алгоритм кодирования. Я и спрашиваю по этому.
Не могу сам разобраться как ты имя апишки закодил в квазикозябрины, и потом всё работает зэргут? У меня какое-то гамно и получается. dx : Август 1st, 2012 at 22:53.
А ты пробовал сначала выучить немного синтаксис ассемблера интеловского, потом внимательно прочитать статью, а потом уже городить что-то? Я не могу тебе помочь, потому что ты не знаешь вообще ничего, зацепиться не за что. Ну зачем ты так dx? Я рад за тебя, что ты умный чувак и знаешь в совершенстве "синтаксис ассемблера интеловского"!Тут таких как я 95% ,а то и больше. И не поленился мне целую тераду написать, мог обойтись тремя словами-"посмотри дамп OllyDebuger" я бы понял. Уже и сам разобрался и сложил твой "ребус" в кучу. Не ошибается тот, кто ничего не делает, а ты если статью выкладываешь в паблик ,то потрудись её таким как я разжевывать, или не выкладывай вообще и радуйся сам -какой ты молодец!Ну а вообще спасибо, потрудился ты знатно, у меня всё скомпилировалось, правда не проверил работает ли, надо вбросить что-то на хост и посмотреть!Буду тебе очень признателен если напишешь какой-нибудь скрипт на PHP, чтобы при нажатии на ссылку в файле HTML с моего хоста грузился и устанавливался.
exe файл. dx : Август 2nd, 2012 at 22:39. А ты знаешь такое понятие, как "уровень сложности статьи"? Так вот, уровень этой статьи явно выше, чем "для полных нулей".
И разжевывать я ничего не буду, я пишу так, как считаю нужным, и отвечаю на адекватные вопросы. А когда мне пишут "а сделай все за меня", это несерьезно, извините. "Грузился и устанавливался exe-файл" - вообще эпично, ты предлагаешь мне для тебя сделать сплоит, который будет пробивать защиту браузеров. Молодец. незнающий : Август 9th, 2012 at 03:59. Уважаемый, КРАЙНЕ интересует даже не сам брутфорс RDP, а посылка логина и пароля.
Ну то есть как брутфорс посылает на сервер логин и пароль, API-функция есть какая или что? У вас тут есть сканер IP адресов но это не то, как вы сами понимаете. Из надыбанногго: вот такой списочек API-функций. но в том-то и дело, что во-первых во всём инете шаром покати, ни одного примера, а во-вторых, некотоые функции просто-напросто отсутствуют, (например у меня в XP) и отстутсвует главная WTSConnectSession. Как в таких осбтоятельствах работает брут у меня на компе- загадка (но его палит антирвиь).
А уж с многопоточностью и перебором я справлюсь сам! СПасибо. flisk : Сентябрь 4th, 2012 at 14:26. Поищите на васме, вроде видел там где-то работу с RDP.