From 5b9cbdfede2b98dbc5cd494c803273bdd30c8e70 Mon Sep 17 00:00:00 2001 From: AlessandroZ Date: Tue, 24 Feb 2015 16:42:52 +0100 Subject: [PATCH] Fix libnss path --- Linux/src/softwares/browsers/mozilla.py | 49 ++++++++++++++---------- Linux/src/softwares/chats/pidgin.py | 2 +- Linux/standalone/LaZagne | Bin 6144075 -> 6144180 bytes 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/Linux/src/softwares/browsers/mozilla.py b/Linux/src/softwares/browsers/mozilla.py index 6b2c0e04..90a207d4 100644 --- a/Linux/src/softwares/browsers/mozilla.py +++ b/Linux/src/softwares/browsers/mozilla.py @@ -76,15 +76,7 @@ class Mozilla(): def __init__(self): self.credentials_categorie = None - self.dll_NotFound = False - - # tested on different system, the location seems to not change - path = "/usr/lib/x86_64-linux-gnu/libnss3.so" - try: - self.libnss = CDLL(path) - except: - self.dll_NotFound = True - + self.libnss = None self.slot = None self.username = SECItem() @@ -97,8 +89,6 @@ def __init__(self): self.number_toStop = None def __del__(self): - if self.dll_NotFound == False: - self.libnss.NSS_Shutdown() self.libnss = None self.username = None @@ -134,12 +124,25 @@ def manage_advanced_options(self): self.toCheck = ['b', 'd'] self.number_toStop = 3 - def initialize_libnss(self, profile): - if self.libnss.NSS_Init(profile)!=0: - print_debug('ERROR', 'Could not initialize the NSS library\n') - return False - return True - + def initialize_libnss(self, list_libnss, profile): + for lib in list_libnss: + try: + self.libnss = CDLL(lib) + if self.libnss.NSS_Init(profile) == 0: + return True + except: + pass + return False + + def found_libnss(self): + directory = '/usr/lib/' + list_libnss = [] + for root, dirs, files in os.walk(directory): + for file in files: + if file == 'libnss3.so': + list_libnss.append(root + os.sep + file) + return list_libnss + def decrypt(self, software_name, credentials): pwdFound = [] for host, user, passw in credentials: @@ -299,7 +302,7 @@ def found_masterpassword(self): except: pass print_debug('WARNING', 'No password has been found using the brute force attack') - + # ------------------------------ End of Master Password Functions ------------------------------ # main function @@ -318,8 +321,10 @@ def retrieve_password(self): # print the title Header().title_debug(software_name) + list_libnss = self.found_libnss() + # Check if the libnss could be initialized well - if self.dll_NotFound: + if not list_libnss: print_debug('ERROR', 'The libnss have not been initialized because the libnss3.so has not been found') #Check if mozilla folder has been found @@ -340,7 +345,7 @@ def retrieve_password(self): for profile in profile_list: print_debug('INFO', 'Profile path found: %s' % profile) - if self.initialize_libnss(profile): + if self.initialize_libnss(list_libnss, profile): masterPwd = self.is_masterpasswd_set() if masterPwd: print_debug('WARNING', 'A masterpassword is used !!') @@ -354,7 +359,7 @@ def retrieve_password(self): credentials = SqliteDatabase(profile) if not database_find: - print_debug('ERROR', 'Couldn\'t find credentials file (logins.json or signons.sqlite)') + print_debug('INFO', 'No credentials file found (logins.json or signons.sqlite) - or empty content') try: # decrypt passwords on the db @@ -367,6 +372,8 @@ def retrieve_password(self): self.save_db(profile) self.libnss.NSS_Shutdown() + else: + print_debug('ERROR', 'Could not initialize the NSS library\n') # print the results print_output(software_name, pwdFound) \ No newline at end of file diff --git a/Linux/src/softwares/chats/pidgin.py b/Linux/src/softwares/chats/pidgin.py index 3cdf701c..f586266c 100644 --- a/Linux/src/softwares/chats/pidgin.py +++ b/Linux/src/softwares/chats/pidgin.py @@ -9,8 +9,8 @@ class Pidgin(): # if pidgin is started, use the api to retrieve all passwords def check_if_pidgin_started(self): - bus = dbus.SessionBus() try: + bus = dbus.SessionBus() purple = bus.get_object("im.pidgin.purple.PurpleService","/im/pidgin/purple/PurpleObject","im.pidgin.purple.PurpleInterface") acc = purple.PurpleAccountsGetAllActive() diff --git a/Linux/standalone/LaZagne b/Linux/standalone/LaZagne index 3d098f50ae5f6fa2413474a097c6fb964291b1ee..4011582399ccff9e751851beebfb4a45a4647400 100755 GIT binary patch delta 11179 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 F{|C^NkX!%& delta 11802 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�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