Hola Feo.
por casualidad me arme este hace un par de dias. funciona solo en las versiones donde se guardan las password en un archivo .json como la
34.0.5
este solo funciona en la versión 34.0.5 porque para que funcione en otras con el archivo .json hay que hacer dinámica la función GetFireFoxPath().
;Written By Pink/Danyfirex
#include <WinAPI.au3>
#include <Array.au3>
Opt("MustDeclareVars", 1)
Global Const $CRYPT_STRING_BASE64 = 0x00000001
Global $h_NSS3 = 0
Global Const $eURL = 1
Global Const $eUser = 3
Global Const $ePass = 5
Global Const $tagSECItem = "dword SECItemType;ptr Data;dword Len"
Global Const $aLibraries[] = ["msvcr100.dll", "msvcp100.DLL", "mozglue.dll", "nss3.dll"]
Global $hSlot = 0
Local $sFireFoxPath = GetFireFoxPath()
Local $sFireFoxProfilePath = _FireFoxProFilePath()
;Start
If _LoadLibraries($sFireFoxPath) And _iniNSS3($sFireFoxPath, $sFireFoxProfilePath) Then
;~ ConsoleWrite("Libaries Loaded" & @CRLF)
;~ ConsoleWrite("FireFox Recovery" & @CRLF)
;Recovery FireFox
FireFoxRecovery($sFireFoxProfilePath)
Exit
Else
;~ ConsoleWrite("Can't load the Libaries" & @CRLF)
Exit
EndIf
Func FireFoxRecovery($sFireFoxProfilePath)
Local $sJsonFile = $sFireFoxProfilePath & "logins.json"
Local $aList = GetJsonArray(FileRead($sJsonFile))
If Not (IsArray($aList)) Or Not (UBound($aList) >= 6) Then
Return False
EndIf
ConsoleWrite("!>>>>>>>>>>>>>FireFox Password Recovery<<<<<<<<<<<<<<" & @CRLF & @CRLF)
For $i = 0 To UBound($aList) - 1 Step 6
ConsoleWrite("URL: " & $aList[$i + $eURL] & @CRLF)
ConsoleWrite("UserName: " & FireFoxDecrypt($aList[$i + $eUser]) & @CRLF)
ConsoleWrite("PassWord: " & FireFoxDecrypt($aList[$i + $ePass]) & @CRLF)
ConsoleWrite(@CRLF)
Next
ConsoleWrite("!>>>>>>>>>>>>>FireFox Password Recovery<<<<<<<<<<<<<<" & @CRLF & @CRLF)
Free()
EndFunc ;==>FireFoxRecovery
Func FireFoxDecrypt($sCryptedData)
Local $iRet = 0
Local $tByteData = DllStructCreate("byte Data[1024]")
Local $dwSize = 0
Local $sDecrypData = ""
Local $DataIn = 0
Local $DataOut = 0
Local $tData = 0
$iRet = DllCall("Crypt32.dll", "bool", "CryptStringToBinary", "str", $sCryptedData, "dword", StringLen($sCryptedData), "dword", $CRYPT_STRING_BASE64, "ptr", DllStructGetPtr($tByteData), "dword*", 8096, "ptr", 0, "ptr", 0)
If $iRet[0] = True Then
$dwSize = $iRet[5]
$hSlot = DllCall($h_NSS3, "ptr:CDECL", "PK11_GetInternalKeySlot")
$hSlot = $hSlot[0]
If Not $hSlot Then
Return $sDecrypData
EndIf
$iRet = DllCall($h_NSS3, "dword:CDECL", "PK11_Authenticate", "ptr", $hSlot, "BOOL", True, "ptr", Null)
Local $iStatus = $iRet[0]
If $iStatus Then Return $sDecrypData
Local $DataIn = DllStructCreate($tagSECItem)
Local $DataOut = DllStructCreate($tagSECItem)
$DataIn.Data = DllStructGetPtr($tByteData)
$DataIn.len = $dwSize
$iRet = DllCall($h_NSS3, "DWORD:CDECL", "PK11SDR_Decrypt", "ptr", DllStructGetPtr($DataIn), "ptr", DllStructGetPtr($DataOut), "ptr", Null)
$iStatus = $iRet[0]
If $iStatus Then Return $sDecrypData
$tData = DllStructCreate("char String[" & $DataOut.len & "]", $DataOut.Data)
$sDecrypData = $tData.String
Return $sDecrypData
Else
Return $sDecrypData
EndIf
EndFunc ;==>FireFoxDecrypt
Func GetJsonArray($sData)
Local $aList = StringRegExp($sData, '\"(hostname|encryptedPassword|encryptedUsername)":"(.*?)"', 3)
Return $aList
EndFunc ;==>GetJsonArray
Func _FireFoxProFilePath()
Local $sPath = @AppDataDir & "\Mozilla\Firefox\"
Return ($sPath & IniRead($sPath & "profiles.ini", "Profile0", "Path", "") & "\")
EndFunc ;==>_FireFoxProFilePath
Func Free()
If $hSlot Then DllCall($h_NSS3, "NONE:CDECL", "PK11_FreeSlot", "ptr", $hSlot)
DllCall($h_NSS3, "NONE:CDECL", "NSS_Shutdown")
DllClose($h_NSS3)
EndFunc ;==>Free
Func _LoadLibraries($sPath)
If _WinAPI_LoadLibrary($sPath & $aLibraries[0]) And _WinAPI_LoadLibrary($sPath & $aLibraries[1]) And _WinAPI_LoadLibrary($sPath & $aLibraries[2]) Then
Return True
Else
Return False
EndIf
EndFunc ;==>_LoadLibraries
Func _iniNSS3($sPath, $sProfilePath)
Local $hResult = 0
$h_NSS3 = DllOpen($sPath & $aLibraries[3])
$hResult = DllCall($h_NSS3, "dword:CDECL", "NSS_Init", "str", $sProfilePath)
If $hResult[0] = 0 And $h_NSS3 Then
Return True
Else
Return False
EndIf
EndFunc ;==>_iniNSS3
Func GetFireFoxPath()
Local $sPath = ""
Local Const $sRegFireFox = "HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox 34.0.5\bin"
Local Const $sKeyName = "PathToExe"
$sPath = RegRead($sRegFireFox, $sKeyName)
If FileExists($sPath) Then
Return StringReplace($sPath, "Firefox.exe", "")
Else
Return ""
EndIf
EndFunc ;==>GetFireFoxPath
Saludos