![]() |
Verschlüsslung - Daten ungeschützt im RAM
Hallo, ich benutze die DCPCrypt Komponenten um eine (text)datei zu verschlüsseln.
Nun ist mir aber aufgefallen, dass immer wenn ich die datei entschlüssele die daten im RAM liegen und das obwohl ich diese direkt verschlüsselt in einer stringlist speichere. Dann ist mit aufgefallen, dass immer wenn ich die Decrypt prozedur aufrufe die daten im RAM liegen bleiben, auch das freigeben der DCP Komponenten löscht die daten nicht. Weiss jemand rat? Hier der verwendete Code:
Delphi-Quellcode:
procedure decrypt(t:Tstrings;AESKey:string);
var i: integer; s: string; Cipher : TDCP_rijndael; begin try Cipher :=TDCP_rijndael.create(nil); Cipher.InitStr(AESKey); t.Text:=HexStrToString(t.Text); for i:= 0 to t.Count-1 do begin s:=B64Decode(t.strings[i]); Cipher.DecryptCFB(S[1],S[1],Length(S)); <- ab hier liegen die daten im RAM t.strings[i]:= s; end; Cipher.Reset; Cipher.Burn; finally Cipher.free; end; end; |
Re: Verschlüsslung - Daten ungeschützt im RAM
Die Speicherstelle überschreiben, was sonst.
Beim löschen von dynamischen Komponenten wird der speicherplatz nicht automatische mit Nullen überschreiben. Überhaupt gibt es für ein Byte im speicher ja keinen undefinierten Zustand. Wenn du den Speicherplatz verändern willst, musst du selber was drüberschreiben z.B. mit Fillchar. Ob du jetzt in die Komponente reinkommst weis ich nicht. Aber dein Decrypteter Text liegt ja (soweit ich das sehe) auch in s und in t.strings[i] vor. Wenn du damit arbeiten willst, musst du ihn nunmal irgendwann entschlüsselt rumliegen haben. |
Re: Verschlüsslung - Daten ungeschützt im RAM
Versuch mal
Delphi-Quellcode:
Statt Nur Cipher.Free;
FreeAndNil(Cipher);
|
Re: Verschlüsslung - Daten ungeschützt im RAM
Zitat:
Davon wird der Inhalt von s nicht gelöscht! Der "String" auf dem Stack dürfte nur ein (erweiterter) Zeiger sein. Also vielleicht noch
Code:
Gruß Gammatester
for i:=1 to length(s) do s[i] := #ff;
|
Re: Verschlüsslung - Daten ungeschützt im RAM
Hallo,
wenn Du Speicher sicher überschreiben willst, solltest Du darauf achten, dass der Speicher nicht ausgelagert wird. Ansonsten steht der Text ja auch in der Auslagerungsdatei. Du musst also den angeforderten Speicher "festpinnen", und nach der Verarbeitung überschreiben. Hierfür gibt es spezielle Befehle in der Windows-Speicherverwaltung. Gruß xaromz |
Re: Verschlüsslung - Daten ungeschützt im RAM
in den beispielen hab ich mal etwas von cipher.burn gelesen. könnte es das sein?
und btw. wie installiert man dcpcrypt denn unter turbo delphi explorer? bzw wie nutzt man es? muss man irgendwas kompilieren? welche unit muss man einbinden? :?: |
Re: Verschlüsslung - Daten ungeschützt im RAM
Wenn ich mich recht entsinne, brauchst Du nur das Projekt (DCPCrypt) kompilieren (installieren der Komponenten funktioniert eh nicht in der Freeware Version des Turbo Explorer's). Natürlich müssen die Pfade zu den DCPCrypt-Verzeichnissen in den Optionen vom TE (Blibliothekspfad und Suchpfad) bzw. in den Projekt-Optionen deines Prog's gesetzt werden.
Anschliessend bindest Du nur noch die benötigten Units in ein entspr. Modul Deines Projekts ein: Im folgenden wird zum Beispiel RC4 mit SHA1 verwendet:
Delphi-Quellcode:
Eine Verwendung der Komponenten aus entspr. Palette ist also nicht notwendig.
unit MyCrypt;
interface uses ..., DCPcrypt2, DCPrc4, DCPsha1; ... implementation ... function TCrypt.CodeData(const TheData:string; DoEncrypt:Boolean):string; var Cipher: TDCP_rc4; begin Result := ''; if Trim(TheData) = '' then Exit; Cipher:= TDCP_rc4.Create(nil); Cipher.InitStr(myKeyPhrase, TDCP_sha1);// initialize the cipher with a hash of the passphrase ... FreeAndNil(Cipher); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz