![](https://habrastorage.org/storage1/382e6020/1f6a639b/e8d4a00f/3030e819.jpg)
Здравствуйте!
Не так давно у меня возникла идея о создании своей личной программы для бэкапа паролей Google Chrome. Да, в интернете очень много подобных программ, но результат паранойи (что пароли сливаются на чей то сервер «про запас»), да и желание узнать, чем дышит любимый браузер — перевесили чашу весов.
Рассказывать буду на основе ОС Windows 7.
Начну с того — где хранится файл с паролями. Этот файл — "Login Data" в папке "C:\Users\SomeUser\AppData\Local\Google\Chrome\User Data\Default\".
![](https://habrastorage.org/storage2/b4f/629/dea/b4f629dea76a37972d9e678879d145cb.png)
Это база данных SQLite.
![](https://habrastorage.org/storage2/cb6/cb2/9f5/cb6cb29f536354f54290ab1254148837.png)
В ней есть 14 колонок. Нас же интересуют только 3: origin_url (ссылка на сам сайт), username_value (логин), password_value(пароль). Среди других колонок есть так же: страница авторизации, название элемента ввода для логина и пароля и другие. Все данные незашифровыванны(видно на скрине), кроме поля password_value.
В поле с паролем находится байтовый массив. Выглядит он следующим образом.
![](https://habrastorage.org/storage2/0c7/54f/068/0c754f068f1c65e72d56bd70f81adf64.png)
Способ шифрования выбран очень удобный для разработчиков. Они использовали Data Protection Application Programming Interface (отличная статья (как оказалось позже и единственная), которая описывает принципы работы этой системы), который использует Windows.
Подробнее информация в ссылке, тем более эта система шифрования заслуживает отдельной темы. Вкратце скажу, что эта система работает в одном из 2 режимов.
- С использованием машинного ключа.
Ключ уникален для текущей системы. Но он позволяет разным программам работать с зашифрованными данными без передачи ключа друг — другу, но исключая утечку данных за пределы машины, а точнее пользователя. - С использованием ключа пользователя.
Без комментариев.
Так же стоит отметить, что эту систему безопасности использует всем известный IE версии 7 и старше. Защита в ней устроена ещё на порядок выше, чем у Google Chrome. Там используется вдобавок ещё и энтропия, а в качестве хранилища — используется реестр. Разработчики Microsoft'а приятно удивили.
В конце статьи есть исходный код программы. Основные её моменты мы сейчас разберем.
Итак — начнем!
Нам будет необходимо считать байты поля с паролем, так как хранится пароль именно в байтовом массиве. Для этого я использовал System.Data.SQLite Interop Library версии 1.0.65.0 (есть в архиве).
В проекте использован класс DPAPI, который был найден в интернете. На момент создания проекта не было цели написания статьи, так что автор класса утерян, но снимаю перед ним шляпу — работа проделана серьезная.
Объявим нужные нам объекты и переменные:
![](https://habrastorage.org/storage2/1df/3ba/a06/1df3baa06608fbb6db2e38b1d1d3ec92.png)
Далее мы заполняем DataTable DB базой данных из нашего файла:
![](https://habrastorage.org/storage2/055/5f8/a7a/0555f8a7a7c07a884bda583ade751d13.png)
Теперь осталось только вытащить нужную информацию из неё и записать в файл. На этом этапе файл уже не используется — работа ведется только с объектом DataTable:
![](https://habrastorage.org/storage2/d14/b7f/f25/d14b7ff2592fc6546814391f6daf8aee.png)
В итоге у нас есть HTML-документ с нашими логинами-паролями, которые можно хранить на своем мобильном телефоне, или распечатать и положить в конверт… При желании можно записывать больше полей, но лично мне хватает выше упомянутых трех.
Если есть вопросы — с удовольствием отвечу. Большое спасибо за внимание!
Исходники программы
P.S. Если у Вас 64-битная операционная система, то Вам следует заменить файл библиотеки на тот, что находится в корневой папке архива. Я не гарантирую, что данная программа будет работать на Windows XP, или других ОС. Так как проверялось только на Windows 7.