Хранение паролей в Chrome / Хабрахабр



Хранение паролей в Chrome

из песочницы



Здравствуйте!



Не так давно у меня возникла идея о создании своей личной программы для бэкапа паролей Google Chrome. Да, в интернете очень много подобных программ, но результат паранойи (что пароли сливаются на чей то сервер «про запас»), да и желание узнать, чем дышит любимый браузер — перевесили чашу весов.







Рассказывать буду на основе ОС Windows 7.



Начну с того — где хранится файл с паролями. Этот файл — "Login Data" в папке "C:UsersSomeUserAppDataLocalGoogleChromeUser DataDefault".





Это база данных SQLite.







В ней есть 14 колонок. Нас же интересуют только 3: origin_url (ссылка на сам сайт), username_value (логин), password_value(пароль). Среди других колонок есть так же: страница авторизации, название элемента ввода для логина и пароля и другие. Все данные незашифровыванны(видно на скрине), кроме поля password_value.

В поле с паролем находится байтовый массив. Выглядит он следующим образом.







Способ шифрования выбран очень удобный для разработчиков. Они использовали Data Protection Application Programming Interface (отличная статья (как оказалось позже и единственная), которая описывает принципы работы этой системы), который использует Windows.

Подробнее информация в ссылке, тем более эта система шифрования заслуживает отдельной темы. Вкратце скажу, что эта система работает в одном из 2 режимов.


  1. С использованием машинного ключа.

    Ключ уникален для текущей системы. Но он позволяет разным программам работать с зашифрованными данными без передачи ключа друг — другу, но исключая утечку данных за пределы машины, а точнее пользователя.
  2. С использованием ключа пользователя.

    Без комментариев.



Так же стоит отметить, что эту систему безопасности использует всем известный IE версии 7 и старше. Защита в ней устроена ещё на порядок выше, чем у Google Chrome. Там используется вдобавок ещё и энтропия, а в качестве хранилища — используется реестр. Разработчики Microsoft’а приятно удивили.



В конце статьи есть исходный код программы. Основные её моменты мы сейчас разберем.


Итак — начнем!



Нам будет необходимо считать байты поля с паролем, так как хранится пароль именно в байтовом массиве. Для этого я использовал System.Data.SQLite Interop Library версии 1.0.65.0 (есть в архиве).

В проекте использован класс DPAPI, который был найден в интернете. На момент создания проекта не было цели написания статьи, так что автор класса утерян, но снимаю перед ним шляпу — работа проделана серьезная.



Объявим нужные нам объекты и переменные:







Далее мы заполняем DataTable DB базой данных из нашего файла:







Теперь осталось только вытащить нужную информацию из неё и записать в файл. На этом этапе файл уже не используется — работа ведется только с объектом DataTable:







В итоге у нас есть HTML-документ с нашими логинами-паролями, которые можно хранить на своем мобильном телефоне, или распечатать и положить в конверт… При желании можно записывать больше полей, но лично мне хватает выше упомянутых трех.



Если есть вопросы — с удовольствием отвечу. Большое спасибо за внимание!



Исходники программы



P.S. Если у Вас 64-битная операционная система, то Вам следует заменить файл библиотеки на тот, что находится в корневой папке архива. Я не гарантирую, что данная программа будет работать на Windows XP, или других ОС. Так как проверялось только на Windows 7.




+33

20 декабря 2011 в 21:30

82

RCAPDART
25,9

G+

http://habrahabr.ru/post/134982/

Губарь Маргарита Александровна