ВКонтакте API вопрос

Discussion in 'Социальные сети' started by ErrorNeo, 19 Dec 2009.

  1. ErrorNeo

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

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    838
    Reputations:
    402
    есть приложение, оно рабоатет с swf-кой(она же есть "приложение") с АПИ контакта и со скриптом на собственном сайте приложения.
    Лог запросов\ответов браузера ниже.

    Вопрос:
    откуда берется так называемый "sig", уникальный для каждого запроса. Каким образом он "впаривается" моему браузеру, и каким образом я могу получить его минуя браузер (программно).

    Во избежание вопросов - пишу программу, которая будет взаимодействовать с приложением ВК.
    Все работает отлично, но есть проблемы с получением "sig", уникальных для различных акаунтов. Эти sig успешно (откуда-то) получает мой браузер, но совершенно не могу понять откуда.

    Code:
    GET /app685176_9239448 HTTP/1.1
    Accept: */*
    Accept-Language: ru
    UA-CPU: x86
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 ()
    Host: vkontakte.ru
    Connection: Keep-Alive
    Cookie: remixchk=5; remixlang=0; remixclosed_tabs=0; remixsid=c5ed98193ed93ed93ed234a93ed2b6047dc9bf10f5325ff03f2d7307; audio_vol=38
    
    
    HTTP/1.1 200 OK
    <тело ответа>
    
    
    POST /api.php HTTP/1.1
    Accept: */*
    Accept-Language: ru-RU
    Referer: http://cs4682.vkontakte.ru/u3458259/5zmzki919ad.zip
    x-flash-version: 10,0,12,36
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 81
    UA-CPU: x86
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 ()
    Host: api.vkontakte.ru
    Connection: Keep-Alive
    Cache-Control: no-cache
    Cookie: remixchk=5; remixlang=0; remixclosed_tabs=0; remixsid=c5ed98193ed93ed93ed234a93ed2b6047dc9bf10f5325ff03f2d7307; audio_vol=38
    
    sig=[COLOR=Yellow]2623e384b776d7db281ee7bd2a31c12b[/COLOR]&method=getServerTime&api%5Fid=685176&v=2%2E0
    
    HTTP/1.1 200 OK
    <тело ответа>
    
    
    POST /api.php HTTP/1.1
    Accept: */*
    Accept-Language: ru-RU
    Referer: http://cs4682.vkontakte.ru/u3458259/5zmzki919ad.zip
    x-flash-version: 10,0,12,36
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 130
    UA-CPU: x86
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 ()
    Host: friendorfoe.msk.ru
    Connection: Keep-Alive
    Cache-Control: no-cache
    
    sig=[COLOR=Yellow]f1a8dbefda72722a78278dea820c49e6[/COLOR]&date=1261170000&method=getGuestsList&vid=43211696&auth%5Fkey=291d6321c94f4455b1e9f4799eb116e5
    
    HTTP/1.1 200 OK
    <тело ответа>

    за решение с меня +15.
     
    #1 ErrorNeo, 19 Dec 2009
    Last edited: 19 Dec 2009
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Так в мануалах же:
     
    _________________________
  3. Eo0

    Eo0 Member

    Joined:
    12 Sep 2009
    Messages:
    62
    Likes Received:
    8
    Reputations:
    0
    Всё в группе с манулами есть, почти на все вопросы ответ там нашёл.
    если "secret" не известен ни как.
     
    #3 Eo0, 20 Dec 2009
    Last edited: 20 Dec 2009
  4. ErrorNeo

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

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    838
    Reputations:
    402
    я не читал манов(до этого).... кхм. , да, я своеобразный кодер. Но суть от этого не меняется
    (собсна я тока сейчас и столкнулся с сабжем- этим вечером)

    т.е. не являясь создателем приложения я не могу высчитать sig для нужного мне запроса?
    если так, то может кто-нибудь подсказать, можно ли этот sig получить де-факто без использования флэш, одними лишь методами http запросов?
    как-то же должны иметь возможность программы на дельфи взаимодействовать с этим flash-em =\
     
  5. Eo0

    Eo0 Member

    Joined:
    12 Sep 2009
    Messages:
    62
    Likes Received:
    8
    Reputations:
    0
    узнаёт sig флешка с запроса на сайт создателя приложеня, secret не узнаешь и не сбрутишь A-Za-z{10} если с голосами дело то вообще 20 символов.
     
  6. ErrorNeo

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

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    838
    Reputations:
    402
    собственно вопрос.
    браузер может имея вводные данные запросить свф-ку (она же "приложение"), и получить в ответ sig.

    То же самое требуется сделать из обычной программы на дельфи, не являющейся браузером.
    Вопрос в том, как... =\

    зы. все "легально", т.е. нужно просто переписать то, что я могу сделать и сам в браузере - в программу средствами какого-либо компилируемого (Си\Дельфи) языка.
    Программа собственно уже готова, и вопрос стал только в получении sig не-браузерными методами.
     
    #6 ErrorNeo, 20 Dec 2009
    Last edited: 20 Dec 2009
  7. Eo0

    Eo0 Member

    Joined:
    12 Sep 2009
    Messages:
    62
    Likes Received:
    8
    Reputations:
    0
    это реально, наснифай запрос от флеш и воссоздай программой, sig меняется из-за присутствия rand но его не обязательно менять, спокойно крутил одно приложение с одинаковым sig всё работает.
     
  8. ErrorNeo

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

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    838
    Reputations:
    402
    я воссоздаю все запросы:)
    но для того, чтобы воссоздать тот самый запрос с sig для другого аккаунта, нужен другой sig {от этого - другого аккаунта} (в остальном все идентично).

    Чтобы отправить в запросе sig, его предварительно нужно как-то программно получить(для этого - другого - акаунта).
    Вот в этом собственно и проблема, потому как этот самый sig не передается мне изначально (сниффаю. нет никаких сигов в зепросах что я получаю. ни в одном! да и хэшей{наборов символов} этих там нет)

    т.е. в первом же запросе, в приведенном мною примере, нет ничего даже отдальнно похожего на sig=2623e384b776d7db281ee7bd2a31c12b
    тем не менее уже во втором запросе мой браузер шлет этот сиг в теле пост запроса.
    Спрашивается - откуда мой браузер получил этот параметр со значением?)
     
    #8 ErrorNeo, 20 Dec 2009
    Last edited: 20 Dec 2009
  9. Eo0

    Eo0 Member

    Joined:
    12 Sep 2009
    Messages:
    62
    Likes Received:
    8
    Reputations:
    0
    сам с sig получается с сервера приложения не знаю почему снифер не находит,у меня эти запросы были видны,может проблема в нём?
     
  10. ErrorNeo

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

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    838
    Reputations:
    402
    Eo0 дай плз названия сниффера, с помощью которого ты видел sig'и.
    Я юзаю smartsniff, никогда не жаловался, но сколько не искал, не смог найти в запросах того, как мне передают эти значения=\
     
  11. Eo0

    Eo0 Member

    Joined:
    12 Sep 2009
    Messages:
    62
    Likes Received:
    8
    Reputations:
    0
    ErrorNeo, HTTP Analyzer V2, ещё может быть автор флеш решил спрятать secret прямо в нём, что крайне не рекомендуется ,есле так и не увидишь попробуй де компилировать. зы. пока такие не встречал.
     
  12. ErrorNeo

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

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    838
    Reputations:
    402
    попробовал снифить HTTP Analyzer V3 ...
    да, уловил на 1 запрос больше:

    т.е. первым идет запрос в странице приложения, затем этот запрос, запросы
    www.tns-counter.ru и counter.yadro.ru, и затем начинаются запросы с sig'ами.

    Да, HTTP Analyzer их показывает. Как и smartsniff. Только вот он показывает их {sig'и} как часть отправляемых POST-данных.
    И по-прежнему ни малейшего намека на то, откуда они взялись.

    вот так всегда. прям как в анекдоте про то, что для того, чтобы просто вкрутить лампочку нужно как минимум 8 программистов.
    :(
     
    #12 ErrorNeo, 20 Dec 2009
    Last edited: 20 Dec 2009
  13. ErrorNeo

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

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    838
    Reputations:
    402
  14. [XAOC]

    [XAOC] New Member

    Joined:
    6 Oct 2008
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    ну раз ты не видишь что он добывается каким-то запросом, тогда скорее всего он генерируется флешкой
     
  15. ErrorNeo

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

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    838
    Reputations:
    402
    допускаю, что этот sig как-то чем-то генерируется)
    однако вопрос по его генерации вне браузера остается открытым.(
     
  16. [XAOC]

    [XAOC] New Member

    Joined:
    6 Oct 2008
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    PHP:
    function generate_signature($viewer_id,$request_params,$api_secret)
    {
    sort($request_params);
    foreach(
    $request_params as $tempelem)
    $signature .= $tempelem;
    $signature $viewer_id.$signature.$api_secret;
    return 
    md5($signature);
    }
    переписать на дельфи думаю не будит сложно
     
  17. ErrorNeo

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

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    838
    Reputations:
    402
    [XAOC] - это уже обсуждалось в этой теме.
    Невозможно получить $viewer_id,$request_params,$api _secret , не являясь разработчиком приложения.
    Точнее - невозможно получить как минимум $api _secret

    Браузер получает sig как-то иначе. Допускаю, что он получает его из Флэш. Вопрос опять таки в том, как это эмулировать вне браузера
     
    #17 ErrorNeo, 20 Dec 2009
    Last edited: 20 Dec 2009
  18. [XAOC]

    [XAOC] New Member

    Joined:
    6 Oct 2008
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    ну вообще-то
    $viewer_id - это ид того человека от кого открыта страница с приложением
    $request_params - массив из списка параметров пост-запроса

    не вижу тут ничего не возможного это получить
     
  19. ErrorNeo

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

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    838
    Reputations:
    402
    читаешь между строк? прежде чем отвечать на сообщение, прочти его полностью.
    то, что ты написал не соответствует тому, что приведено в примере работы с АПИ(см второй пост), но даже если это было бы и так, то
    все равно
    невозможно получить $api _secret, не являясь разработчиком\владельцем приложения.

    а без него вся процедура
    generate_signature($viewer_id,$request_params,$api _secret)
    не имеет смысла.
     
    #19 ErrorNeo, 20 Dec 2009
    Last edited: 20 Dec 2009
  20. [XAOC]

    [XAOC] New Member

    Joined:
    6 Oct 2008
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    интересно что-же не соответствует в моей функции если она работает на отлично ?

    декомпилятор в руки и вперед