Melindungi data sensitif dari peretas atau memproses debugger dengan melindungi daerah memori dari akses dan memastikan data dihapus ketika tidak lagi diperlukan.

Sangat penting untuk melindungi informasi sensitif, seperti kunci enkripsi, kata sandi, dan data rahasia lainnya, dari akses yang tidak sah. Tanpa perlindungan memori yang tepat, bahkan data sensitif yang disimpan sementara dalam memori dapat rentan terhadap serangan seperti tempat pembuangan memori atau injeksi proses. Unit ini membantu mengunci dan melindungi memori, memastikan bahwa data sensitif dilindungi dan dihapus dengan aman saat tidak lagi diperlukan.
ProtectedMemory ke proyek Delphi Anda.ProtectMemory , UnProtectMemory , dan ReleaseProtectedMemory untuk mengamankan memori Anda.ReleaseAllProtectedMemory .TProtectedStreamTProtectedStream baru ditambahkan, mewarisi dari TMemoryStream .VirtualAlloc untuk alokasi memori dan VirtualProtect untuk melindungi dan tidak melindungi memori.IsProtected yang memungkinkan Anda beralih antara status yang dilindungi (tidak ada akses) dan tidak terlindungi (baca/tulis). uses
ProtectedMemory;
var
Data: array [ 0 .. 255 ] of Byte;
DataPtr: Pointer;
begin
Data[ 0 ] := 99 ;
Data[ 1 ] := 11 ;
Data[ 2 ] := 22 ;
Data[ 3 ] := 33 ;
Data[ 4 ] := 44 ;
Data[ 5 ] := 55 ;
DataPtr := @Data[ 0 ];
// Protect the memory (prevents access to the memory region)
ProtectMemory(DataPtr, SizeOf(Data));
// Accessing the protected memory here will return zeros.
// Unprotect the memory before accessing it
UnProtectMemory(DataPtr);
// Optionally release the memory and clear its content
ReleaseProtectedMemory(DataPtr);
end ; uses
ProtectedMemory;
var
SensitiveStr: string;
NonSensitiveStr: string;
DataPtr: Pointer;
begin
SensitiveStr := ' Sensitive Data ' ;
NonSensitiveStr := ' Not Sensitive Data ' ;
// Get a pointer to SensitiveStr's memory
DataPtr := Pointer(SensitiveStr);
// Protect the memory region containing SensitiveStr
Writeln( ' Protecting memory... ' );
ProtectMemory(DataPtr, Length(SensitiveStr) * SizeOf(Char));
// Accessing SensitiveStr here will return zeros or show undefined behavior
Writeln( ' SensitiveStr after protection: ' , SensitiveStr);
// You can still access NonSensitiveStr, which is unaffected
NonSensitiveStr := ' Updated Non-Sensitive Data ' ;
Writeln( ' NonSensitiveStr: ' , NonSensitiveStr);
// UnProtect Memory it's reutrn it's orginal data
Writeln( ' Releasing memory... ' );
UnProtectMemory(DataPtr);
// SensitiveStr is now restored
Writeln( ' Restored SensitiveStr: ' , SensitiveStr);
end ; uses
ProtectedStream;
var
Stream: TProtectedStream;
Data: AnsiString;
Buffer: array [ 0 .. 255 ] of Byte;
begin
Data := ' Sensitive Data ' ;
Stream := TProtectedStream.Create;
try
Stream.Write(PAnsiChar(Data)^, Length(Data));
Data := ' ' ;
Stream.IsProtected := True; // Protect the memory
// Unprotect to read
Stream.IsProtected := False;
Stream.Read(Buffer, 10 );
finally
Stream.Free;
end ;
end ; ProtectMemory(var DataPtr: Pointer; Size: NativeUInt) : Melindungi wilayah memori yang ditentukan dengan mengaturnya ke PAGE_NOACCESS dan menguncinya untuk mencegah paging. Data disalin ke blok memori baru yang dilindungi, dan pointer asli diperbarui untuk menunjuk ke blok yang dilindungi ini.
UnProtectMemory(DataPtr: Pointer) : Mengembalikan perlindungan memori ke PAGE_READWRITE dan menghapus wilayah tersebut dari daftar blok memori yang dilindungi.
ReleaseProtectedMemory(DataPtr: Pointer) : Mengembalikan akses memori, menghapus konten dengan memori dengan aman memori, dan menghapusnya dari daftar yang dilindungi.
ReleaseAllProtectedMemory() : merilis dan membersihkan semua daerah memori yang dilindungi.
Shadi Ajam
YA! Kami akan menyukai dukungan Anda! Tolong berikan? dan bagikan dengan orang lain.
Bagikan di media sosial :