代码
procedure
EncryptMemory(Data: Pointer; Size: Cardinal);
procedure EncryptData( var A, B: DWORD);
var
_Constant, i: DWORD;
begin
_Constant : = 0 ;
for i : = 0 to 31 do
begin
_Constant : = _Constant - $61C88647;
A : = A + (((B shr 5 ) + $2B4805C2) xor ((B shl 4 ) + $98DFF541) xor (B + _Constant));
B : = B + (((A shr 5 ) + $D8144BA5) xor ((A shl 4 ) + $01AF979B) xor (A + _Constant));
end ;
end ;
var
i: Integer;
_Data1, _Data2: Dword;
begin
for I : = 0 to (Size div 8 ) - 1 do
begin
_Data1 : = Pdword(dword(Data) + (i * 8 ))^;
_Data2 : = Pdword(dword(Data) + (i * 8 ) + 4 )^;
EncryptData(_Data1, _Data2);
Pdword(dword(Data) + (i * 8 ))^ : = _Data1;
Pdword(dword(Data) + (i * 8 ) + 4 )^ : = _Data2;
end ;
end ;
procedure DecryptMemory(Data: Pointer; Size: Cardinal);
procedure DecryptData( var A, B: DWORD);
var
_Constant, i: DWORD;
begin
_Constant : = $C6EF3720;
for i : = 0 to 31 do
begin
B : = B - (((A shr 5 ) + $D8144BA5) xor ((A shl 4 ) + $01AF979B) xor (A + _Constant));
A : = A - (((B shr 5 ) + $2B4805C2) xor ((B shl 4 ) + $98DFF541) xor (B + _Constant));
_Constant : = _Constant + $61C88647;
end ;
end ;
var
i: Integer;
_Data1, _Data2: Dword;
begin
for I : = 0 to (Size div 8 ) - 1 do
begin
_Data1 : = Pdword(dword(Data) + (i * 8 ))^;
_Data2 : = Pdword(dword(Data) + (i * 8 ) + 4 )^;
DecryptData(_Data1, _Data2);
Pdword(dword(Data) + (i * 8 ))^ : = _Data1;
Pdword(dword(Data) + (i * 8 ) + 4 )^ : = _Data2;
end ;
end ;
// 使用
procedure TfrmMain.btn1Click(Sender: TObject);
var
memStream: TMemoryStream;
begin
memStream : = TMemoryStream.Create;
memStream.LoadFromFile( ' .\732 ' );
DecryptMemory(memStream.Memory, memStream.Size);
memStream.SaveToFile( ' .\732_u ' );
FreeAndNil(memStream);
end ;
procedure EncryptData( var A, B: DWORD);
var
_Constant, i: DWORD;
begin
_Constant : = 0 ;
for i : = 0 to 31 do
begin
_Constant : = _Constant - $61C88647;
A : = A + (((B shr 5 ) + $2B4805C2) xor ((B shl 4 ) + $98DFF541) xor (B + _Constant));
B : = B + (((A shr 5 ) + $D8144BA5) xor ((A shl 4 ) + $01AF979B) xor (A + _Constant));
end ;
end ;
var
i: Integer;
_Data1, _Data2: Dword;
begin
for I : = 0 to (Size div 8 ) - 1 do
begin
_Data1 : = Pdword(dword(Data) + (i * 8 ))^;
_Data2 : = Pdword(dword(Data) + (i * 8 ) + 4 )^;
EncryptData(_Data1, _Data2);
Pdword(dword(Data) + (i * 8 ))^ : = _Data1;
Pdword(dword(Data) + (i * 8 ) + 4 )^ : = _Data2;
end ;
end ;
procedure DecryptMemory(Data: Pointer; Size: Cardinal);
procedure DecryptData( var A, B: DWORD);
var
_Constant, i: DWORD;
begin
_Constant : = $C6EF3720;
for i : = 0 to 31 do
begin
B : = B - (((A shr 5 ) + $D8144BA5) xor ((A shl 4 ) + $01AF979B) xor (A + _Constant));
A : = A - (((B shr 5 ) + $2B4805C2) xor ((B shl 4 ) + $98DFF541) xor (B + _Constant));
_Constant : = _Constant + $61C88647;
end ;
end ;
var
i: Integer;
_Data1, _Data2: Dword;
begin
for I : = 0 to (Size div 8 ) - 1 do
begin
_Data1 : = Pdword(dword(Data) + (i * 8 ))^;
_Data2 : = Pdword(dword(Data) + (i * 8 ) + 4 )^;
DecryptData(_Data1, _Data2);
Pdword(dword(Data) + (i * 8 ))^ : = _Data1;
Pdword(dword(Data) + (i * 8 ) + 4 )^ : = _Data2;
end ;
end ;
// 使用
procedure TfrmMain.btn1Click(Sender: TObject);
var
memStream: TMemoryStream;
begin
memStream : = TMemoryStream.Create;
memStream.LoadFromFile( ' .\732 ' );
DecryptMemory(memStream.Memory, memStream.Size);
memStream.SaveToFile( ' .\732_u ' );
FreeAndNil(memStream);
end ;