Как засунуть стиллер в dll

Обновлено: 05.07.2024

Ты наверняка слышал о таком классе зловредных приложений, как стилеры. Опытные игроки в онлайн-играх знают, что такое стиллер, как не словить его и даже как создать. Однако создание и распространение карается законом, поэтому лучше не заниматься таким. Так что же такое стиллер?

Когда инфицированная программа начинает работу, то сначала управление получает вирус. Вирус заражает другие программы, а также выполняет запланированные деструктивные действия. Для маскировки своих действий вирус активизируется не всегда, а лишь при выполнении определенных условий (истечение некоторого времени, выполнение определенного числа операций, наступления некоторой даты или дня недели и т. д.).

Стиллер представляет собой программный код, который служит для хищения паролей и прочих данных с компьютера. Раньше данные отправлялись на сниффер, но сейчас уже активно по Интернету распространены коды, которые отправляют похищенное на почту.

Как защитить себя?

В сети интернет мало информации о том, что такое «Стиллеры» и как ими пользоваться. Нужно помнить о том, что они создаются не просто так, ради забавы. Основной их целью является добыча полезной информации с компьютера жертвы для последующей продажи. Создавать и использовать «Стиллер» определенно не стоит, так как за это могут привлечь к ответственности, в том числе и к уголовной. Нужно остерегаться «Стиллера», максимально защитив свой компьютер и не качать файлы с неизвестных источников.

Храните ваши пароли в облаке, пароль от которого вы будете знать на память, это самый надежный способ защитить свои данные. Никогда не сохраняйте пароли и не используйте никакие автозаполнения форм, когда вы например используете обменники валют в автозаполнение могут попасть данные вашей карты, ваш номер телефона и e-mail.

Принцип работы вредоноса

Cтиллеры бывают разные, от разных кодеров с разными возможностями. Они могут воровать все сохраненные вами пароли из всех браузеров, сессию из телеграмма и прочих мессенджеров, куки файлы (для входа на сайты), файлы кошельков популярных криптовалют для дальнейшего их обналичивания, файлы с рабочего стола определенного расширения .doc/.docx/.txt/.log (часто люди хранят файлик с паролями прямо на рабочем столе).

Все эти данные приходят вам в админ-панель от стиллера, где указано с какого IP адреса и имени компьютера это все прилетело. Грубо говоря мы можем забрать все самое ценное, что может быть на компьютере.

После покупки вируса у хакеров вам, как правило, выдают готовую к использованию версию софта с доступом в админ-панель, к тому же дополнительно настраивать уже ничего не нужно. Пример панели на рисунке ниже.


Как создать свой стиллер?

Похищение чужих учетных или других личных данных без надлежащего письменного соглашения карается по закону.

Браузеры в основе которых лежит Chrome или Firefox, хранят логины и пароли пользователей в зашифрованном виде в базе SQLite. Эта СУБД компактна и распространяется бесплатно по свободной лицензии. Так же, как и рассматриваемые нами браузеры: весь их код открыт и хорошо документирован, что, несомненно, поможет нам.

Рекламируя свои продукты, вирусописатели часто обращают внимание потенциальных покупателей на то, что в данный момент их стилер не «палится» антивирусом. Тут надо понимать, что все современные и более-менее серьезные вирусы и трояны имеют модульную структуру, каждый модуль в которой отвечает за что-то свое: один модуль собирает пароли, второй препятствует отладке и эмуляции, третий определяет факт работы в виртуальной машине, четвертый проводит обфускацию вызовов WinAPI, пятый разбирается со встроенным в ОС файрволом.

Так что судить о том, «палится» определенный метод антивирусом или нет, можно, только если речь идет о законченном «боевом» приложении, а не по отдельному модулю.



Chrome

Для начала давай получим файл, где хранятся учетные записи и пароли пользователей. В Windows он лежит по такому адресу:

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

Давай напишем функцию, которая получает путь к базе паролей Chrome. В качестве аргумента ей будет передаваться массив символов с результатом ее работы (то есть массив будет содержать путь к файлу паролей Chrome).

Давай вкратце поясню, что здесь происходит. Мы сразу пишем эту функцию, подразумевая будущее расширение. Один из ее аргументов — поле browser_family , оно будет сигнализировать о семействе браузеров, базу данных которых мы получаем (то есть браузеры на основе Chrome или Firefox).

Если условие browser_family == 0 выполняется, то получаем базу паролей браузера на основе Chrome, если browser_family == 1 — Firefox. Идентификатор CHROME_DB_PATH указывает на базу паролей Chrome. Далее мы получаем путь к базе при помощи функции SHGetFolderPath , передавая ей в качестве аргумента CSIDL значение CSIDL_LOCAL_APPDATA , которое означает:

Функция SHGetFolderPath устарела, и в Microsoft рекомендуют использовать вместо нее SHGetKnownFolderPath . Проблема в том, что поддержка этой функции начинается с Windows Vista, поэтому я применил ее более старый аналог для сохранения обратной совместимости. Вот ее прототип:

После этого функция lstrcat совмещает результат работы SHGetFolderPath с идентификатором CHROME_DB_PATH .

База паролей получена, теперь приступаем к работе с ней. Как я уже говорил, это база данных SQLite, работать с ней удобно через SQLite API, которые подключаются с заголовочным файлом sqlite3.h. Давай скопируем файл базы данных, чтобы не занимать его и не мешать работе браузера.

Теперь подключаемся к базе командой sqlite3_open_v2 . Ее прототип:

Первый аргумент — наша база данных; информация о подключении возвращается во второй аргумент, дальше идут флаги открытия, а четвертый аргумент определяет интерфейс операционной системы, который должен использовать это подключение к базе данных, в нашем случае он не нужен. Если эта функция отработает корректно, возвращается значение SQLITE_OK , в противном случае возвращается код ошибки.

Обрати внимание: при некорректной отработке функции нам все равно необходимо самостоятельно закрыть подключение к базе и удалить ее копию.

Теперь начинаем непосредственно обрабатывать данные в базе. Для этого воспользуемся функцией sqlite3_exec() .

Эта функция имеет такой прототип:

Первый аргумент — наша база паролей, второй — это команда SQL, которая вытаскивает URL файла, логин, пароль и имя пользователя, третий аргумент — это функция обратного вызова, которая и будет расшифровывать пароли, четвертый — передается в нашу функцию обратного вызова, ну а пятый аргумент сообщает об ошибке.

Давай остановимся подробнее на callback-функции, которая расшифровывает пароли. Она будет применяться к каждой строке из выборки нашего запроса SELECT . Ее прототип — int (*callback)(void*,int,char**,char**) , но все аргументы нам не понадобятся, хотя объявлены они должны быть. Саму функцию назовем crack_chrome_db , начинаем писать и объявлять нужные переменные:

В этом цикле формируем BLOB (то есть большой массив двоичных данных). Далее выделяем память, читаем блоб и инициализируем поля DATA_BLOB :

А теперь приступим непосредственно к дешифровке. База данных Chrome зашифрована механизмом Data Protection Application Programming Interface (DPAPI). Суть этого механизма заключается в том, что расшифровать данные можно только под той учетной записью, под которой они были зашифрованы. Другими словами, нельзя стащить базу данных паролей, а потом расшифровать ее уже на своем компьютере. Для расшифровки данных нам потребуется функция CryptUnprotectData .

После этого выделяем память и заполняем массив passwds расшифрованными данными.


Firefox

Переходим к Firefox. Это будет немного сложнее, но мы все равно справимся! Для начала давай получим путь до базы данных паролей. Помнишь, в нашей универсальной функции get_browser_path мы передавали параметр browser_family ? В случае Chrome он был равен нулю, а для Firefox поставим 1.

В случае с Firefox мы не сможем, как в Chrome, сразу указать путь до папки пользователя. Дело в том, что имя папки пользовательского профиля генерируется случайно. Но это ерундовая преграда, ведь мы знаем начало пути ( \\Mozilla\\Firefox\\Profiles\\ ). Достаточно поискать в нем объект «папка» и проверить наличие в ней файла \\logins.json «. Именно в этом файле хранятся интересующие нас данные логинов и паролей. Разумеется, в зашифрованном виде. Реализуем все это в коде.

В самом конце переменная db_loc , которую мы передавали в качестве аргумента в нашу функцию, содержит полный путь до файла logins.json , а функция возвращает 1, сигнализируя о том, что она отработала корректно.

Теперь получим хендл файла паролей и выделим память под данные. Для получения хендла используем функцию CreateFile , как советует MSDN.

Все готово, но в случае с Firefox все не будет так просто, как с Chrome, — мы не сможем просто получить нужные данные обычным запросом SELECT, да и шифрование не ограничивается одной-единственной функцией WinAPI.

Дополнительная информация: Network Security Services (NSS)

Браузер Firefox активно использует функции Network Security Services для реализации шифрования своей базы. Эти функции находятся в динамической библиотеке, которая лежит по адресу C:\Program Files\Mozilla Firefox\nss3.dll .

Все интересующие нас функции нам придется получить из этой DLL. Сделать это можно стандартным образом, при помощи LoadLibrary\GetProcAdress . Код однообразный и большой, поэтому я просто приведу список функций, которые нам понадобятся:

  • NSS_Init ;
  • PL_Base64Decode ;
  • PK11SDR_Decrypt ;
  • PK11_Authenticate ;
  • PK11_GetInternalKeySlot ;
  • PK11_FreeSlot .

Это функции инициализации механизма NSS и расшифровки данных. Давай напишем функцию расшифровки, она небольшая. Я добавлю комментарии, чтобы все было понятно.

Скажу сразу, данная статья была на других бордах, но это лично мною написанная статья, так что, не надо пиздеть "Спиздил и т.д."
Так ебана, всем привет, в этой статье я хотел бы рассказать вам, как приобрести и начать пользоваться стиллером. Статья исключительно для новичков и начинающих, для знающий, ничего интересного тут не будет.

Хотелось бы начать с того, как все таки приобрести стиллер. Все очень просто, приобрести стиллер вы можете по данной ссылке - ага, наебал, здесь не будет рекламы другого борда (Не буду кидать на какой-то определенный стиллер), выбираете стиллер (выбирайте тот стиллер, в котором более менее нормальные отзывы). Выбрали стиллер и пишите ТС'у о покупке, он вам все объясняет, отвечает на ваши вопросы и т.д. Обычно после оплаты (иногда до) вы получаете билд (собственно ваш стиллер) и у некоторых сразу идет DeleteBuild (удаляет ваш стиллер с пк).

Как проверить собственно отстук стиллера, есть много вариантов: на дедике, на виртуалке, на сайте TestMyBin (не реклама), на своем пк (ВАЖНО, ЭТОГО ДЕЛАТЬ СТРОГО НЕ РЕКОМЕНДУЕТСЯ). Я бы сам рекомендовал вам все проверять на TestMyBin, просто загружаете файл и ждете приход лога. Бывают разные стиллеры, у кого-то логи приходят на Хостинг, у кого-то в телеграмм, у кого-то на почту (Возможно еще что-то упустил, не пиздите ток).
Так, проверили отстук, если лог пришел, значит все нормально, билд работает, если лог не пришел, идите в личку с тс'ом и выебывайтесь на него (спросите вежливо, "Почему не приходит лог?"), ТС должен будет разобраться в данном вопросе. Так, ТС разобрался, у вас все работает, все нормально.

Переходим к следующему вопросу, как им пользоваться и нахуй собственно вам вообще этот билд.

Как начать пользоваться стиллером и нахуя вы собственно вообще приобрели данный стиллер, все очень просто, надо будет гнать трафик на данный стиллер и пиздить аккаунты Мамонтов.
Как же все таки начать распространять свой стиллер, все очень просто, для этого есть много способов: группы вк, ютуб, покупка инсталлов, спам на форумах (не рекомендую, вам дадут пизды и я лично за вами выеду). ОЧЕНЬ ВАЖНО перед тем, как начать распространять стиллер, проверьте на детект свой билд, советую проверять на AntiScan или SpyralScaner, если вы уебок и залили на VirusTotal, то вам пизда. Если ваш детект составляет больше 6/26 например, то все очень плохо и ТС пидр, идите криптуйте билд, закриптовать билд можно в данном разделе - ага, опять наебал, рекламы не будет (так же не буду выделять особых людей для крипта). ОЧЕНЬ ВАЖНО после крипта файла, проверяйте его опять на отсук (как проверить, написал выше в статье).

Так ебана, у вас детект 2-3/26, ну или вообще 0, все ахуенно, переходим к тому, на какой файлообменник вам залить свой билд, скажу сразу, все билды должны быть в архиве и под паролем, если вы УТЫРОК который залил билд на файлообменник без архива, то у вас писюн не вырастет. Всегда нужно заливать в архиве, и похуй какой файлообменник (некоторые кнч не сливают, но все же).

Распространять стиллер очень просто, 80% мамкиных хацкеров используют ютуб в качестве основного трафика, я так же советую использовать его, заливаете видосы на ютуб (читы, софт, накрутка и еще всякая поебота), в описание кидаете ссылку скачивание билда и естественно пароль от архива, большинство русских доверяют Яндекс Диск (Не реклама). Так же, если вы ленивый ублюдок и залили всего 1 видос на ютуб и ждете 100+ логов в минуту, хуй там, люди по 50-60 видосов заливают, главное хорошее описание и теги (теги пиздец решают).


Весь код в статье приводится исключительно в образовательных целях и для восстановления собственных утерянных паролей. Похищение чужих учетных или других личных данных без надлежащего письменного соглашения карается по закону.

Итак, браузеры, в основе которых лежит Chrome или Firefox, хранят логины и пароли пользователей в зашифрованном виде в базе SQLite. Эта СУБД компактна и распространяется бесплатно по свободной лицензии. Так же, как и рассматриваемые нами браузеры: весь их код открыт и хорошо документирован, что, несомненно, поможет нам.

В примере модуля стилинга, который я приведу в статье, будет активно использоваться CRT и другие сторонние библиотеки и зависимости, типа sqlite.h. Если тебе нужен компактный код без зависимостей, придется его немного переработать, избавившись от некоторых функций и настроив компилятор должным образом. Как это сделать, я показывал в статье «Тайный WinAPI. Как обфусцировать вызовы WinAPI в своем приложении».

Что скажет антивирус?

Рекламируя свои продукты, вирусописатели часто обращают внимание потенциальных покупателей на то, что в данный момент их стилер не «палится» антивирусом.

Тут надо понимать, что все современные и более-менее серьезные вирусы и трояны имеют модульную структуру, каждый модуль в которой отвечает за что-то свое: один модуль собирает пароли, второй препятствует отладке и эмуляции, третий определяет факт работы в виртуальной машине, четвертый проводит обфускацию вызовов WinAPI, пятый разбирается со встроенным в ОС файрволом.

Так что судить о том, «палится» определенный метод антивирусом или нет, можно, только если речь идет о законченном «боевом» приложении, а не по отдельному модулю.

Chrome

Начнем с Chrome. Для начала давай получим файл, где хранятся учетные записи и пароли пользователей. В Windows он лежит по такому адресу:

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

Давай напишем функцию, которая получает путь к базе паролей Chrome. В качестве аргумента ей будет передаваться массив символов с результатом ее работы (то есть массив будет содержать путь к файлу паролей Chrome).

Давай вкратце поясню, что здесь происходит. Мы сразу пишем эту функцию, подразумевая будущее расширение. Один из ее аргументов — поле browser_family , оно будет сигнализировать о семействе браузеров, базу данных которых мы получаем (то есть браузеры на основе Chrome или Firefox).

Если условие browser_family == 0 выполняется, то получаем базу паролей браузера на основе Chrome, если browser_family == 1 — Firefox. Идентификатор CHROME_DB_PATH указывает на базу паролей Chrome. Далее мы получаем путь к базе при помощи функции SHGetFolderPath , передавая ей в качестве аргумента CSIDL значение CSIDL_LOCAL_APPDATA , которое означает:

Функция SHGetFolderPath устарела, и в Microsoft рекомендуют использовать вместо нее SHGetKnownFolderPath . Проблема в том, что поддержка этой функции начинается с Windows Vista, поэтому я применил ее более старый аналог для сохранения обратной совместимости. Вот ее прототип:

После этого функция lstrcat совмещает результат работы SHGetFolderPath с идентификатором CHROME_DB_PATH .

База паролей получена, теперь приступаем к работе с ней. Как я уже говорил, это база данных SQLite, работать с ней удобно через SQLite API, которые подключаются с заголовочным файлом sqlite3.h. Давай скопируем файл базы данных, чтобы не занимать его и не мешать работе браузера.

Теперь подключаемся к базе командой sqlite3_open_v2 . Ее прототип:

Первый аргумент — наша база данных; информация о подключении возвращается во второй аргумент, дальше идут флаги открытия, а четвертый аргумент определяет интерфейс операционной системы, который должен использовать это подключение к базе данных, в нашем случае он не нужен. Если эта функция отработает корректно, возвращается значение SQLITE_OK , в противном случае возвращается код ошибки.

Обрати внимание: при некорректной отработке функции нам все равно необходимо самостоятельно закрыть подключение к базе и удалить ее копию.

Теперь начинаем непосредственно обрабатывать данные в базе. Для этого воспользуемся функцией sqlite3_exec() .

Продолжение доступно только участникам

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Пишем стилер паролей для Chrome и Firefox на C++. Для самых маленьких

Совсем недавно мы уже рассматривали простейшие примеры написания кейлогера и RAT на C++. Но это только начало. И сегодня мы рассмотрим написание стиллера на этом замечательном языке програмирования.

Браузеры, в основе которых лежит Google Chrome или Mozilla Firefox, хранят логины и пароли пользователей в зашифрованном виде в базе SQLite. Эта СУБД компактна и распространяется бесплатно по свободной лицензии. Так же, как и рассматриваемые нами браузеры: весь их код открыт и хорошо документирован, что, несомненно, поможет нам в создании стиллера.

В примере модуля стилинга, который я приведу в статье, будет активно использоваться CRT и другие сторонние библиотеки и зависимости, типа sqlite.h. Если вам нужен компактный код без зависимостей, придется его немного переработать, избавившись от некоторых функций и настроив компилятор должным образом.

Что скажет антивирус?

Рекламируя свои продукты, вирусописатели часто обращают внимание потенциальных покупателей на то, что в данный момент их стилер не «палится» антивирусом.

Тут надо понимать, что все современные и более-менее серьезные вирусы и трояны имеют модульную структуру, каждый модуль в которой отвечает за что-то свое: один модуль собирает пароли, второй препятствует отладке и эмуляции, третий определяет факт работы в виртуальной машине, четвертый проводит обфускацию вызовов WinAPI, пятый разбирается со встроенным в ОС файрволом.

Так что судить о том, «палится» определенный метод антивирусом или нет, можно, только если речь идет о законченном «боевом» приложении, а не по отдельному модулю.

Стиллер для Chrome

Сразу хочу заметить, что описанный метод подходит лишь для предидущих версий Chrome. В актульных версиях используется шифрование aes256 для данных (пароли, значения куки, кредитки и т.д.). Поэтому можете воспринимать этот материал больше для общепознавательных целей.

Начнем с браузера Google Chrome. Для начала давайте получим файл, где хранятся учетные записи и пароли пользователей. В Windows он лежит по такому адресу:

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

Давайте напишем функцию, которая получает путь к базе паролей Chrome. В качестве аргумента ей будет передаваться массив символов с результатом ее работы (то есть массив будет содержать путь к файлу паролей Chrome):

Давай, вкратце поясню, что здесь происходит. Мы сразу пишем эту функцию, подразумевая будущее расширение. Один из ее аргументов — поле browser_family, оно будет сигнализировать о семействе браузеров, базу данных которых мы получаем (то есть браузеры на основе Chrome или Firefox).

Если условие browser_family = 0 выполняется, то получаем базу паролей браузера на основе Chrome, если browser_family = 1 — Firefox. Идентификатор CHROME_DB_PATH указывает на базу паролей Chrome. После этого мы получаем путь к базе при помощи функции SHGetFolderPath, передавая ей в качестве аргумента CSIDL значение CSIDL_LOCAL_APPDATA, которое означает:

Функция SHGetFolderPath уже устарела, и в Microsoft рекомендуют использовать вместо нее SHGetKnownFolderPath. Проблема кроется в том, что поддержка этой функции начинается с Windows Vista, поэтому я применил ее более старый аналог для сохранения обратной совместимости. Вот ее прототип:

После этого функция lstrcat совмещает результат работы SHGetFolderPath с идентификатором CHROME_DB_PATH.

База паролей получена, теперь приступаем к работе с ней. Как я уже говорил, это база данных SQLite, работать с ней удобно через SQLite API, которые подключаются с заголовочным файлом sqlite3.h. Давайте скопируем файл базы данных, чтобы не занимать его и не мешать работе браузера:

Теперь подключаемся к базе командой sqlite3_open_v2. Её прототип:

Первый аргумент — наша база данных; информация о подключении возвращается во второй аргумент, дальше идут флаги открытия, а четвертый аргумент определяет интерфейс операционной системы, который должен использовать это подключение к базе данных, в нашем случае он не нужен. Если эта функция отработает корректно, возвращается значение SQLITE_OK, в противном случае возвращается код ошибки:

Обратите внимание: при некорректной отработке функции нам все равно необходимо самостоятельно закрыть подключение к базе и удалить ее копию.

Теперь начинаем непосредственно обрабатывать данные в базе. Для этого воспользуемся функцией sqlite3_exec():

Эта функция имеет такой прототип:

Первый аргумент — наша база паролей, второй — это команда SQL, которая вытаскивает URL файла, логин, пароль и имя пользователя, третий аргумент — это функция обратного вызова, которая и будет расшифровывать пароли, четвертый — передается в нашу функцию обратного вызова, ну а пятый аргумент сообщает об ошибке.

Давайте остановимся подробнее на callback-функции, которая расшифровывает пароли. Она будет использоваться к каждой строке из выборки нашего запроса SELECT. Ее прототип — int (*callback)(void*,int,char**,char**), но все аргументы нам не понадобятся, хотя объявлены они должны быть. Саму функцию назовем crack_chrome_db, начинаем писать и объявлять нужные переменные:

В этом цикле формируем BLOB (то есть большой массив двоичных данных). Далее выделяем память, читаем блоб и инициализируем поля DATA_BLOB:

А теперь приступим непосредственно к дешифровке паролей. База данных Chrome зашифрована механизмом Data Protection Application Programming Interface (DPAPI). Суть этого механизма заключается в том, что расшифровать данные можно только под той учетной записью, под которой они были зашифрованы. Другими словами, нельзя вытащить базу данных паролей, а потом расшифровать ее уже на своем компьютере (об этом мы писали в статье «Где в Chrome хранятся пароли»). Для расшифровки данных нам потребуется функция CryptUnprotectData:

После этого выделяем память и заполняем массив passwds расшифрованными данными:

Стиллер для Firefox

Переходим к Firefox. Тут всё будет немного посложнее. Для начала давайте получим путь до базы данных паролей Firefox. Помните, в нашей универсальной функции get_browser_path мы передавали параметр browser_family? В случае Chrome он был равен нулю, а для Firefox установим 1:

В случае с Firefox мы не сможем, как в Chrome, сразу указать путь до каталога пользователя. Дело в том, что имя каталога пользовательского профиля генерируется случайным образом. Но это не помеха, ведь известно начало пути (\\Mozilla\\Firefox\\Profiles\\). Достаточно поискать в нем объект «папка» и проверить наличие в ней файла \\logins.json«. Именно в этом файле хранятся данные логинов и паролей. Разумеется, в зашифрованном виде. Реализуем все это в коде:

В самом конце переменная db_loc, которую мы передавали в качестве аргумента в нашу функцию, содержит полный путь до файла logins.json, а функция возвращает 1, сигнализируя о том, что она отработала корректно.

Теперь получим хендл файла паролей и выделим память под данные. Для получения хендла используем функцию CreateFile, как советует MSDN:

Все готово, но в случае с Firefox все не будет так просто, как с Chrome, — мы не сможем просто получить нужные данные обычным запросом SELECT, да и шифрование не ограничивается одной-единственной функцией WinAPI.

Network Security Services (NSS)

Браузер Firefox активно использует функции Network Security Services для реализации шифрования своей базы паролей. Эти функции находятся в динамической библиотеке, которая лежит по адресу:

Все интересующие функции придется получать из этой DLL. Сделать это можно стандартным образом, при помощи LoadLibrary\GetProcAdress. Код однообразный и большой, поэтому я просто приведу список функций, которые нам понадобятся:

  • NSS_Init;
  • PL_Base64Decode;
  • PK11SDR_Decrypt;
  • PK11_Authenticate;
  • PK11_GetInternalKeySlot;
  • PK11_FreeSlot.

Это функции инициализации механизма NSS и расшифровки данных. Давайте напишем функцию расшифровки, она небольшая. Я добавлю комментарии, чтобы все было понятно:

Теперь осталось парсить файл logins.json и применять нашу функцию расшифровки. Для краткости кода я буду использовать регулярные выражения и их возможности в C++ 11:

Защита от стиллера паролей

Мы разобрались, как хранятся пароли в разных браузерах, и узнали, что нужно делать, чтобы их извлечь. Можно ли защититься от подобных методов восстановления сохраненных паролей? Да, конечно. Если установить в браузере мастер-пароль, то он выступит в качестве криптографической соли для расшифровки базы данных паролей. Без её знания восстановить данные будет невозможно.

Ну как? Немного разобрался? Оставайся с нами и ты узнаешь больше!

Админ сайта. Публикует интересные статьи с других ресурсов, либо их переводы. Если есть настроение, бывает, что пишет и что-то своё.

Читайте также: