Einzelnen Beitrag anzeigen

CorVu5

Registriert seit: 31. Dez 2007
26 Beiträge
 
Delphi 7 Professional
 
#1

Google Chrome Passwörter mit SQLite ausgeben - Problem

  Alt 20. Nov 2008, 21:16
Datenbank: SQLite • Version: 3 • Zugriff über: SQLlite DLL..sorry, keine Ahnung von GBs ;)
Hallo Leute, ich habe ein (für mich) sehr seltsames Problem, und ich bin mir uach nicht sicher ob dies die richtige Section ist, da ich mein Problem noch nicht geau eingrenzen konnte.
Folgendes: Ich hatte ein wenig im Google Chrome Quelltext gestöbert und kam schließlich zu dem Punkt, an dem die Auto-Complete Passwörter gespeichert werden. Dies geschieht in einer SQLite Datenbank, die in den Anwendungsdaten gespeichert wird.
Jetzt wollte ich die Passwörter mal auslesen und entschlüsseln, prinzipiell nicht schwer wenn man den Quellcode hat:
http://src.chromium.org/viewvc/chrom...cc?view=markup

So sieht mein Ansatz aus:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
DB : TSQLiteDatabase;
table : TSQLiteTable;
i : Integer;
DataIn : DATA_BLOB;
DataOut: DATA_BLOB;
DataStream : TMemorystream;
pw : string;
begin
db := TSQLiteDatabase.Create(GetEnvironmentVariable('LOCALAPPDATA') + '\Google\Chrome\User Data\Default\Web Data');
table := DB.GetTable('SELECT * FROM logins');
While not Table.EOF do begin
  DataStream := TMemoryStream.Create;
  dataStream := table.FieldAsBlob(table.FieldIndex['password_value']);
  DataIn.pbData := DataStream.Memory;
  DataIn.cbData := DataStream.Size;
  CryptUnProtectData(@DataIn, nil,nil,nil,nil,0,@DataOut);
  pw := pchar(DataOut.pbData);
  Memo1.Lines.Add(table.FieldAsString(table.FieldIndex['origin_url']) + #13#10 + table.FieldAsString(table.FieldIndex['username_value']) + ' - ' + pw);
  DataStream.Free;
  Table.Next;
end;
end;
Ja, der dürfte noch ziemlich unsauber sein

Nun klappt das IM GRUNDE schon, bei den Passwörtern gibt es allerdings folgendes Problem:
Lautet mein Passwort zum Beispiel "hallo", bekomme ich als beispielsweise heraus:

"halloLMEM"

Wobei die "Sonderzeichen" von PW zu PW unterschiedlich sind, das LMEM steht aber immer drin.
Auch die Anzahl der Sonderzeichen ist immer unterschiedlich, was ein Filtern natürlich extrem erschwert.

Ich kann mir drei Problemursachen vorstellen:
1. Ich benutze FieldAsBlob irgendwie falsch, sodass ich dadurch die überzählogen Werte bekomme.
2. Ich mache einen Fehler bei CryptUnprotectData
3. Ich behandle iwie den zurückgegebenen String falsch, da ich nicht genau weiß wie das in C ist mit Stringtypen und so und aus dem Chrome-code in dieser Hinsicht nix sinnvolles ziehen kann.
Also: Ich habe mich shcon den ganzen Tag damit rumgeärgert und es wäre extrem nett, wenn mir da mal wer nen kleinen Tipp geben könnte
Danke im Voraus
Das Leben ist wie ein Strand...und dann stirbt man.
  Mit Zitat antworten Zitat