Página 1 de 1

Safari Password recovery

Publicado: 01 Abr 2015, 21:46
por Naker90
Hola a todos, por aquí les dejo esta función que he echo para recuperar las contraseñas guardadas del navegador Safari. Este navegador no tiene la opción de guardar las contraseñas marcada por defecto así que el usuario tendría que marcarla por si mismo.

Imagen


El funcionamiento del script esta todo explicado en el post de SecurityExploded (Exposing the Password Secrets of Apple Safari - [Enlace externo eliminado para invitados]) del cual esta basado el código. Lo he testeado en un Windows 7 x64 con la ultima versión del navegador.

La función retorna una cadena delimitada por "//" entre las distintas credenciales y "--" para delimitar el usuario y la contraseña.
Ejemplo de retorno: Web(Usuario)--Contraseña//Web2(Usuario2)--Contraseña2
#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.8.1
 Author: Naker90

 Script Function:
	Recupera las contraseñas guardadas en el navegador Safari

 El funcionamiento del script esta todo explicado en el post de SecurityExploded (Exposing the Password Secrets of Apple Safari) del cual esta basado mi codigo.
 http://securityxploded.com/safari-password-secrets.php

 La funcion retorna una cadena delimitada por "//" entre las distintas credenciales y "--" para delimitar el usuario y la contraseña

 Ejemplo de retorno:
	Web(Usuario)--Contraseña//Web2(Usuario2)--Contraseña2

 Saludos ;)

#ce ----------------------------------------------------------------------------

#include <String.au3>

Func SafariRecoveryPasswords()

	Const $SALT = '0x1DACA8F8D3B8483E487D3E0A6207DD26E6678103E7B213A5B079EE4F0F4115ED7B148CE54B460DC18EFED6E72775068B4900DC0F30A09EFD0985F1C8AA75C108' & _
			'057901E297D8AF8038600B710E6853772F0F61F61D8E8F5CB23D2174404BB5066EAB7ABD8BA97E328F6E0624D929A4A5BE2623FDEEF14C0F745E58FB9174EF91' & _
			'636F6D2E6170706C652E536166617269'
	Const $DATA_BLOB = 'dword cbData;ptr pbData' ;cbData = Tamaño en bytes -- pbData = Puntero hacia los datos.
	Const $OS = @OSVersion

	Local $KeyPath
	If $OS = 'WIN_XP' Then
		$KeyPath = 'C:\Documents and Settings\' & @UserName & '\Application Data\Apple Computer\Preferences\keychain.plist'
	Else
		$KeyPath = 'C:\Users\' & @UserName & '\AppData\Roaming\Apple Computer\Preferences\keychain.plist'
	EndIf

	If FileExists(@TempDir & '\Pass.xml') Then FileDelete(@TempDir & '\Pass.xml')

	ShellExecuteWait(@ProgramFilesDir & '\Safari\Apple Application Support\plutil.exe', '-convert xml1 -s -o ' & @TempDir & '\Pass.xml ' & Chr(34) & $KeyPath & Chr(34), '', '', 0)

	Local $XmlObject = ObjCreate('Msxml2.DOMDocument.3.0')
	$XmlObject.async = 0
	$XmlObject.load(@TempDir & '\Pass.xml')

	Local $XmlElementString = $XmlObject.getElementsByTagName('string')

	If $XmlElementString.length <> 0 Then

		Local $Users = ''
		For $i = 3 To $XmlElementString.length - 1
			$Users &= $XmlElementString.item($i).text & '\\'
			$i += 5
		Next

		Local $XmlElementData = $XmlObject.getElementsByTagName('data')

		Local $PasswordList = ''
		For $i = 0 To $XmlElementData.length - 1

			Local $Base64Element = $XmlObject.createElement('Base64Decode')
			$Base64Element.dataType = 'bin.base64'
			$Base64Element.text = $XmlElementData.item($i).text

			Local $Base64Decode = $Base64Element.nodeTypedValue

			;------------------------------------------------------------------------------------
			;Estructuras para los datos de entrada -- DATA BLOB

			Local $DataInSize = BinaryLen($Base64Decode)

			Local $DataInStruct = DllStructCreate('byte[' & $DataInSize & ']')
			DllStructSetData($DataInStruct, 1, $Base64Decode)

			Local $DataInBlob = DllStructCreate($DATA_BLOB)
			DllStructSetData($DataInBlob, 1, $DataInSize)
			DllStructSetData($DataInBlob, 2, DllStructGetPtr($DataInStruct))

			;------------------------------------------------------------------------------------

			;------------------------------------------------------------------------------------
			;Estructura para la contraseña -- DATA BLOB

			Local $PwdSize = BinaryLen($SALT)

			Local $PwdStruct = DllStructCreate('byte[' & $PwdSize & ']')
			DllStructSetData($PwdStruct, 1, $SALT)

			Local $PwdDataBlob = DllStructCreate($DATA_BLOB)
			DllStructSetData($PwdDataBlob, 1, $PwdSize)
			DllStructSetData($PwdDataBlob, 2, DllStructGetPtr($PwdStruct))

			;------------------------------------------------------------------------------------

			Local $DataOutStruct = DllStructCreate($DATA_BLOB)

			Local $CryptDllOpen = DllOpen('Crypt32.dll')
			Local $UnprotectData = DllCall($CryptDllOpen, 'bool', 'CryptUnprotectData', _
					'struct*', $DataInBlob, _
					'ptr*', 0, _
					'ptr', DllStructGetPtr($PwdDataBlob), _
					'ptr', 0, _
					'ptr', 0, _
					'dword', 0, _
					'struct*', $DataOutStruct)

			If $UnprotectData[0] = False Then Return 0

			Local $PasswordStruct = DllStructCreate('byte[' & DllStructGetData($DataOutStruct, 1) & ']', DllStructGetData($DataOutStruct, 2))
			Local $PasswordHex = StringTrimLeft(Hex(DllStructGetData($PasswordStruct, 1)), 8)

			While StringRight($PasswordHex, 1) = '0'
				$PasswordHex = StringTrimRight($PasswordHex, 1)
			WEnd

			Local $Password = _HexToString($PasswordHex)

			$PasswordList &= $Password & '\\'

		Next

		Local $UserSplit = StringSplit($Users, '\\')
		Local $PassSplit = StringSplit($PasswordList, '\\')

		Local $Return
		For $i = 1 To UBound($UserSplit) - 1
			$Return &= $UserSplit[$i] & '--' & $PassSplit[$i] & '//'
		Next

		Return $Return

	Else

		Return 0

	EndIf

EndFunc   ;==>SafariRecoveryPasswords
Tambien le he echo una GUI para el que la quiera probar.

Imagen


Saludos

Re: Safari Recovery Passwords

Publicado: 01 Abr 2015, 22:23
por LeonDk
Muchas gracias, Naker

Re: Safari Recovery Passwords

Publicado: 01 Abr 2015, 23:49
por SadFud
buen aporte naker

Re: Safari Recovery Passwords

Publicado: 02 Abr 2015, 00:19
por MCN

Re: Safari Recovery Passwords

Publicado: 03 Abr 2015, 17:56
por Pink
gracias bro ta gueno. de seguro existe un archivo para darle a esos checkbox por default.

saludos

Re: Safari Recovery Passwords

Publicado: 03 Abr 2015, 18:11
por Naker90
Gracias a todos bros ;)
Pink escribió:gracias bro ta gueno. de seguro existe un archivo para darle a esos checkbox por default.

saludos
Si Pink en eso mismo habia pensado pero todavia no lo he mirado, de todas formas no creo que sea muy complicado.
Saludos

PD: Que algún mod edite el tema no es "Recovery passwords" es "Password recovery" , Gracias.

Re: Safari Password recovery

Publicado: 03 Abr 2015, 22:18
por Scorpio
Ya lo he cambiado, te quedaron de lujo bro, sigue así.

//Regards.

Re: Safari Password recovery

Publicado: 04 Abr 2015, 11:53
por comand
Excelente Naker

Re: Safari Password recovery

Publicado: 05 Abr 2015, 01:22
por M3
Guapo , gracias compadre

Re: Safari Password recovery

Publicado: 05 Abr 2015, 08:02
por CrypterHacker
Buen trabajo broooooo