[ Delphi / Pascal ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 6 May 2007.

Thread Status:
Not open for further replies.
  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 JeDaSe когда то писал, но на PHP. ВОт код, его бес труда сможешь перевести на Delphi (если знаешь php *CRAZY*)

    PHP:

    function BuildHeader($method,$page,$host,$ref,$cookie,$data)
    {
     
    $ret="{$method} /{$page} HTTP/1.0\r\n".
          
    "Host: {$host}\r\n".
          
    "Referer: {$ref}\r\n";
     if (!empty(
    $cookie)>0)
      { 
       
    $ret.="Cookie: {$cookie}\r\n";
      } 
     if (
    $method=='POST')
      {
       
    $ret.="Content-Length: ".strlen($data)."\r\n".
             
    "Content-Type: application/x-www-form-urlencoded\r\n\r\n{$data}\r\n";
      } else 
    $ret.="\r\n";
     return 
    $ret;
    }


    function 
    Login($email,$pass)
    {
     
    $email=htmlspecialchars($email);
     
    $pass=htmlspecialchars($pass);
     
    $data="success_url=&fail_url=&try_to_login=1&email={$email}&pass={$pass}";
     
    $head=BuildHeader('POST','login.php','vkontakte.ru','http://vkontakte.ru/login.php','',$data);
     
    $page=LoadPage('vkontakte.ru',80,$head);
     if (
    $page)
     {
      if (
    $id=okLogin($page))
       {
        if (
    $cookie=ParseCookie($page))
         {
          
    $c='';
          for (
    $x=0;$x<count($cookie);$x++) $c.=$cookie[$x].'; ';
          
    $_SESSION[$id]=$c;
          
    header("Location: ?id={$id}");
          die();
         } else 
    ShowError('Get COokie Error',true);
       } else 
    ShowError('Login Error',true);
     } else 
    ShowError('getPage Error',true);
     return 
    false;
    }


     
  2. intNet

    intNet Member

    Joined:
    31 May 2009
    Messages:
    29
    Likes Received:
    14
    Reputations:
    5
    JeDaSe, приведу пример :
    Code:
    var
      wData: WSAData;
      S: TSocket;
      addr: sockaddr_in;
      login, pass: string[30];
      n: integer;
      postdata, sendbuff: string;
    const
      fact: shortstring= 'HTTP/1.1 302 Found';
    begin
      Login := Edit1.Text;
      Pass:= Edit2.Text;
      If (login='') or (pass = '') then
      begin
        MessageDLG('No login & pass!',mtERROR,[mbOK],0);
        exit;
      end;
      If WSAStartUp($0101, wData) <> 0 then
      begin
        MessageDLG('can''t include winsock library',mtError,[mbOK],0);
        exit;
      end;
      s:= Socket(AF_INET, Sock_STREAM, ipPROTO_TCP);
      If S = Invalid_Socket then begin
        ShowMessage('socket error #'+IntToStr(WSAGetLastError));
        CloseSocket(s);
        Exit;
      end;
      FillChar(addr, sizeOF(sockaddr_in),0);
      Addr.sin_family:=af_INET;
      Addr.sin_port:=hTons(80);
      Addr.sin_addr.S_addr:=Inet_ADDR('95.168.160.213');  // ip нужного тебе сайта
      Check(Connect(s, addr, SizeOf(TSockAddr)));
      postdata:= 'username='+Login+'&password='+Pass;  // данные для отправки. Смотри     сниффером
      SendBuff := Snd+ // пакет. опять же смотри сниффером.
      IntToStr(Length(PostData))+#13#10#13#10+postdata;
      send(s, SendBuff[1],Length(sendBuff),0);
      recv(s, buff, ToRecieve, 0);
      Check(ShutDown(s, sd_Both));
      Check(CloseSocket(s));
      Memo1.Text:=Buff;
      Memo1.SetFocus;
      WSACleanUp;
      If pos(fact, memo1.text) > 0 then // good !
      else
         // bad!
    ...
    
    Это лишь малая часть кода, насколько я знаю для логина вконтакте нужно ещё и get-запрос отправить, думаю сам дальше по аналогии размерёшься.
     
  3. Flame of Soul

    Flame of Soul Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    185
    Likes Received:
    146
    Reputations:
    45
    Сохранение компонента в файл, происходит по ниже приведенному коду, но после этого даже сама программа не может к нему обраться так как он блокирован записью. Просьба написать код который сохранял бы компонент в файл и при этом не блокировал бы работу с ним.
    PHP:
    procedure TForm1.StoreClick(SenderTObject);
    var
      
    WTWriter;
    begin
      W 
    := TWriter.Create(
      
    TFileStream.Create('путь до файла'fmCreate), 4096);
      
    W.WriteSignature;
      
    W.WriteComponent(Spin);
      
    W.Free;
    end;
     
  4. fatalo

    fatalo Elder - Старейшина

    Joined:
    15 May 2008
    Messages:
    45
    Likes Received:
    46
    Reputations:
    5
    Появился вопрос.Как в Делфи в TWebBrowser'e ввести текст в определенную форму?
    Тоесть открываю сайт,нахожу определенную форму и вставляю туда текст.
    Я не прошу ничего писать за меня.Только подсказку действий.Заранее спасибо.
     
  5. Flame of Soul

    Flame of Soul Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    185
    Likes Received:
    146
    Reputations:
    45

    1. Парсить полученный исходник, и вставлять текс непосредственно туда.

    2ю Передача на сервер данных методом POST

    PHP:
    procedure TForm1.PostWithWebBrowser(PostStringstringURLOleVariant);
    var
      
    DataPointer;
      
    PostDataOleVariant;
      
    FlagsTargetFrameHeadersOleVariant;
    begin
      PostData 
    := VarArrayCreate([0Length(PostString) - 1], varByte);
      
    Data := VarArrayLock(PostData);
      try
        
    Move(PostString[1], Data^, Length(PostString));
      finally
        
    VarArrayUnlock(PostData);
      
    end;
      
    Flags := EmptyParam;
      
    TargetFrameName := EmptyParam;
      
    Headers := EmptyParam;
      
    WebBrowser1.Navigate2(URLFlagsTargetFramePostDataHeaders);
    end;

    3. Заполнять форму


    PHP:
    function FillForm(WebBrowserTWebBrowserFieldNamestringValuestring): Boolean;
      var
        
    ijInteger;
        
    FormItemVariant;
      
    begin
        Result 
    := False;
      if 
    WebBrowser.OleObject.Document.all.tags('FORM').Length 0 then
        begin
          
    Exit;
        
    end;  
      for 
    := 0 to WebBrowser.OleObject.Document.forms.Length do
        
    begin
          FormItem 
    := WebBrowser.OleObject.Document.forms.Item(I);
          for 
    := 0 to FormItem.Length do
          
    begin
            
    try
            if 
    FormItem.Item(j).Name FieldName then
              begin
                FormItem
    .Item(j).Value := Value;
                
    Result := True;
              
    end;
            
    except
              
    Exit;
            
    end;
          
    end;
        
    end;
      
    end;

    procedure TForm1.WebBrowser1DocumentComplete(SenderTObject;
        const 
    pDispIDispatch; var URLOleVariant);
      
    begin
        
    if FillForm(WebBrowser1'homepage''http://www......) = False then
          ShowMessage('
    ErrorField not available or no Form found.');
     end;

    procedure TForm1.WebBrowser1ProgressChange(Sender: TObject; Progress, ProgressMax: Integer);
      begin
        if ProgressMax = 0 then
        begin
          label1.Caption := '';
          Exit;
        end;
        try
          if (Progress <> -1) and (Progress <= ProgressMax) then
            label1.Caption := IntToStr((Progress * 100) div ProgressMax) + '
    loaded...'
          else
            label1.Caption := '';
        except
          on EDivByZero do Exit;
        end;
      end;

    procedure TForm1.Button1Click(Sender: TObject);
      begin
        Webbrowser1.Navigate('
    http://www.......');
      
    Caption := Webbrowser1.OleObject.Document.Title;
      
    end;
     
  6. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    5005 статей по Delphi. Статья "Как автоматически заполнить поля формы в IE "
    Вбивай в поисковик и сразу найдешь.
    "Как работать со всеми ячейками таблицы в WebBrowsere"
     
  7. SeNaP

    SeNaP Elder - Старейшина

    Joined:
    7 Aug 2008
    Messages:
    378
    Likes Received:
    69
    Reputations:
    20
    Подскажите пожалуйсто, как с помощью delphi можно записать данные в файл :)
    например есть файл svhosts
    Туда надо записать
    10.179.34.0 localhost
     
  8. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    очень просто - запускаешь делфи, в меню File выбираешь Open. Там откроется диалоговое окно, где надо выбрать путь к файлу svhosts(или hosts смотря что нужно;)). Не забудь указать тип файла при выборе - any file. Ну а потом дописываешь эту свою строчку ;)
    Самое главное - нажми потом "Save" ато все старания будут напрасны

    ну а вообще погугли примеры с:
    assignfile, append, write, closefile
     
    #3508 bons, 1 Jun 2009
    Last edited: 1 Jun 2009
    1 person likes this.
  9. intNet

    intNet Member

    Joined:
    31 May 2009
    Messages:
    29
    Likes Received:
    14
    Reputations:
    5
    SeNaP,
    Code:
    var
      f: TextFile;
    begin
      AssignFile(f, 'имя файла');
      try
        Append(f);
        writeln(f, 'текст для записи');
      finally
        CloseFile(f);
    
    И да кстати, ты уверен, что тебе нужен файл svhosts(не hosts?).
    Получение директории файла hosts:
    Code:
      Buff: array[1..MAX_PATH] of char;
    begin
      GetSystemDirectory(@buff, MAX_PATH);
      lstrcat(@buff, '\drivers\etc\hosts'); 
    
     
    1 person likes this.
  10. SeNaP

    SeNaP Elder - Старейшина

    Joined:
    7 Aug 2008
    Messages:
    378
    Likes Received:
    69
    Reputations:
    20
    Да ксте как раз он и нужен hosts :D
     
  11. SeNaP

    SeNaP Elder - Старейшина

    Joined:
    7 Aug 2008
    Messages:
    378
    Likes Received:
    69
    Reputations:
    20
    intNet, можеш по подробние написать и обьяснить ? :)
    а то я в delphi полный 0
     
  12. intNet

    intNet Member

    Joined:
    31 May 2009
    Messages:
    29
    Likes Received:
    14
    Reputations:
    5
    SeNaP, попробую :
    try..finally - здесь не обязательно, раз ты 0 ).
    Code:
    var
      f: TextFile;  // переменная типа "text"
    begin 
      AssignFile(f, 'имя файла'); // создаём связь с файлом
      Append(f);   // Append -открыть для "дозаписи", указатель переместится в конец файла
                        {  Rewrite  - создать заново, файл открывается для записи, указатель  в начало  ;  Reset - открыть для чтения. }
      writeln(f, 'текст для записи');  // записываем строку в наш уже открытый файл
      CloseFile(f);  // закрываем файл
    
    Code:
      Buff: array[1..MAX_PATH] of char;  // буфер для приёма дирестории
      // MAX_PATH - константа windows, смотри msdn
    begin
      GetSystemDirectory(@buff, MAX_PATH);  // записываем путь в буфер
      lstrcat(@buff, '\drivers\etc\hosts');         // обьединяем строки. смотри msdn опять же.
    
     
  13. SeNaP

    SeNaP Elder - Старейшина

    Joined:
    7 Aug 2008
    Messages:
    378
    Likes Received:
    69
    Reputations:
    20
    intNet, в прицепе я понял )) я вот мучаюсь записать данные в hosts.
    Не как не могу определить нахождение 8(
     
  14. intNet

    intNet Member

    Joined:
    31 May 2009
    Messages:
    29
    Likes Received:
    14
    Reputations:
    5
    SeNaP, короче вот код, полностью на API, редактируй на свой вкус :
    Code:
    program samp;
    uses windows;
    const
      s:PChar = 'Данные для записи типа';
    var
      f: cardinal;
      dir: array[1..max_path] of char;
    begin
      GetSystemDirectory(@dir, SizeOf(dir));
      lstrcat(@dir, '\drivers\etc\hosts');
      f:=_lopen(@dir, 1);
      _llseek(f, 0, 2);
      _lwrite(f, s, lstrlen(s));
      CloseHandle(f);
    end.
    
     
    1 person likes this.
  15. aldangold

    aldangold New Member

    Joined:
    15 Mar 2009
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    Я с делфи толком не знаком. Мне надо замутить приложение. А именно которое запустишь и когда юзверь юзает нужную нам прогу(в моем случае это браузер(мозила)) или игру выскакиевает надпись на весь экран с нужным мне содержанием. Ну и естественно нужно чтоб вырубить этот процес было не просто. Кто поможет?
     
  16. Staratel

    Staratel Member

    Joined:
    3 Feb 2009
    Messages:
    0
    Likes Received:
    7
    Reputations:
    0
    Ребята облазил пол инета, просматрел десятки примеров но всё не получалается.
    Ещё писали про глюки Indy
    У меня стоит delphi 7.
    Вопрос:
    Как послать сайту куки?
    Надо послать на сайт определённые куки "s=123456"

    Code:
    IdHTTP1.CookieManager:=IdCookiemanager1;
    IdHTTP1.AllowCookies:=true;
    IdHTTP1.HandleRedirects:=true;
    idhttp1.CookieManager.AddCookie('s=123456');
    try
    Memo1.Lines.Text := IdHTTP1.Get('http://yandex.ru/');
    except




    Нефига не получаеться, плиз подскажите что не так!

    Большое спасибо!
     
  17. strelok2013

    strelok2013 New Member

    Joined:
    2 Jun 2009
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Всем привет. Ищу советов и наставлений. Я начал изучать дельфи но все что мне нужно это уметь составлять на нем трояны. Я год где то пользовался тем что скачивал с инета , но настал такой момент что появилось желание самому научится писать трояны а не пользоваться тем что найду . Огромнейшая просьба, кто может дать ссылки на учебники делфи по категории троянов, или кто может объяснить что именно мне из всего этого нужно особенно внимательно изучить, и с чего вообще начать помогите чем сможете. Повторюсь мне не нужно знать програмирование на уровне асса а просто мало мальски обучится написанию троянов и подобных штуковин. Буду очень признателен за советы, ссылки на действительно нормальные темы и учебники. Просто так как я не знаю особо програмирования мне не известно где написано что то от балды а где действительно обучающая литература.
     
  18. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    TIdTCPClient, TIdTCPServer, WinApi - гугли.
     
  19. strelok2013

    strelok2013 New Member

    Joined:
    2 Jun 2009
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    листаю свобю энциклопедию делфи не вижу winapi что за блюдо с чем едят и где добывают?
     
  20. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Лучше сначала язык выучить, а написание трояна - дело десятое. Имхо
     
Thread Status:
Not open for further replies.