ProtectedMemory Delphi
1.0.0
通过保护内存区域免于访问并确保不再需要时清除数据,从而保护敏感数据或进程访问者。

保护敏感信息(例如加密密钥,密码和其他机密数据)至关重要,免受未经授权的访问。如果没有适当的内存保护,即使在存储器中暂时存储敏感数据也可能容易受到内存转储或过程注入等攻击。该单元有助于锁定和保护内存,确保在不再需要时屏蔽敏感数据并牢固地删除。
ProtectedMemory单元”到您的Delphi项目。ProtectMemory , UnProtectMemory和ReleaseProtectedMemory过程来保护您的内存。ReleaseAllProtectedMemory在使用后释放和清除内存。TProtectedStream类TProtectedStream类,并从TMemoryStream继承。VirtualAlloc进行内存分配和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
是的!我们希望您的支持!请给它吗?并与他人分享。
在社交媒体上分享: