Hoi, Ich versuche in einem Thread eine Shell zu erzeugen.
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
Windows, Winsock;
var
shellThreadID: DWORD;
str: string;
close: boolean;
procedure CreateShell;
var
hSocket: PInteger;
si: TStartupInfo;
pi: TProcessInformation;
begin
hSocket := PInteger(99);
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, '', 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);
end;
begin
shellThreadID := 1191;
//CreateThread(nil, 0, @CreateShell, nil, 0, shellThreadID);
//auf quit warten
close := false;
while close = false do
begin
sleep(100);
ReadLn(str);
if str = 'quit' then
close := true;
end;
end.
dort soll man denn via "telnet 127.0.0.1 99" eigentlich connecten können
nur schmiert das vorher ab mit einer Zugriffsverletzung.
Was könnte an dem Code falsch sein?