есть приложение, оно рабоатет с 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.
Всё в группе с манулами есть, почти на все вопросы ответ там нашёл. если "secret" не известен ни как.
я не читал манов(до этого).... кхм. , да, я своеобразный кодер. Но суть от этого не меняется (собсна я тока сейчас и столкнулся с сабжем- этим вечером) т.е. не являясь создателем приложения я не могу высчитать sig для нужного мне запроса? если так, то может кто-нибудь подсказать, можно ли этот sig получить де-факто без использования флэш, одними лишь методами http запросов? как-то же должны иметь возможность программы на дельфи взаимодействовать с этим flash-em =\
узнаёт sig флешка с запроса на сайт создателя приложеня, secret не узнаешь и не сбрутишь A-Za-z{10} если с голосами дело то вообще 20 символов.
собственно вопрос. браузер может имея вводные данные запросить свф-ку (она же "приложение"), и получить в ответ sig. То же самое требуется сделать из обычной программы на дельфи, не являющейся браузером. Вопрос в том, как... =\ зы. все "легально", т.е. нужно просто переписать то, что я могу сделать и сам в браузере - в программу средствами какого-либо компилируемого (Си\Дельфи) языка. Программа собственно уже готова, и вопрос стал только в получении sig не-браузерными методами.
это реально, наснифай запрос от флеш и воссоздай программой, sig меняется из-за присутствия rand но его не обязательно менять, спокойно крутил одно приложение с одинаковым sig всё работает.
я воссоздаю все запросы но для того, чтобы воссоздать тот самый запрос с sig для другого аккаунта, нужен другой sig {от этого - другого аккаунта} (в остальном все идентично). Чтобы отправить в запросе sig, его предварительно нужно как-то программно получить(для этого - другого - акаунта). Вот в этом собственно и проблема, потому как этот самый sig не передается мне изначально (сниффаю. нет никаких сигов в зепросах что я получаю. ни в одном! да и хэшей{наборов символов} этих там нет) т.е. в первом же запросе, в приведенном мною примере, нет ничего даже отдальнно похожего на sig=2623e384b776d7db281ee7bd2a31c12b тем не менее уже во втором запросе мой браузер шлет этот сиг в теле пост запроса. Спрашивается - откуда мой браузер получил этот параметр со значением?)
сам с sig получается с сервера приложения не знаю почему снифер не находит,у меня эти запросы были видны,может проблема в нём?
Eo0 дай плз названия сниффера, с помощью которого ты видел sig'и. Я юзаю smartsniff, никогда не жаловался, но сколько не искал, не смог найти в запросах того, как мне передают эти значения=\
ErrorNeo, HTTP Analyzer V2, ещё может быть автор флеш решил спрятать secret прямо в нём, что крайне не рекомендуется ,есле так и не увидишь попробуй де компилировать. зы. пока такие не встречал.
попробовал снифить HTTP Analyzer V3 ... да, уловил на 1 запрос больше: т.е. первым идет запрос в странице приложения, затем этот запрос, запросы www.tns-counter.ru и counter.yadro.ru, и затем начинаются запросы с sig'ами. Да, HTTP Analyzer их показывает. Как и smartsniff. Только вот он показывает их {sig'и} как часть отправляемых POST-данных. И по-прежнему ни малейшего намека на то, откуда они взялись. вот так всегда. прям как в анекдоте про то, что для того, чтобы просто вкрутить лампочку нужно как минимум 8 программистов.
допускаю, что этот sig как-то чем-то генерируется) однако вопрос по его генерации вне браузера остается открытым.(
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); } переписать на дельфи думаю не будит сложно
[XAOC] - это уже обсуждалось в этой теме. Невозможно получить $viewer_id,$request_params,$api _secret , не являясь разработчиком приложения. Точнее - невозможно получить как минимум $api _secret Браузер получает sig как-то иначе. Допускаю, что он получает его из Флэш. Вопрос опять таки в том, как это эмулировать вне браузера
ну вообще-то $viewer_id - это ид того человека от кого открыта страница с приложением $request_params - массив из списка параметров пост-запроса не вижу тут ничего не возможного это получить
читаешь между строк? прежде чем отвечать на сообщение, прочти его полностью. то, что ты написал не соответствует тому, что приведено в примере работы с АПИ(см второй пост), но даже если это было бы и так, то все равно невозможно получить $api _secret, не являясь разработчиком\владельцем приложения. а без него вся процедура generate_signature($viewer_id,$request_params,$api _secret) не имеет смысла.
интересно что-же не соответствует в моей функции если она работает на отлично ? декомпилятор в руки и вперед