Хранение паролей в 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 режимов.
- С использованием машинного ключа.
Ключ уникален для текущей системы. Но он позволяет разным программам работать с зашифрованными данными без передачи ключа друг — другу, но исключая утечку данных за пределы машины, а точнее пользователя. - С использованием ключа пользователя.
Без комментариев.
В конце статьи есть исходный код программы. Основные её моменты мы сейчас разберем.
Итак — начнем!
Нам будет необходимо считать байты поля с паролем, так как хранится пароль именно в байтовом массиве. Для этого я использовал System.Data.SQLite Interop Library версии 1.0.65.0 (есть в архиве).
В проекте использован класс DPAPI, который был найден в интернете. На момент создания проекта не было цели написания статьи, так что автор класса утерян, но снимаю перед ним шляпу — работа проделана серьезная.
Объявим нужные нам объекты и переменные:

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

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

В итоге у нас есть HTML-документ с нашими логинами-паролями, которые можно хранить на своем мобильном телефоне, или распечатать и положить в конверт… При желании можно записывать больше полей, но лично мне хватает выше упомянутых трех.
Если есть вопросы — с удовольствием отвечу. Большое спасибо за внимание!
P.S. Если у Вас 64-битная операционная система, то Вам следует заменить файл библиотеки на тот, что находится в корневой папке архива. Я не гарантирую, что данная программа будет работать на Windows XP, или других ОС. Так как проверялось только на Windows 7.
ChromePass — извлечение паролей из Google Chrome

Бывает, что нужный пароль есть только в одном месте — сохранен в браузере. И если вы используете Google Chrome, то извлечь этот пароль не составит труда: сделать это можно стандартными средствами браузера (Параметры -> Базовые -> Показать сохраненные пароли) или с помощью новой утилиты ChromePass.
Программа поддерживает несколько языков (русского нет, но интерфейс интуитивно понятен), возможна работа через командную строку. Существует только Windows-версия. Freeware.
Официальная страница ChromePass, где можно получить дополнительную информацию и загрузить программу.
Пишем стилер. Как вытащить пароли Chrome и Firefox своими руками

Ты наверняка слышал о таком классе зловредных приложений, как стилеры. Их задача — вытащить из системы жертвы ценные данные, в первую очередь — пароли. В этой статье я расскажу, как именно они это делают, на примере извлечения паролей из браузеров Chrome и Firefox и покажу примеры кода на C++.
![]()
WARNING
Весь код в статье приводится исключительно в образовательных целях и для восстановления собственных утерянных паролей. Похищение чужих учетных или других личных данных без надлежащего письменного соглашения карается по закону.
Итак, браузеры, в основе которых лежит Chrome или Firefox, хранят логины и пароли пользователей в зашифрованном виде в базе SQLite. Эта СУБД компактна и распространяется бесплатно по свободной лицензии. Так же, как и рассматриваемые нами браузеры: весь их код открыт и хорошо документирован, что, несомненно, поможет нам.
В примере модуля стилинга, который я приведу в статье, будет активно использоваться CRT и другие сторонние библиотеки и зависимости, типа sqlite.h. Если тебе нужен компактный код без зависимостей, придется его немного переработать, избавившись от некоторых функций и настроив компилятор должным образом. Как это сделать, я показывал в статье «Тайный WinAPI. Как обфусцировать вызовы WinAPI в своем приложении».
Что скажет антивирус?
Рекламируя свои продукты, вирусописатели часто обращают внимание потенциальных покупателей на то, что в данный момент их стилер не «палится» антивирусом.
Тут надо понимать, что все современные и более-менее серьезные вирусы и трояны имеют модульную структуру, каждый модуль в которой отвечает за что-то свое: один модуль собирает пароли, второй препятствует отладке и эмуляции, третий определяет факт работы в виртуальной машине, четвертый проводит обфускацию вызовов WinAPI, пятый разбирается со встроенным в ОС файрволом.
Так что судить о том, «палится» определенный метод антивирусом или нет, можно, только если речь идет о законченном «боевом» приложении, а не по отдельному модулю.
Chrome
Начнем с Chrome. Для начала давай получим файл, где хранятся учетные записи и пароли пользователей. В Windows он лежит по такому адресу:
C:\Users\%username%\AppData\Local\Google\Chrome\UserData\Default\Login Data
Чтобы совершать какие-то манипуляции с этим файлом, нужно либо убить все процессы браузера, что будет бросаться в глаза, либо куда-то скопировать файл базы и уже после этого начинать работать с ним.
Давай напишем функцию, которая получает путь к базе паролей Chrome. В качестве аргумента ей будет передаваться массив символов с результатом ее работы (то есть массив будет содержать путь к файлу паролей Chrome).
#define CHROME_DB_PATH "\\Google\\Chrome\\User Data\\Default\\Login Data" bool get_browser_path(char * db_loc, int browser_family, const char * location) < memset(db_loc, 0, MAX_PATH); if (!SUCCEEDED(SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, NULL, 0, db_loc))) < return 0; >if (browser_family == 0) < lstrcat(db_loc, TEXT(location)); return 1; >>
char browser_db[MAX_PATH]; get_browser_path(browser_db, 0, CHROME_DB_PATH);
Давай вкратце поясню, что здесь происходит. Мы сразу пишем эту функцию, подразумевая будущее расширение. Один из ее аргументов — поле browser_family , оно будет сигнализировать о семействе браузеров, базу данных которых мы получаем (то есть браузеры на основе Chrome или Firefox).
Если условие browser_family == 0 выполняется, то получаем базу паролей браузера на основе Chrome, если browser_family == 1 — Firefox. Идентификатор CHROME_DB_PATH указывает на базу паролей Chrome. Далее мы получаем путь к базе при помощи функции SHGetFolderPath , передавая ей в качестве аргумента CSIDL значение CSIDL_LOCAL_APPDATA , которое означает:
#define CSIDL_LOCAL_APPDATA 0x001c // \Local Settings\Applicaiton Data (non roaming)
Функция SHGetFolderPath устарела, и в Microsoft рекомендуют использовать вместо нее SHGetKnownFolderPath . Проблема в том, что поддержка этой функции начинается с Windows Vista, поэтому я применил ее более старый аналог для сохранения обратной совместимости. Вот ее прототип:
HRESULT SHGetFolderPath( HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPTSTR pszPath );
После этого функция lstrcat совмещает результат работы SHGetFolderPath с идентификатором CHROME_DB_PATH .
База паролей получена, теперь приступаем к работе с ней. Как я уже говорил, это база данных SQLite, работать с ней удобно через SQLite API, которые подключаются с заголовочным файлом sqlite3.h. Давай скопируем файл базы данных, чтобы не занимать его и не мешать работе браузера.
int status = CopyFile(browser_db, TEXT(".\\db_tmp"), FALSE); if (!status) < // return 0; >
Теперь подключаемся к базе командой sqlite3_open_v2 . Ее прототип:
int sqlite3_open_v2( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb, /* OUT: SQLite db handle */ int flags, /* Flags */ const char *zVfs /* Name of VFS module to use */ );
Первый аргумент — наша база данных; информация о подключении возвращается во второй аргумент, дальше идут флаги открытия, а четвертый аргумент определяет интерфейс операционной системы, который должен использовать это подключение к базе данных, в нашем случае он не нужен. Если эта функция отработает корректно, возвращается значение SQLITE_OK , в противном случае возвращается код ошибки.
sqlite3 *sql_browser_db = NULL; status = sqlite3_open_v2(TEMP_DB_PATH, &sql_browser_db, SQLITE_OPEN_READONLY, NULL); if(status != SQLITE_OK)
![]()
INFO
Обрати внимание: при некорректной отработке функции нам все равно необходимо самостоятельно закрыть подключение к базе и удалить ее копию.
Теперь начинаем непосредственно обрабатывать данные в базе. Для этого воспользуемся функцией sqlite3_exec() .
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Как вытащить из нерабочей Windows пароли от Google Chrome?

Если вы столкнулись с ситуацией, когда у вас не работает Windows, но нужно вытянуть и сохранить пароли от Google Chrome, рекомендуем ознакомиться со следующими рекомендациями. Только изначально отметим, что вы должны иметь возможность попасть в Windows из-под LiveCD или любым другим способом (иными словами, получить доступ к файловой системе). В противном случае, вытащить пароль не удастся.
Где в Google Chrome хранятся пароли пользователя?
Браузер Google Chrome сохраняет все пароли в отдельную папку. В зависимости от версии операционной системы путь к данной директории может быть разный. Приведем примеры:
- Windows ХР: C:\Documents And Settings\Папка с вашем именем пользователя\Local Settings\Application Data\Google\Chrome\ (если имеется папка User Data, то выбираем её или Default);
- Windows Vista: C:\Users\Папка с вашем именем пользователя\AppData\Local\Google\Chrome\User Data\Default;
- Windows 7: C:\Users\Папка с вашем именем пользователя\AppData\Local\Google\Chrome\User Data\Default;
- Windows 8: C:\Users\Папка с вашем именем пользователя\AppData\Local\Google\Chrome\User Data\Default;
- Mac OSX: ~/Library/Application Support/Google/Chrome/Default;
- Linux: ~/. config/google-chrome/Default;
- Chrome OS: /home/chronos/.
Это пути к папкам, где хранятся пароли пользователя для различных сайтов, при условии, что юзер сохранял их через форму «Сохранить пароль».
В папке браузера будет файл Login Data. Он представляет собою SQLite базу данных в виде таблицы. В ней будет несколько столбцов. Первый – сайт, второй – логин, третий – пароль и т д.
Как открыть файл с паролями Login Data?
Открыть файл Login Data можно только программным способом. Для этого рекомендуем скачать программу DB Browser for SQLite.
Скачать DB.Browser (x64) для Windows (7/8/10)
После того, как запустится программа, стоит указать путь к файлу Login Data. Для этого выбираем «Открыть базу данных».
После открываем таблицу и смотрим данные. Однако стоит отметить, что некоторые сайт, например, банковские, шифруют пароли и посмотреть их будет невозможно. Поэтому предлагаем второй способ, как вытащить пароли на Гугл Хром.
Как вытянуть пароли с Гугл Хрома?
Посмотреть пароли можно с помощью программы ChomePass. Чтобы её установить необходимо отключить антивирус. Программа полностью безопасна, однако антивирус рассматривает её как потенциально нежелательный софт.
Внимание! По данным Google и антивирусной лаборатории VirusTotal программа Chrome Pass была признана НЕ БЕЗОПАСНОЙ и была удалена с сайта.
После того, как вы скачаете программу, её нужно будет распаковать вместе с русификатором в одну папку. Далее запускаем exe. файл на своем ПК.
Откроется новое окно, где будут представлены все логины и пароли пользователя.
Чтобы посмотреть пароль, стоит двойным кликом открыть нужную строчку.
Теперь, чтобы вытянуть и сохранить пароли стоит нажать «Файл», «Сохранить выбранные элементы».
После указываем формат, прописываем имя и жмём «Сохранить».
Если вам нужно вытянуть пароли другого пользователя, нужно нажать «Файл», «Дополнительные настройки».
Ставим отметку «Загрузить пароли другой учётной записи» и указываем папку пользователя (ту, которую вы скопировали на поврежденном диске, если вы восстанавливаете пароли).
Пароли можно распечатать и прописать вручную. Импортировать их невозможно. Такая функция данной программой не предусмотрена.