การปกป้องข้อมูลที่ละเอียดอ่อนจากแฮ็กเกอร์หรือกระบวนการ debuggers โดยการปกป้องภูมิภาคหน่วยความจำจากการเข้าถึงและการตรวจสอบให้แน่ใจว่าข้อมูลจะถูกล้างเมื่อไม่จำเป็นอีกต่อไป

เป็นสิ่งสำคัญในการปกป้องข้อมูลที่ละเอียดอ่อนเช่นปุ่มเข้ารหัสรหัสผ่านและข้อมูลลับอื่น ๆ จากการเข้าถึงที่ไม่ได้รับอนุญาต หากไม่มีการป้องกันหน่วยความจำที่เหมาะสมแม้กระทั่งข้อมูลที่ละเอียดอ่อนที่เก็บไว้ชั่วคราวในหน่วยความจำอาจมีความเสี่ยงต่อการถูกโจมตีเช่นการทิ้งหน่วยความจำหรือการฉีดกระบวนการ หน่วยนี้ช่วยล็อคและปกป้องหน่วยความจำเพื่อให้มั่นใจว่าข้อมูลที่ละเอียดอ่อนจะถูกป้องกันและถูกลบอย่างปลอดภัยเมื่อไม่จำเป็นต้องใช้อีกต่อไป
ProtectedMemory ไปยังโครงการ Delphi ของคุณProtectMemory , UnProtectMemory และขั้นตอน ReleaseProtectedMemory เพื่อรักษาความปลอดภัยของหน่วยความจำของคุณReleaseAllProtectedMemoryTProtectedStreamTProtectedStream ใหม่ซึ่งสืบทอดมาจาก TMemoryStreamVirtualAlloc สำหรับการจัดสรรหน่วยความจำและ VirtualProtect เพื่อป้องกันและไม่ป้องกันหน่วยความจำIsProtected ช่วยให้คุณสลับระหว่างสถานะการป้องกัน (ไม่มีการเข้าถึง) และสถานะที่ไม่มีการป้องกัน (อ่าน/เขียน) 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) : ปกป้องภูมิภาคหน่วยความจำที่ระบุโดยการตั้งค่าเป็น PAGE_NOACCESS และล็อคเพื่อป้องกันการเพจ ข้อมูลถูกคัดลอกไปยังบล็อกหน่วยความจำที่ได้รับการป้องกันใหม่และตัวชี้ดั้งเดิมได้รับการปรับปรุงเพื่อชี้ไปที่บล็อกที่ได้รับการป้องกันนี้
UnProtectMemory(DataPtr: Pointer) : คืนค่าการป้องกันหน่วยความจำไปที่ PAGE_READWRITE และลบภูมิภาคออกจากรายการบล็อกหน่วยความจำที่ได้รับการป้องกัน
ReleaseProtectedMemory(DataPtr: Pointer) : คืนค่าการเข้าถึงหน่วยความจำล้างเนื้อหาโดยการทำให้หน่วยความจำเป็นศูนย์อย่างปลอดภัยและลบออกจากรายการที่ได้รับการป้องกัน
ReleaseAllProtectedMemory() : เผยแพร่และล้างพื้นที่หน่วยความจำที่ได้รับการป้องกันทั้งหมด
Shadi Ajam
ใช่! เราชอบการสนับสนุนของคุณ! กรุณาให้มัน? และแบ่งปันกับผู้อื่น
แบ่งปันบนโซเชียลมีเดีย :