Звіт
з лабораторної роботи
Дослідження механізмів зберігання паролів Web-браузера Firefox
1. Теоретичні відомості
WEB-браузери сьогодні використовуються для доступу до інтернет ресурсів для перегляду сторінок, відео, управління/адміністрування деяких ресурсів. Природно чим більше персональних інтернет сторінок відвідує людина, тим складніше управляти паролями до даних ресурсів. Браузери, за останні 3 роки, ввели функціональність запам'ятовування і шифрування паролів які ввели користувачі на сайтах. Природно є величезна кількість рішень по зашифрування паролів, але в моїй завданню використовувалося шифрування PKCS # 11. Але нам не треба вникати в суть шифрування/розшифрування або управління ключами, тому є бібліотеки в яких реалізована дана функція, нам тільки залишається правильно їх викликати.
Імена використовуваних бібліотек: .dll.dll.dll.dll.dll.dll.dll.dll.dll.dll
2. Формулювання завдання
Вивчення механізмів зберігання паролів сучасних web-браузерів.
3. Результати роботи
У процесі виконання даної курсової роботи мною було вивчені і реалізовані наступні дії
. Оголошення і виклик функцій з сторонніх бібліотек.
. Зчитування списку відвіданих інтернет ресурсів.
. Отримання зашифрованих даних та їх розшифровка.
Як я вже зазначив, я використовував стандартні функції з бібліотек
freebl3.dll.dll.dll.dll.dll.dll.dll.dll.dll
softokn3.dll
Причому тільки явним чином я оголошував виклик функцій з nss3.dll
і mozglue.dll, решта використовуються автоматично, неявним викликом. Завантажуємо дані модулі.
HMODULE mozglue=LoadLibrary (L «C: Program Files (x86) Mozilla Firefox mozglue.dll»); nss3=LoadLibrary (L «C: Program Files (x86) Mozilla Firefox nss3.dll »);
обьявлять тип функцій.SECStatus (__cdecl * NSS_InitFunc) (const char * configdir); SECStatus (__cdecl * NSS_ShutdownFunc) (void); PK11SlotInfo * (__ cdecl * PK11_GetInternalKeySlotFunc) (void); void (__cdecl * PK11_FreeSlotFunc) (PK11SlotInfo * slot); SECStatus (__cdecl * PK11_AuthenticateFunc) (PK11SlotInfo * slot, PRBool loadCerts, void * wincx); SECStatus (__cdecl * PK11SDR_DecryptFunc) (SECItem * data, SECItem * result, void * cx); SECStatus (__cdecl * PK11_CheckUserPasswordFunc) (PK11SlotInfo * slot, const char * pw); char * (__ cdecl * PL_Base64DecodeFunc) (const char * src, PRUint32 srclen, char * dest); void (__cdecl * SECITEM_ZfreeItemFunc) (SECItem * zap, PRBool freeit); void (* SECITEM_AllocItem) (SECItem amp; item, int len); _ InitFunc NSSInit=NULL; _ShutdownFunc NSSShutdown=NULL; _GetInternalKeySlotFunc PK11GetInternalKeySlot=NULL; _CheckUserPasswordFunc PK11CheckUserPassword=NULL; _FreeSlotFunc PK11FreeSlot=NULL; _AuthenticateFunc PK11Authenticate=NULL; _Base64DecodeFunc PL_Base64Decode=NULL; SDR_DecryptFunc PK11SDRDecrypt=NULL; _ZfreeItemFunc SECITEM_ZfreeItem=NULL;
Функції проголошені тепер нам треба знайти файл в якому зберігаються дані інтернет сторінок - логін, пароль зашифрованим, адресу сторінки. Згідно з документацією Firefox, ці дані зберігаються в несколькох файлах, але всі вони знаходяться за адресою% appdata%/Roaming/Mozilla/Profile/__ імя_профіля_рандом.default /.
Назва профілю випадкове чіслобуквенное поєднання довгою в 8 байт. У ньому я знайшов 2 файлу в якому є необхідна мені інформація - logins.json і signons.sqlite. У першому файлі інформація зберігається в текстовому вигляді наприклад
{«nextId»: 3, «logins»: [{«id»: 1, «hostname»: «http://mail», «httpRealm»: null, «formSubmitURL»:«http://auth.mail», «usernameField»: «Login», «passwordField»: «Password», «encryptedUsername»: «MDIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECOn8LsIAZGYfBAjkMXIeyeHVBw ==», «encryptedPassword»: «MDIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECHEez + JhoL3oBAimi8QGV8S1sA ==» , «guid»:" {fb59f7db-a682-4a4b-b5f4-f140ba4f2e1b}», «encType»: 1, «timeCreated»: 1417461961022, «timeLastUsed»: 1417461961022, «timePasswordChanged»: 1417461961022, «timesUsed»: 1}, {«id»: 2, «hostname»: «http://facebook
А по друге файлі вона знаходиться в стислому бінарному вигляді. Для роботи мені більш зручний текстовий файл logins.json. Нижче йде код я використовую для обробки даного файл...