Как залогиниться через HTTPS ?

Discussion in 'WASM.NETWORKS' started by Flasher, Oct 16, 2009.

  1. Flasher

    Flasher Member

    Blog Posts:
    0
    Joined:
    Jan 31, 2004
    Messages:
    640
    Необходимо программно залогиниться сюда. Юзаю фнукции wininet, но не знаю в каком виде передать логин и пасс.

    Вот код:
    Code (Text):
    1. Login proc
    2.      local hOpen:dword
    3.      local hRequest:dword
    4.      local hConnect:dword
    5.      local buffer[4096]:byte
    6.      local bytewrite:dword
    7.  
    8.        invoke InternetOpen,$CTA0("steam"),INTERNET_OPEN_TYPE_PRECONFIG,0,0,0
    9.         .if eax != 0
    10.            mov hOpen,eax
    11.            invoke InternetConnect,hOpen,$CTA0("store.steampowered.com"),INTERNET_DEFAULT_HTTPS_PORT,0,0,INTERNET_SERVICE_HTTP,0,0
    12.             .if eax != 0
    13.                mov hConnect,eax
    14.                invoke HttpOpenRequest,hConnect,$CTA0("POST"),$CTA0("login/"),$CTA0("HTTP/1.1"),0,0,0,1
    15.                 .if eax != 0
    16.                    mov hRequest,eax
    17.                    invoke HttpSendRequest,hRequest,0,0,0,0
    18.  
    19.                 invoke InternetReadFile,hRequest,addr buffer,sizeof buffer,addr bytewrite
    20.                 invoke MessageBox,0,addr buffer,0,0
    21.  
    22.                    invoke InternetCloseHandle,hRequest
    23.                 .endif
    24.             .endif
    25.            invoke InternetCloseHandle,hOpen
    26.         .endif
    27.        invoke ExitProcess,0
    28. Login endp
     
  2. Asterix

    Asterix New Member

    Blog Posts:
    0
    Joined:
    Feb 25, 2003
    Messages:
    3,576
    а разве не функции SSL либы надо юзать?
     
  3. Flasher

    Flasher Member

    Blog Posts:
    0
    Joined:
    Jan 31, 2004
    Messages:
    640
    Asterix, через wininet не получится ?
     
  4. Hellspawn

    Hellspawn New Member

    Blog Posts:
    0
    Joined:
    Feb 4, 2006
    Messages:
    310
    Location:
    Москва
    почему? получиться, составь запрос норм только:
    Code (Text):
    1. https://store.steampowered.com/login/
    2. redir=&username=qwerty&password=12345
    или если с капчей
    Code (Text):
    1. redir=&username=qwerty&password=12345&captchagid=55327337876853030&captcha_text=YA%26HKG
     
  5. Flasher

    Flasher Member

    Blog Posts:
    0
    Joined:
    Jan 31, 2004
    Messages:
    640
    Сорри за нубство, но что не так?
    Code (Text):
    1. Login proc
    2.      local hOpen:dword
    3.      local hRequest:dword
    4.      local hConnect:dword
    5.      local buffer[4096]:byte
    6.      local bytewrite:dword
    7.      local dwCodeLen:dword
    8.      local dwcode[20]:dword
    9.  
    10.        invoke InternetOpen,$CTA0("steam"),INTERNET_OPEN_TYPE_PRECONFIG,0,0,0
    11.         .if eax != 0
    12.            mov hOpen,eax
    13.            invoke InternetConnect,hOpen,$CTA0("store.steampowered.com"),INTERNET_DEFAULT_HTTPS_PORT,0,0,INTERNET_SERVICE_HTTP,0,0
    14.             .if eax != 0
    15.                mov hConnect,eax
    16.                invoke HttpOpenRequest,hConnect,$CTA0("POST"),$CTA0("login"),$CTA0("HTTP/1.1"),0,0,0,1
    17.                 .if eax != 0
    18.                    mov hRequest,eax
    19.                    invoke HttpSendRequest,hRequest,$CTA0("Content-Type: application/x-www-form-urlencoded"),47,$CTA0("redir=&username=qwerty&password=12345"),37
    20.                     .if eax == 1
    21.                        mov dwCodeLen,10
    22.                        invoke HttpQueryInfo,hRequest,HTTP_QUERY_STATUS_CODE,addr dwcode,addr dwCodeLen,0
    23.                        invoke MessageBox,0,addr dwcode,addr dwcode,0
    24.                     .endif
    25.                    invoke InternetCloseHandle,hRequest
    26.                 .endif
    27.             .endif
    28.            invoke InternetCloseHandle,hOpen
    29.         .endif
    30.        invoke ExitProcess,0
    31. Login endp
     
  6. Hellspawn

    Hellspawn New Member

    Blog Posts:
    0
    Joined:
    Feb 4, 2006
    Messages:
    310
    Location:
    Москва
    invoke HttpOpenRequest,hConnect,$CTA0("POST"),$CTA0("login/"),$CTA0("HTTP/1.1"),0,0,FLAGS,0
    Code (Text):
    1. INTERNET_FLAG_RELOAD or INTERNET_FLAG_NO_CACHE_WRITE or NTERNET_FLAG_SECURE or INTERNET_FLAG_PRAGMA_NOCACHE
     
  7. Flasher

    Flasher Member

    Blog Posts:
    0
    Joined:
    Jan 31, 2004
    Messages:
    640
    Спасибо большое, получилось. Еще маленький вопрос, а как кукис извлеч из ответа чтобы по этому кукису гулять по другим разделам?
    Code (Text):
    1. mov dwCodeLen,10
    2. invoke HttpQueryInfo,hRequest,HTTP_QUERY_STATUS_CODE,addr dwcode,addr dwCodeLen,0
    3.  .if eax == 1 && dword ptr [dwcode] == '203'
    4.     mov dwCodeLen,sizeof buffer
    5.     invoke HttpQueryInfo,hRequest,HTTP_QUERY_COOKIE,addr buffer,addr dwCodeLen,0
    6.  .endif
    Данный метод не работает.
     
  8. Hellspawn

    Hellspawn New Member

    Blog Posts:
    0
    Joined:
    Feb 4, 2006
    Messages:
    310
    Location:
    Москва
    ну вообще они автоматом цепляться будут, иначе указать флаг INTERNET_FLAG_NO_COOKIES, выташить как куки я не помню, зато вот так можно вытащить весь заголовок ответа:
    Code (Text):
    1. HttpQueryInfoA(pReq,HTTP_QUERY_RAW_HEADERS_CRLF,pbuf,szBuf,dwTmp)
     
  9. Flasher

    Flasher Member

    Blog Posts:
    0
    Joined:
    Jan 31, 2004
    Messages:
    640
    Кажется вот так:
    Code (Text):
    1.                            mov dwCodeLen,sizeof buffer
    2.                            invoke lstrcpy,addr buffer,$CTA0("Set-Cookie")
    3.                            invoke HttpQueryInfo,hRequest,HTTP_QUERY_CUSTOM,addr buffer,addr dwCodeLen,0
    Через HTTP_QUERY_RAW_HEADERS_CRLF глянул, там Set-Cookie, я когда тестил указывал просто Cookie, поэтому не работало.

    Большое спасибо еще раз :)
     
  10. Hellspawn

    Hellspawn New Member

    Blog Posts:
    0
    Joined:
    Feb 4, 2006
    Messages:
    310
    Location:
    Москва
    не знал, что можно так вытаскивать поля :) спс пригодиться.