Проект №02. Читаем из Cookies данные. Часть 1.

Опубликовано 2 августа, 2009 в разделе Примеры на C#. Разместил Алексей(admin).

Vkontakte.RU и Cookies

Сегодня я бы хотел начать писать программу, которая смогла бы читать файл с Cookies и вытаскивать оттуда информацию. Начну параллельно с ведением этой статьи. Итак поехали:

Цель.

Программа, которая показывала бы логин-пароль от социальной сети Vkontakte.ru из Cookies в браузерах Mozilla Firefox, Internet Explorer последних версий. Программа должна работать на операционных системах Windows XP, Vista.
PS: Пароль находится в зашифрованном виде, в md5 хеше.

План разработки.

1. Определения нахождения файла с Cookies в браузере Mozilla Firefox, Internet Explorer. Для этого нужно исследовать работу этих браузеров, определить местонахождения сохранения файла(ов) Cookies в зависимости от операционной системы Windows XP, Vista. После этого нужно узнать в каком файле(файлах) сохранён логин-пароль и сохранить пути до этих файлов. Нужно сделать проверки на установленные браузеры, что бы не искать файлы, там где их нет. А по возможности, узнать настройки браузера, где находится папка с куками.
2. Вытащить логин-пароль из файлов Cookies. С помощью регулярного выражения вытащить логин-пароль из полученных файлов.
3. Оформить дизайн программы.

Разработка.

1. Находим местоположение файла с Cookies.

Начну с Firefox. На сайте WikiMozilla я нашёл документацию О профилях Mozilla Firefox, в которой и был путь к файлу с Cookies(cookies.sqlite).

Windows XP
C:\Documents and Settings\<Windows login>\Application Data\Mozilla\Firefox\Profiles\<Profile name>\
Windows Vista
C:\Users\<Windows login>\AppData\Roaming\Mozilla\Firefox\Profiles\<Profile name>\

Cookies в Internet Explorer:

Windows XP
C:\Documents and Settings\<Windows login>\Cookies\
Windows Vista
C:\Users\<Windows login>\AppData\Roaming\Microsoft\Windows\Cookies\

Теперь надо найти все константы этих путей.
Сначала я стал подходить с другого бока. Увидел, что нужно заменить только переменную “Windows login” на Имя пользователя.

String User = System.Environment.UserName;

Дальше надо было определить какая операционная система. Для этого я получил полное название, в которой не указывалось “имени” операционной системы. Поэтому мне пришлось немного изобрести велосипед.

String OS = System.Environment.OSVersion.ToString();
String[] OSVersion = OS.Split(new char[] { '.', ' ' });
//Цифра в OSVersion[3]: 6 - Vista, 5 - XP;

Но потом я нашёл более интересное решение(Работа со специальными папками). В .Net есть переменная, содержащая путь к Cookies Internet Explorer, независимо от версии OS:

Environment.GetFolderPath(Environment.SpecialFolder.Cookies)

А для Mozilla Firefox можно определить путь до папки Application Data.

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

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

Так, пути до папки с Cookies определили, теперь надо определить конкретный путь до самого файла с Cookies.

В Mozilla Firefox это файл cookies.sqlite, но он находится в папке с Профилем к каждому пользователю, а имя папки генерируется “рандомно”. Дабы облегчить себе ненамного задачу, я предположил, что в операционной системе будет только один профиль. Что бы найти имя папки, я просканировал каталог с профилем и взял первую папку(профиль), который там был:

String[] pathFirefoxDir = Directory.GetFileSystemEntries(pathFirefox);
pathFirefox = pathFirefoxDir[0] + @"\cookies.sqlite";

Ну и собственно, путь до файла с “куками” был получен.

Теперь о Internet Explorer. Куки хранятся к каждому серверу в отдельном файле, и порой к одному серверу бывает несколько файлов(user@vkontakte[n].txt), но не во всех находится нужная информация. Дабы упростить, ненамного, я брал опять, только первый попавшийся. Для этого сканируем папку, потом в цикле проверяем наличие имени сервера vkontakte, после того как файл найден записывается путь к файлу и цикл заканчивается.

String[] pathIEDir = Directory.GetFileSystemEntries(pathIE);
String[] filepathIECookies;
for (int i = 0; i < pathIEDir.Length; i++)
{
    filepathIECookies = pathIEDir[i].Split(new char[] { '@', '[' });
    if (filepathIECookies.Length > 1 && filepathIECookies[1].Equals("vkontakte"))
    {
      pathIE = pathIEDir[i];
      break;
    }
}

Ну и теперь для Internet Explorer получен файл.

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

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru
Что можно ещё почитать:

Оставьте комментарий

You must be logged in to post a comment.