Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [for newbie] Проходим авторизацию "Вконтакте" 
:(
    Опции темы
Jakeroid
  Дата 10.1.2011, 15:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 15.3.2009

Репутация: нет
Всего: нет



Предыстория:
Недавно мне понадобилось авторизоваться вконтакте программно. Я попробовал, но потом началась сессия... И так не закончил. Но вот теперь я закрыл сессию на стипендию. Да, поздравьте меня smile! И решил закончить это дело.
Цель:
Получить доступ к персональной части страницы vkontakte.ru. То есть заиметь злой rmixsid! Кто пробовал, тот поймет.
Примечание:
Статья объясняет принцип авторизации, я не выкладываю готовый код, или программу, в этом нет смысла. Кто понимает в программировании, тот сможет это сделать и на Delphi и на C++.
Тем кому не понятны слова, прошу на этот замечательный СЕКРЕТНЫЙ сайт, о котором не знают новички! Я вам раскрываю секрет откуда черпают знания трУхАцкЕры.
_http://google.com/
Что использовал я?
Среда разработки:----------------------Delphi 7
Язык программирования:----------------Object Pascal 
Библиотека для протокола HTTP:------Indy 10
Библиотека для парсинга текста:-----TRegExpr
Сниффер:--------------------------------HTTP Analyzer V5

И так приступим!
Let's go! Let's Rock!


Разобрав что и как, я выяснил. Браузер отправляет 2 пост запроса. При этом данные передаваемые серверу одинаковые всегда для одного и того же пользователя. Копнув глубже я увидел, что в куках сидит remixsid. Он же ведь где то генерируется? Да. Это происходит после первого пост запроса. Сервер редиректид браузер на другую страницу, пустую, но в коде java скрипт. В скрипте генерятся куки. Поскольку Indy не захотела скачать этот скрипт. Я решил не заморачиваться. Ведь есть простой путь. 
Пройти авторизацию на мобильной версии вконтакте. А потом добавить куки, и получить доступ к полноценной.

Авторизация мобильной версии проходит тоже в два пост запроса.
Первый очень простой, нам следует передать только два параметра:
Цитата

[email protected]
pass=qwerty

Где email - мыло пользователя, pass - пароль(и дураку понятно).
В ответе приходит "мНогАбУкФ". 
Например:
Цитата
<html>
  <head>
    <meta http-equiv='content-type' content='text/html; charset=windows-1251' />
  </head>
  <body onload="try { document.getElementById('l').submit(); } catch(e) { document.getElementsByTagName('form')[0].submit(); }">
    <form id='l' method='post' action='http://m.vkontakte.ru/login'>
      <input type='hidden' name='s' value='5555540eb7f66d5f3678037aa931883eca1bd1ae77a32cae9361aff0' />
            <input type='hidden' name='op' value='slogin' />
      <input type='hidden' name='redirect' value='1' />
      <input type='hidden' name='expire' value='0' />
      <input type='hidden' name='to' value='' /><input type='hidden' name='to' value='' /><input type="submit" value="Продолжить"/>
    </form>
  </body>
</html>

Как мы сдесь видим, нас интересуют несколько параметров. Каждый из них имеет свой "name" и "value".
Что бы спарсить их я использовал следующую функцию:
Код
function AuthPars(rStr: string): string;
var
  rExp: TRegExpr;
begin
  try
    rExp:= TRegExpr.Create;
    rExp.Expression:= 'name=\''(.*?)\''\svalue=\''(.*?)\''';
    if rExp.Exec(rStr) then
    begin
      http.Request.CustomHeaders.Add('Cookie: remixsid='+rExp.Match[2]); //Описание этой строки ниже
      repeat
        Result:= Result + rExp.Match[1] + '=' + rExp.Match[2] + #13#10;
      until not rExp.ExecNext;
    end;
  finally
    rExp.Free;
  end;

Зачем же я добавил в CustomHeaders remixsid? А что бы мы смогли после авторизации на m.vkontakte.ru, зайти на любую страницу полной версии.
А вот как примерно должна выглядеть функция авторизации:
Код
function AuthVK(login, pass: string): string;
var
  s: TStringList;
  Astr: string;
begin
  try
    s:= TStringList.Create;
    s.Add('email='+login);
    s.Add('pass='+pass);
    http.HandleRedirects:= true;
    Astr:= http.Post('http://login.vk.com/?act=login&to=&from_host=m.vkontakte.ru&pda=1', s);
    s.Clear;
    s.Text:= AuthPars(Astr); //Функция парсинга
    Result:= http.Post('http://m.vkontakte.ru/login', s);
  finally
    s.Free;
  end;
end;


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

УДАЧИ! ;) 

P.S. Тему создал для уменьшения количества вопросов по поводу авторизации вконтакте. Я думаю новичкам теперь не создаст трудностей разобраться что и как.

Это сообщение отредактировал(а) Jakeroid - 10.1.2011, 15:23
PM MAIL   Вверх
Mifody
Дата 11.1.2011, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 5.8.2008

Репутация: 2
Всего: 2



Доброго времени суток.
Глупый вопрос можно? А зачем такие танцы с бубном???
И зачем "танцы" с мобильным контактом ???

По моему намного проще авторизоваться сразу на нормальном контакте, на не искать заднюю дверь smile.
PM MAIL WWW   Вверх
Jakeroid
Дата 11.1.2011, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 15.3.2009

Репутация: нет
Всего: нет



Потому что статья только для новичков в программировании. А моя indy не захотела качать скрипт ПК версии.

НО! Как я отписался в статье, там главное понять откуда берется remixsid. Если вы умеете работать с сокетами в С++, никто вам не мешает сделать это через ПК версию, по своему. Елегантно и красиво. Ну а если вы школьник, и вчера установили делфи. То статья максимально ориентированна на вас ;).
PM MAIL   Вверх
Mifody
Дата 11.1.2011, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 5.8.2008

Репутация: 2
Всего: 2



Тогда сори, не знал что Инди такое не умеет, сам синапсом пользуюсь smile.
А так, неплохая статейка ;).
PM MAIL WWW   Вверх
bagos
Дата 2.2.2011, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 275
Регистрация: 17.6.2006

Репутация: нет
Всего: 1



Да, молодец парень что написал, но имхо много лишнего, rmixsid так и не понял зачем он нужен для получения доступа к странице, я не профи в этом вопросе, но когда то делал прогу визуально работающую как icq, только для вконтакте, и никакой rmixsid мне не понадобился;) хотя может там многое поменялось, но не думаю)))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0668 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.