function PTencrypt(s:string;key,v:dword):string; var mk,eax,si,ebp,esi,edx,ecx,edi,ebx:dword; re:string; begin ecx:=key or $80010000; ebx:=v; edx:=ebx and $ffff; eax:=(ecx shl $10) or edx; esi:=length(s); re:=copy(s,1,4)+#0#0#0#0+chr(eax)+chr(eax div 256)+chr(eax div $10000)+chr(eax div $1000000); eax:=eax shr 4; edx:=esi+8; eax:=eax+esi; re[1]:=chr(edx); re[2]:=chr(edx div $100); re[3]:=chr(edx div $10000); re[4]:=chr(edx div $1000000); edx:=eax; mk:=ecx; ebx:=ebx+(ecx and 255); ebp:=0; for eax:=4 to esi-1 do begin ecx:=byte(s[eax+1]); edi:=ecx; ecx:=(ecx xor (edx and 255)) xor (ebx and 255); re:=re+chr(ecx); ebx:=(eax div 2) * eax; ebp:=ebp+edi; edx:=edx+ebx; ebx:=0; // may be the packet number ebx:=(ecx and 255) xor ebx; end; ecx:=mk and $ffff0000; edi:=ebp and $ffff; ecx:=ecx or edi; re[5]:=chr(ecx); re[6]:=chr(ecx div $100); re[7]:=chr(ecx div $10000); re[8]:=chr(ecx div $1000000); result:=re; end;