一个游戏客户端文件的字节加解密代码,我花1000元请人解的,存在这,以后应该用得到。...

本文提供了一种用于内存中数据加密和解密的算法实现。该算法通过循环操作修改内存中的DWORD值来达到加密和解密的目的。每轮操作涉及复杂的位运算和常量调整,确保了数据的安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ExpandedBlockStart.gif代码
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;

 

转载于:https://www.cnblogs.com/jxgxy/archive/2010/04/21/1717590.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值