Яндекс.Метрика

    Песочница

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


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

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


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

    Начну с того — где хранится файл с паролями. Этот файл — "Login Data" в папке "C:\Users\SomeUser\AppData\Local\Google\Chrome\User Data\Default\".


    Это база данных 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.

    P.S.S.В ближайшем будущем собираюсь разобраться подробно с DPAPI и по возможности выложить информацию о нем в новой статье. Так же в планах сделать нечто подобное с IE7 и 8.