expertcad/SRC/SCSNormBase/U_IBDUP.pas
2025-05-12 10:07:51 +03:00

1406 lines
35 KiB
ObjectPascal
Raw Permalink Blame History

unit U_IBDUP;
interface
uses Classes, Dialogs, Types, zlibEx, SysUtils;
procedure ReadPakIBDFile(aNameFile: string; var aIBDList: TStringList);
//procedure CreateCryptMas(const key1, key2: string; aTestPassMas: BOOLean);
procedure CreateCryptMas(const key1, key2: AnsiString; aTestPassMas: BOOLean);
procedure UnCrypt(NumIn: Pointer; NumOut: Pointer; CryptMas: Pointer);
procedure PackAndSaveIBD(aIBDData: TStringList; aNameFile: string);
var
PassMas: array[1..12*9] of Byte;
PassMasAvk: array[1..12*9] of Byte =
($5E, $7F, $60, $44, $A3, $96, $22, $47, $DF, $DB, $47, $59,
$E5, $55, $6B, $51, $CC, $2F, $CC, $BA, $0B, $5E, $12, $E8,
$35, $FB, $39, $B5, $A9, $E5, $59, $A1, $F4, $05, $0F, $09,
$A0, $84, $54, $10, $5B, $D4, $17, $9F, $04, $FA, $97, $87,
$9A, $82, $AF, $29, $09, $C9, $C4, $DE, $43, $02, $BA, $CB,
$10, $D2, $15, $D7, $15, $84, $6A, $4C, $95, $06, $B1, $D2,
$26, $FF, $20, $8A, $6C, $0A, $4D, $C9, $E9, $4A, $F4, $58,
$7E, $41, $1B, $DE, $C6, $35, $49, $ED, $AC, $74, $66, $7A,
$D7, $52, $70, $BF, $12, $0D, $81, $8A, $00, $00, $00, $00);
CryptMasAvk: array[1..16*14] of Byte =
($05, $22, $0D, $65, $FC, $D1, $42, $96, $05, $22, $0D, $65, $FC, $D1, $42, $96,
$5F, $F0, $90, $40, $EE, $F2, $A5, $81, $AC, $74, $66, $7A, $FA, $DE, $3A, $CA,
$E5, $21, $03, $DD, $E9, $4A, $F4, $58, $BD, $CD, $94, $F5, $E0, $75, $81, $BE,
$95, $06, $B1, $D2, $9B, $E9, $EB, $7B, $EB, $28, $7D, $C1, $43, $02, $BA, $CB,
$D3, $63, $F7, $36, $51, $D6, $82, $D7, $04, $FA, $97, $87, $0D, $74, $A5, $2B,
$AC, $EF, $AF, $A3, $F4, $05, $0F, $09, $E8, $2E, $57, $1A, $C7, $4A, $6D, $A6,
$0B, $5E, $12, $E8, $5D, $1E, $34, $D0, $95, $AE, $4C, $8F, $DF, $DB, $47, $59,
$3C, $24, $A0, $BB, $5D, $69, $1E, $2B, $5E, $7F, $60, $44, $A3, $96, $22, $47,
$DF, $DB, $47, $59, $E5, $55, $6B, $51, $CC, $2F, $CC, $BA, $0B, $5E, $12, $E8,
$35, $FB, $39, $B5, $A9, $E5, $59, $A1, $F4, $05, $0F, $09, $A0, $84, $54, $10,
$5B, $D4, $17, $9F, $04, $FA, $97, $87, $9A, $82, $AF, $29, $09, $C9, $C4, $DE,
$43, $02, $BA, $CB, $10, $D2, $15, $D7, $15, $84, $6A, $4C, $95, $06, $B1, $D2,
$26, $FF, $20, $8A, $6C, $0A, $4D, $C9, $E9, $4A, $F4, $58, $7E, $41, $1B, $DE,
$C6, $35, $49, $ED, $AC, $74, $66, $7A, $D7, $52, $70, $BF, $12, $0D, $81, $8A);
Header: array[1..88] of Byte =
($01, $CD, $AA, $55, $0A, $00, $C8, $C1, $C4, $5F, $32, $30, $30, $33, $5F, $31, // .ͪU..<2E><><EFBFBD>_2003_1
$0C, $00, $D2, $E5, $F1, $F2, $E8, $F0, $EE, $E2, $E0, $ED, $E8, $E5, $01, $00, // ..<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
$00, $00, $0C, $00, $00, $00, $0C, $00, $00, $00, $0C, $00, $00, $00, $0C, $00, // ................
$00, $00, $0C, $00, $00, $00, $0C, $00, $00, $00, $0C, $00, $00, $00, $0C, $00, // ................
$00, $00, $46, $00, $00, $00, $10, $00, $4E, $45, $57, $50, $41, $53, $53, $57, // ..F.....NEWPASSW
$4F, $52, $44, $21, $40, $23, $24, $25 ); // ORD!@#$%@...
implementation
procedure PackAndSaveIBD(aIBDData: TStringList; aNameFile: string);
const
key1 = '3458gGrWEvfGytLK';
key2 = 'NEWPASSWORD!@#$%';
var
FIBDStream: TFileStream;
FileStream: TFileStream;
//TempBuff: PChar;
TempBuff: PAnsiChar;
//SubKey2: string;
SubKey2: AnsiString;
SizeIBD: dword;
PSizeIBD: Pointer;
i, j: integer;
//CryptData: PChar;
CryptData: PAnsiChar;
//UncryptData: PChar;
UncryptData: PAnsiChar;
//KeyIBD: string;
KeyIBD: AnsiString;
PakStream: TMemoryStream;
UnpStream: TMemoryStream;
compressStr: TZCompressionStream;
SizeS: integer;
//TmpBuff: PChar;
TmpBuff: PAnsiChar;
num: array [1..8] of byte;
outnum: array [1..8] of byte;
tempnum: byte;
IBDSize: Integer;
//OutIBD: string;
OutIBD: AnsiString;
//TempStr: string;
TempStr: AnsiString;
strlen: word;
//temps: string;
temps: AnsiString;
nullsim: array [1..8] of byte;
begin
for i := 1 to 8 do
nullsim[i] := 0;
PakStream := TMemoryStream.Create;
PakStream.Position := 0;
for i := 0 to aIBDData.Count - 1 do
begin
temps := aIBDData.Strings[i];
if i < aIBDData.Count - 1 then
begin
temps := temps + #13#10;
strlen := length(temps);
end
else
begin
strlen := length(temps);
temps := temps + #$FF#$FF;
end;
PakStream.WriteBuffer(strlen, 2);
PakStream.WriteBuffer(temps[1], length(temps));
end;
SizeS := PakStream.Size;
GetMem(TmpBuff, SizeS + 10);
PakStream.Position := 0;
PakStream.ReadBuffer(TmpBuff^, SizeS);
PakStream.Clear;
compressStr := TZCompressionStream.Create(PakStream, zcDefault);
CompressStr.Write(pointer(TmpBuff)^, SizeS);
CompressStr.Free;
PakStream.Position := 0;
SizeS := PakStream.Size;
PakStream.Position := SizeS;
if SizeS mod 8 <> 0 then
begin
PakStream.WriteBuffer(nullsim[1], 8 - SizeS mod 8);
end;
PakStream.Position := 0;
SizeS := PakStream.Size;
PakStream.ReadBuffer(Tmpbuff^, SizeS);
PakStream.Position := 0;
GetMem(UncryptData, PakStream.Size);
PakStream.ReadBuffer(UncryptData^, PakStream.Size);
PakStream.Position := 0;
IBDSize := PakStream.Size;
SizeIBD := IBDSize;
PakStream.Position := 0;
SubKey2 := Key2;
KeyIBD := SubKey2;
GetMem(CryptData, IBDSize + 10);
GetMem(UncryptData, IBDSize + 10);
PakStream.ReadBuffer(CryptData^, IBDSize);
PakStream.Free;
i := 0;
while i < SizeIBD do
begin
for j := 1 to 8 do
begin
num[j] := byte((CryptData + i + j - 1)^);
end;
tempnum := num[1];
num[1] := num[2];
num[2] := tempnum;
tempnum := num[3];
num[3] := num[4];
num[4] := tempnum;
tempnum := num[5];
num[5] := num[6];
num[6] := tempnum;
tempnum := num[7];
num[7] := num[8];
num[8] := tempnum;
UnCrypt(@num, @outnum, @CryptMasAvk[17]);
for j := 1 to 8 do
begin
Byte((UnCryptData + i + j - 1)^) := num[j];
end;
i := i + 8;
end;
FreeMem(CryptData);
PakStream := TMemoryStream.Create;
PakStream.WriteBuffer(Header[1], 88);
PakStream.WriteBuffer(SizeIBD, 4);
PakStream.WriteBuffer(UnCryptData^, SizeIBD);
PakStream.SaveToFile(aNameFile);
PakStream.Free;
FreeMem(UnCryptData);
end;
procedure ReadPakIBDFile(aNameFile: string; var aIBDList: TStringList);
const
key1 = '3458gGrWEvfGytLK';
var
FIBDStream: TFileStream;
FileStream: TFileStream;
//TempBuff: PChar;
TempBuff: PAnsiChar;
//SubKey2: string;
SubKey2: AnsiString;
SizeIBD: dword;
PSizeIBD: Pointer;
i, j: integer;
//CryptData: PChar;
CryptData: PAnsiChar;
//UncryptData: PChar;
UncryptData: PAnsiChar;
//KeyIBD: string;
KeyIBD: Ansistring;
PakStream: TMemoryStream;
UnpStream: TMemoryStream;
DecompressStr: TZDecompressionStream;
SizeS: integer;
//TmpBuff: PChar;
TmpBuff: PAnsiChar;
num: array [1..8] of byte;
outnum: array [1..8] of byte;
tempnum: byte;
IBDSize: Integer;
//OutIBD: string;
OutIBD: AnsiString;
//TempStr: string;
TempStr: AnsiString;
FFirstRecLen: Word;
StrLen: Word;
begin
// ShowMessage('Begin');
FIBDStream := TFileStream.Create(aNameFile, fmOpenRead);
// ShowMessage('File readed');
FIBDStream.Seek($4, soFromBeginning);
FIBDStream.ReadBuffer(FFirstRecLen, $2);
GetMem(TempBuff, FFirstRecLen + 1);
FIBDStream.ReadBuffer(TempBuff^, FFirstRecLen);
FIBDStream.ReadBuffer(FFirstRecLen, $2);
FreeMem(TempBuff);
GetMem(TempBuff, FFirstRecLen + 1);
FIBDStream.ReadBuffer(TempBuff^, FFirstRecLen);
FreeMem(TempBuff);
GetMem(TempBuff, 41);
FIBDStream.ReadBuffer(TempBuff^, 40);
FreeMem(TempBuff);
FIBDStream.ReadBuffer(FFirstRecLen, $2);
GetMem(TempBuff, FFirstRecLen + 1);
FIBDStream.ReadBuffer(TempBuff^, FFirstRecLen);
SubKey2 := TempBuff;
KeyIBD := SubKey2;
FreeMem(TempBuff);
// ShowMessage('PreCreate');
CreateCryptMas(key1, keyIBD, False);
// ShowMessage('Created');
PSizeIBD := @SizeIBD;
FIBDStream.ReadBuffer(PSizeIBD^, 4);
GetMem(CryptData, SizeIBD + 10);
GetMem(UncryptData, SizeIBD + 10);
FIBDStream.ReadBuffer(CryptData^, SizeIBD);
FIBDStream.Free;
i := 0;
while i < SizeIBD do
begin
for j := 1 to 8 do
begin
num[j] := byte((CryptData + i + j - 1)^);
end;
tempnum := num[1];
num[1] := num[2];
num[2] := tempnum;
tempnum := num[3];
num[3] := num[4];
num[4] := tempnum;
tempnum := num[5];
num[5] := num[6];
num[6] := tempnum;
tempnum := num[7];
num[7] := num[8];
num[8] := tempnum;
UnCrypt(@num, @outnum, @PassMas);
for j := 1 to 8 do
begin
Byte((UnCryptData + i + j - 1)^) := num[j];
end;
i := i + 8;
end;
PakStream := TMemoryStream.Create;
PakStream.WriteBuffer(UnCryptData^, SizeIBD);
UnpStream := TMemoryStream.Create;
PakStream.Position := 0;
UnpStream := TMemoryStream.Create;
// ShowMessage('PreDecompress');
DecompressStr := TZDecompressionStream.Create(PakStream);
SizeS := 10000;
while SizeS <> 0 do
begin
GetMem(TmpBuff, SizeS);
SizeS := DecompressStr.Read(TmpBuff^, SizeS);
UnpStream.WriteBuffer(Tmpbuff^, SizeS);
FreeMem(TmpBuff);
end;
// ShowMessage('Decompress');
UnpStream.Position := 0;
FreeMem(UncryptData);
GetMem(UncryptData, UnpStream.Size);
UnpStream.ReadBuffer(UncryptData^, UnpStream.Size);
UnpStream.Position := 0;
aIBDList.Text := '';
IBDSize := UnpStream.Size;
i := 0;
OutIBD := '';
while i < IBDSize do
begin
OutIBD := OutIBD + (UncryptData + i)^;
inc(i);
end;
i := 1;
{ while i < IBDSize do
begin
TempStr := copy(OutIBD, 3, pos(#$0D#$0A, OutIBD) - 3);
if TempStr = '' then
begin
TempStr := copy(OutIBD, 3, pos(#$FF#$FF, OutIBD) - 3);
aIBDList.Add(TempStr);
break;
end;
aIBDList.Add(TempStr);
i := i + pos(#$0D#$0A, OutIBD);
Delete(OutIBD, 1, pos(#$0D#$0A, OutIBD) + 1);
end;
}
// ShowMessage('Save Buff');
while i < IBDSize do
begin
StrLen := byte(OutIBD[2])* $100 + byte(OutIBD[1]);
if StrLen = $0FFFF then
break;
TempStr := copy(OutIBD, 3, StrLen);
if pos(#$0D#$0A, TempStr) <> 0 then
Delete(TempStr, pos(#$0D#$0A, TempStr), 2);
Delete(OutIBD, 1, StrLen + 2);
aIBDList.Add(TempStr);
i := i + StrLen;
end;
UnpStream.Free;
PakStream.Free;
DecompressStr.Free;
FreeMem(CryptData);
FreeMem(UncryptData);
end;
procedure UnCrypt(NumIn: Pointer; NumOut: Pointer; CryptMas: Pointer);
var
NumPtr: Pointer;
BP1: word;
TempESP10: word;
EBPTMP: Dword;
OUTESP: Pointer;
label proc1, AVKCr005056A5, AVKCr005056C4, beg;
begin
NumPtr := NumIn;
asm
mov EAX, numptr;
mov ESI, EAX
mov EDI, 8
mov EBX, CryptMas
beg:
mov EAX, ESI
mov DX, word ptr ds:[EBX]
Call Proc1;
mov ax, word ptr ds:[EBX + 2]
Add word ptr ds:[esi + 2], Ax
mov ax, word ptr ds:[EBX + 4]
Add word ptr ds:[esi + 4], Ax
lea eax, dword ptr ds:[esi + 6]
mov dx, word ptr ds:[EBX + 6]
Call Proc1
MOV AX,WORD PTR DS:[ESI+4]
MOV TempESP10, AX
MOV AX,WORD PTR DS:[ESI]
XOR WORD PTR DS:[ESI+4],AX
LEA EAX,DWORD PTR DS:[ESI+4]
MOV DX, word ptr ds:[EBX + 8]
Call proc1
PUSH EAX
MOV AX, WORD PTR DS:[ESI+2]
MOV BP1, AX
POP EAX
MOV AX,WORD PTR DS:[ESI+6]
XOR WORD PTR DS:[ESI+2],AX
MOV AX,WORD PTR DS:[ESI+4]
ADD WORD PTR DS:[ESI+2],AX
LEA EAX,DWORD PTR DS:[ESI+2]
MOV DX, word ptr ds:[EBX + $A]
CALL Proc1
MOV AX,WORD PTR DS:[ESI+2]
ADD WORD PTR DS:[ESI+4],AX
MOV AX,WORD PTR DS:[ESI+2]
XOR WORD PTR DS:[ESI],AX
MOV AX,WORD PTR DS:[ESI+4]
XOR WORD PTR DS:[ESI+6],AX
MOV AX, TempESP10
XOR WORD PTR DS:[ESI+2],AX
PUSH EAX
MOV AX, Word ptr BP1
XOR WORD PTR DS:[ESI+4], AX
POP EAX
ADD EBX,$C
DEC EDI
JNZ Beg
MOV EDX, CryptMas
MOV DX, WORD PTR DS:[EDX + $D8 - $78] //$52D7
MOV EAX,ESI
Call proc1
MOV EAX, CryptMas
MOV AX, WORD PTR DS:[EAX + $DA - $78] //$BF70
ADD WORD PTR DS:[ESI+4],AX
MOV EAX, CryptMas
MOV AX, WORD PTR DS:[EAX + $DC - $78] //$0D12
ADD WORD PTR DS:[ESI+2],AX
MOV EDX, CryptMas
MOV DX, WORD PTR DS:[EDX + $DE - $78] //$8A81
LEA EAX, DWORD PTR DS:[ESI+6]
CALL Proc1
MOV AX,WORD PTR DS:[ESI]
MOV EDX,EAX
SHL EDX,8
MOVZX EAX,AX
SHR EAX,8
OR DX,AX
MOV WORD PTR DS:[ESI],DX
MOV AX,WORD PTR DS:[ESI+4]
PUSH EDX
MOV EDX,EAX
SHL EDX,8
MOVZX EAX,AX
SHR EAX,8
OR DX,AX
MOV DWORD PTR EBPTMP, EDX
POP EDX
MOV AX,WORD PTR DS:[ESI+2]
MOV EDX,EAX
SHL EDX,8
MOVZX EAX,AX
SHR EAX,8
OR DX,AX
MOV WORD PTR DS:[ESI+4],DX
MOV AX,WORD PTR DS:[ESI+6]
MOV EDX,EAX
SHL EDX,8
MOVZX EAX,AX
SHR EAX,8
OR DX,AX
MOV WORD PTR DS:[ESI+6],DX
MOV EAX,EBPTMP
MOV WORD PTR DS:[ESI+2],AX
MOVZX EAX,AX
end;
OUTESP := NumOut;
asm
MOV EDX, OUTESP
MOV DWORD PTR DS:[EDX],EAX
MOV EAX, OUTESP
SHL DWORD PTR DS:[EAX],$10
MOVZX EAX,WORD PTR DS:[ESI]
MOV EDX, OUTESP
OR DWORD PTR DS:[EDX],EAX
MOVZX EAX,WORD PTR DS:[ESI+6]
MOV EDX, OUTESP
MOV DWORD PTR DS:[EDX+4],EAX
MOV EAX, OUTESP
SHL DWORD PTR DS:[EAX+4],$10
MOVZX EAX,WORD PTR DS:[ESI+4]
MOV EDX, OUTESP
OR DWORD PTR DS:[EDX+4],EAX
end;
exit;
asm
Proc1:
PUSH EBX
MOVZX ECX,WORD PTR DS:[EAX]
MOVZX EBX,DX
IMUL ECX,EBX
TEST ECX,ECX
JNZ AVKCr005056A5
MOV CX,1
SUB CX,WORD PTR DS:[EAX]
SUB CX,DX
MOV WORD PTR DS:[EAX],CX
POP EBX
RETN
AvkCr005056A5: MOV EDX,ECX
SHR EDX, $10
MOV WORD PTR DS:[EAX],DX
MOV EDX,ECX
AND DX,$FFFF
MOV ECX,EDX
SUB CX,WORD PTR DS:[EAX]
MOV WORD PTR DS:[EAX],CX
CMP DX,WORD PTR DS:[EAX]
JNB AVKCr005056C4
INC WORD PTR DS:[EAX]
AVKCr005056C4: POP EBX
RETN
end;
end;
//procedure CreateCryptMas(const key1, key2: string; aTestPassMas: BOOLean);
procedure CreateCryptMas(const key1, key2: AnsiString; aTestPassMas: BOOLean);
var
PreTempKey1: array[1..20] of Byte;
TempKey1: array [1..16] of Byte;
PreTempMas: array [1..4] of Byte;
TempMas: array[1..$190] of Byte;
PreMass: array[1..$190] of Byte;
TempKey2: array[1..16] of byte;
PostMass: array[1..$190] of Byte;
PTempKey1: Pointer;
PTempKey2: Pointer;
PTempMas: Pointer;
PPTempMas: Pointer;
PTempMas2: Pointer;
PPostMas: Pointer;
TempESP74: dword;
PPreTempKey1: Pointer;
i: integer;
TmpBP: word;
TempEBP: Dword;
TMPESP4: Dword;
TMPESP10: word;
TmpESP: Dword;
TmpBP1: word;
SaveESP: Dword;
TempMas2: array[1..$190] of byte;
TestPassMas: Boolean;
label
AVKCr005056A5, AVKCr005056C4, AVKCr00505688, AVKCr00505ECF, AVKCr00505EAD,
AVKCr00505B7E, AVKCr005056C8, AVKCr00505736, AVKCr005056DC, AVKCr0050576A,
AVKCr0050570B, AVKCr0050570F, AVKCr00505B14, AVKCr00505CF8, AVKCr00505CD6,
AVKCr007E5FED, AVKCr007E5FCF, AvkCr00505C70, AvkCr007E6654, AVKCr007E6671,
AvkCr007E5FB0, AVKCr0050602E, AVKCr007D51D8, AVKCr007D51EC, AVKCr00505770,
AVKCr005057BA, AVKCr005057DF;
begin
TestPassMas := aTestPassMas;
for i := 1 to 16 do
TempKey1[i] := byte(key1[i]);
for i := 1 to 16 do
TempKey2[i] := byte(key2[i]);
PTempKey1 := @TempKey1;
PTempKey2 := @TempKey2;
PTempMas := @TempMas;
PPTempMas := @TempMas;
PPostMas := @PostMass;
PPreTempKey1 := @PreTempKey1;
asm
Mov SaveESP, ESP
Push EBX
mov EAX, $10
mov ECX, EAX
SHL ECX, 3
mov edx, PTempKey1
mov ebx, PTempKey2
Call AvkCr00505C70
mov EAX, PTempKey1
mov ECX, $10
mov EBX, PTempKey2
Mov Edx, EBX
CALL AVKCr007D51D8
MOV EAX, PTempKey1
Lea EDX, TempMas
Mov ECX, EAX
XCHG EAX,EDX
CALL AVKCr00505770
LEA EAX,DWORD PTR TempKey1 + 8
LEA EDX,DWORD PTR TempKey1 + $14
ADD PTempKey1, 8
MOV ECX,EAX
XCHG EAX,EDX
CALL AVKCr00505770
MOV EAX, $10
MOV ECX,EAX
SHL ECX,3
end;
for i := 1 to $10 do
PreMass[i] := TempKey1[i];
PreMass[$11] := 0;
PreMass[$12] := 0;
PreMass[$13] := 0;
PreMass[$14] := 0;
for i := 1 to $180 - 4 do
PreMass[$14 + i] := TempMas[i];
for i := 1 to $180 do
PostMass[i] := 0;
asm
LEA EDX, PreMass
MOV EAX, PPostMas
CALL AVKCr00505C70
end;
if TestPassMas then
begin
for i := 1 to 12*9 do
begin
if PassMasAvk[i] <> PostMass[i] then
begin
// ShowMessage('Error crypt massiv');
break;
end;
end;
end;
for i := 1 to 12*9 do
PassMas[i] := PostMass[i];
asm
Mov ESP, SaveESP
Pop Ebx
end;
exit;
asm
/////// AVKCr00505770
AVKCr00505770:
PUSH EBX
PUSH ESI
PUSH EDI
PUSH EBP
MOV TMPESP4, ECX
MOV TMPESP,EAX
LEA ESI, PreTempKey1
MOV AX,WORD PTR DS:[EDX]
AND AX,$FFFF
MOV WORD PTR DS:[ESI],AX
MOV EAX,DWORD PTR DS:[EDX]
SHR EAX,$10
AND AX, $FFFF
MOV WORD PTR DS:[ESI+2],AX
MOV AX,WORD PTR DS:[EDX+4]
AND AX,$FFFF
MOV WORD PTR DS:[ESI+4],AX
MOV EAX,DWORD PTR DS:[EDX+4]
SHR EAX,$10
AND AX,$FFFF
MOV WORD PTR DS:[ESI+6],AX
MOV EDI,4
MOV EAX,ESI
AVKCr005057BA: MOV DX,WORD PTR DS:[EAX]
MOV ECX,EDX
SHL ECX,8
MOVZX EDX,DX
SHR EDX,8
OR CX,DX
MOV WORD PTR DS:[EAX],CX
ADD EAX,2
DEC EDI
JNZ AVKCr005057BA
MOV EDI,8
MOV EBX, PPTempMas
ADD EBX,$10
AVKCr005057DF: MOV EAX,ESI
MOV DX,WORD PTR DS:[EBX]
CALL AVKCr00505688
MOV AX,WORD PTR DS:[EBX+2]
ADD WORD PTR DS:[ESI+2],AX
MOV AX,WORD PTR DS:[EBX+4]
ADD WORD PTR DS:[ESI+4],AX
LEA EAX,DWORD PTR DS:[ESI+6]
MOV DX,WORD PTR DS:[EBX+6]
CALL AVKCr00505688
MOV AX,WORD PTR DS:[ESI+4]
MOV TMPESP10,AX
MOV AX,WORD PTR DS:[ESI]
XOR WORD PTR DS:[ESI+4],AX
LEA EAX,DWORD PTR DS:[ESI+4]
MOV DX,WORD PTR DS:[EBX+8]
CALL AVKCr00505688
PUSH EAX
MOV AX,WORD PTR DS:[ESI+2]
MOV TMPBP1, AX
POP EAX
MOV AX,WORD PTR DS:[ESI+6]
XOR WORD PTR DS:[ESI+2],AX
MOV AX,WORD PTR DS:[ESI+4]
ADD WORD PTR DS:[ESI+2],AX
LEA EAX,DWORD PTR DS:[ESI+2]
MOV DX,WORD PTR DS:[EBX+$A]
CALL AVKCr00505688
MOV AX,WORD PTR DS:[ESI+2]
ADD WORD PTR DS:[ESI+4],AX
MOV AX,WORD PTR DS:[ESI+2]
XOR WORD PTR DS:[ESI],AX
MOV AX,WORD PTR DS:[ESI+4]
XOR WORD PTR DS:[ESI+6],AX
MOV AX, TMPESP10
XOR WORD PTR DS:[ESI+2],AX
PUSH EAX
MOV AX, TMPBP1
XOR WORD PTR DS:[ESI+4], AX
POP EAX
ADD EBX,$C
DEC EDI
JNZ AVKCr005057DF
MOV EDX, PPTempMas
MOV DX,WORD PTR DS:[EDX+$70]
MOV EAX,ESI
CALL AVKCr00505688
MOV EAX, PPTempMas
MOV AX,WORD PTR DS:[EAX+$72]
ADD WORD PTR DS:[ESI+4],AX
MOV EAX, PPTempMas
MOV AX,WORD PTR DS:[EAX+$74]
ADD WORD PTR DS:[ESI+2],AX
MOV EDX, PPTempMas
MOV DX,WORD PTR DS:[EDX+$76]
LEA EAX,DWORD PTR DS:[ESI+6]
CALL AVKCr00505688
MOV AX,WORD PTR DS:[ESI]
MOV EDX,EAX
SHL EDX,8
MOVZX EAX,AX
SHR EAX,8
OR DX,AX
MOV WORD PTR DS:[ESI],DX
MOV AX,WORD PTR DS:[ESI+4]
PUSH EBX
MOV EBX,EAX
SHL EBX,8
MOVZX EAX,AX
SHR EAX,8
OR BX,AX
MOV AX,WORD PTR DS:[ESI+2]
MOV EDX,EAX
SHL EDX,8
MOVZX EAX,AX
SHR EAX,8
OR DX,AX
MOV WORD PTR DS:[ESI+4],DX
MOV AX,WORD PTR DS:[ESI+6]
MOV EDX,EAX
SHL EDX,8
MOVZX EAX,AX
SHR EAX,8
OR DX,AX
MOV WORD PTR DS:[ESI+6],DX
MOV EAX,EBX
POP EBX
MOV WORD PTR DS:[ESI+2],AX
MOVZX EAX,AX
MOV EDX, PTempKey1
MOV DWORD PTR DS:[EDX],EAX
MOV EAX, PTempKey1
SHL DWORD PTR DS:[EAX],$10
MOVZX EAX,WORD PTR DS:[ESI]
MOV EDX, PTempKey1
OR DWORD PTR DS:[EDX],EAX
MOVZX EAX,WORD PTR DS:[ESI+6]
MOV EDX, PTempKey1
MOV DWORD PTR DS:[EDX+4],EAX
MOV EAX, PTempKey1
SHL DWORD PTR DS:[EAX+4],$10
MOVZX EAX,WORD PTR DS:[ESI+4]
MOV EDX, PTempKey1
OR DWORD PTR DS:[EDX+4],EAX
POP EBP
POP EDI
POP ESI
POP EBX
RETN
/////////// AVKCr007D51D8
AVKCr007D51D8:
PUSH EDI
PUSH ESI
PUSH EBX
MOV ESI,EAX
MOV EDI,EDX
MOV EBX,ECX
XOR AL,AL
TEST ECX,ECX
JE AVKCr007D51EC
REPNE SCAS BYTE PTR ES:[EDI]
JNZ AVKCr007D51EC
INC ECX
AVKCr007D51EC: SUB EBX,ECX
MOV EDI,ESI
MOV ESI,EDX
MOV EDX,EDI
MOV ECX,EBX
SHR ECX,2
REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
MOV ECX,EBX
AND ECX,3
REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
STOS BYTE PTR ES:[EDI]
MOV EAX,EDX
POP EBX
POP ESI
POP EDI
RETN
///////// AvkCr00505C70
AvkCr00505C70:
Push EBP
MOv TEMPEBP, ESP
PUSH EBX
PUSH ESI
PUSH EDI
MOV EBX, ECX
MOV edi, edx
SAR EBX,3
lea EAX, TempMas
add Eax, $10
XOR ECX, ECX
MOV EDX, $68
Call AvkCr007E6654 // TempMas <-- 0
lea edx, TempMas
add edx, $10
mov eax, edi
mov Ecx, $10
call AvkCr007E5FB0 // TempMas <-- TempKey1
mov EBx, 8
lea eax, TempMas
add eax, $10
AVKCr00505CD6:
MOV DX,WORD PTR DS:[EAX]
MOV ECX,EDX
SHL ECX,8
MOVZX EDX,DX
SHR EDX,8
OR CX,DX
MOV WORD PTR DS:[EAX],CX
ADD EAX,2
DEC EBX
JNZ AVKCr00505CD6
mov Ebx, 1
lea EAX, TempMas
add EAX, $20
lea ESI, TempMas
AVKCr00505CF8:
MOV EDX,EBX
DEC EDX
SHL EDX,3
MOV DX,WORD PTR DS:[ESI+EDX*2+$12]
SHL EDX,9
MOV ECX,EBX
DEC ECX
SHL ECX,3
MOVZX ECX,WORD PTR DS:[ESI+ECX*2+$14]
SHR ECX,7
OR DX,CX
MOV WORD PTR DS:[EAX],DX
MOV EDX,EBX
DEC EDX
SHL EDX,3
MOV DX,WORD PTR DS:[ESI+EDX*2+$14]
SHL EDX,9
MOV ECX,EBX
DEC ECX
SHL ECX,3
MOVZX ECX,WORD PTR DS:[ESI+ECX*2+$16]
SHR ECX,7
OR DX,CX
MOV WORD PTR DS:[EAX+2],DX
MOV EDX,EBX
DEC EDX
SHL EDX,3
MOV DX,WORD PTR DS:[ESI+EDX*2+$16]
SHL EDX,9
MOV ECX,EBX
DEC ECX
SHL ECX,3
MOVZX ECX,WORD PTR DS:[ESI+ECX*2+$18]
SHR ECX,7
OR DX,CX
MOV WORD PTR DS:[EAX+4],DX
MOV EDX,EBX
DEC EDX
SHL EDX,3
MOV DX,WORD PTR DS:[ESI+EDX*2+$18]
SHL EDX,9
MOV ECX,EBX
DEC ECX
SHL ECX,3
MOVZX ECX,WORD PTR DS:[ESI+ECX*2+$1A]
SHR ECX,7
OR DX,CX
MOV WORD PTR DS:[EAX+6],DX
MOV EDX,EBX
DEC EDX
SHL EDX,3
MOV DX,WORD PTR DS:[ESI+EDX*2+$1A]
SHL EDX,9
MOV ECX,EBX
DEC ECX
SHL ECX,3
MOVZX ECX,WORD PTR DS:[ESI+ECX*2+$1C]
SHR ECX,7
OR DX,CX
MOV WORD PTR DS:[EAX+8],DX
MOV EDX,EBX
DEC EDX
SHL EDX,3
MOV DX,WORD PTR DS:[ESI+EDX*2+$1C]
SHL EDX,9
MOV ECX,EBX
DEC ECX
SHL ECX,3
MOVZX ECX,WORD PTR DS:[ESI+ECX*2+$1E]
SHR ECX,7
OR DX,CX
MOV WORD PTR DS:[EAX+$A],DX
MOV EDX,EBX
DEC EDX
SHL EDX,3
MOV DX,WORD PTR DS:[ESI+EDX*2+$1E]
SHL EDX,9
MOV ECX,EBX
DEC ECX
SHL ECX,3
MOVZX ECX,WORD PTR DS:[ESI+ECX*2+$10]
SHR ECX,7
OR DX,CX
MOV WORD PTR DS:[EAX+$C],DX
MOV EDX,EBX
DEC EDX
SHL EDX,3
MOV DX,WORD PTR DS:[ESI+EDX*2+$10]
SHL EDX,9
MOV ECX,EBX
DEC ECX
SHL ECX,3
MOVZX ECX,WORD PTR DS:[ESI+ECX*2+$12]
SHR ECX,7
OR DX,CX
MOV WORD PTR DS:[EAX+$E],DX
INC EBX
ADD EAX,$10
CMP EBX,$6
JNZ AVKCr00505CF8 // End Change Key
MOV AX,WORD PTR DS:[ESI+$62]
SHL EAX,9
MOVZX EDX,WORD PTR DS:[ESI+$64]
SHR EDX,7
OR AX,DX
MOV WORD PTR DS:[ESI+$70],AX
MOV AX,WORD PTR DS:[ESI+$64]
SHL EAX,9
MOVZX EDX,WORD PTR DS:[ESI+$66]
SHR EDX,7
OR AX,DX
MOV WORD PTR DS:[ESI+$72],AX
MOV AX,WORD PTR DS:[ESI+$66]
SHL EAX,9
MOVZX EDX,WORD PTR DS:[ESI+$68]
SHR EDX,7
OR AX,DX
MOV WORD PTR DS:[ESI+$74],AX
MOV AX,WORD PTR DS:[ESI+$68]
SHL EAX,9
MOVZX EDX,WORD PTR DS:[ESI+$6A]
SHR EDX,7
OR AX,DX
MOV WORD PTR DS:[ESI+$76],AX
LEA EDX,DWORD PTR DS:[ESI+$78]
LEA EAX,DWORD PTR DS:[ESI+$10]
CALL AVKCr00505B14
lea ESI, TempMas
lea EAX, TempMas
MOV ECX,$FF
MOV EDX,8
CALL AVKCr007E6654 // FFFFFF -> PTempMas
LEA EDX, PreTempKey1
MOV EAX, ESI
MOV ECX,8
CALL AVKCr007E5FB0
MOV EBX,4
LEA EAX, TempMas // Local2
AVKCr00505EAD: MOV DX,WORD PTR DS:[EAX]
MOV ECX,EDX
SHL ECX,8
MOVZX EDX,DX
SHR EDX,8
OR CX,DX
MOV WORD PTR DS:[EAX],CX
ADD EAX,2
DEC EBX
JNZ AVKCr00505EAD
MOV EBX,8
LEA EDI,DWORD PTR DS:[ESI+$10]
AVKCr00505ECF: MOV DX,WORD PTR DS:[EDI]
lea EAX, TempMas // Local2
CALL AVKCr00505688
MOV AX,WORD PTR DS:[EDI+2]
ADD WORD PTR SS:[TempMas + 2],AX
MOV AX,WORD PTR DS:[EDI+4]
ADD WORD PTR SS:[TempMas + 4],AX
MOV DX,WORD PTR DS:[EDI+6]
LEA EAX,DWORD PTR SS:[TempMas + 6]
CALL AVKCr00505688
MOV AX,WORD PTR SS:[TempMas + 4]
MOV WORD PTR SS:[TempMas - $2],AX
MOV AX,WORD PTR SS:[TempMas]
XOR WORD PTR SS:[TempMas + 4],AX
MOV DX,WORD PTR DS:[EDI+8]
LEA EAX, DWORD PTR ss:[TempMas + 4]
CALL AVKCr00505688
MOV AX,WORD PTR SS:[TempMas + 2]
MOV WORD PTR SS:[TempMas-$4],AX
MOV AX,WORD PTR SS:[TempMas + 6]
XOR WORD PTR SS:[TempMas + 2],AX
MOV AX,WORD PTR SS:[TempMas + 4]
ADD WORD PTR SS:[TempMas + 2],AX
MOV DX,WORD PTR DS:[EDI+$A]
LEA EAX,DWORD PTR SS:[TempMas + 2]
CALL AVKCr00505688
MOV AX,WORD PTR SS:[TempMas +2]
ADD WORD PTR SS:[TempMas + 4], AX
MOV AX,WORD PTR SS:[TempMas + 2]
XOR WORD PTR SS:[TempMas],AX
MOV AX,WORD PTR SS:[TempMas + 4]
XOR WORD PTR SS:[TempMas + 6],AX
MOV AX,WORD PTR SS:[TempMas - 2]
XOR WORD PTR SS:[TempMas + 2],AX
MOV AX,WORD PTR SS:[TempMas- 4]
XOR WORD PTR SS:[TempMas + 4],AX
ADD EDI,$0C
DEC EBX
JNZ AVKCr00505ECF
lea ESI, TempMas
MOV DX,WORD PTR DS:[ESI+$70]
LEA EAX, TempMas
CALL AVKCr00505688
MOV AX,WORD PTR DS:[ESI+$72]
ADD WORD PTR SS:[TempMas + 4],AX
MOV AX,WORD PTR DS:[ESI+$74]
ADD WORD PTR SS:[TempMas + 2],AX
MOV DX,WORD PTR DS:[ESI+$76]
LEA EAX,DWORD PTR SS:[TempMas + 6]
CALL AVKCr00505688
MOV AX,WORD PTR SS:[TempMas]
MOV EDX,EAX
SHL EDX,8
MOVZX EAX,AX
SHR EAX,8
OR DX,AX
MOV WORD PTR SS:[TempMas],DX
MOV AX,WORD PTR SS:[TempMas + 4]
MOV EDX,EAX
SHL EDX,8
MOVZX EAX,AX
SHR EAX,8
OR DX,AX
MOV WORD PTR SS:[TempMas - 4],DX
MOV AX,WORD PTR SS:[TempMas + 2]
MOV EDX,EAX
SHL EDX,8
MOVZX EAX,AX
SHR EAX,8
OR DX,AX
MOV WORD PTR SS:[TempMas + 4],DX
MOV AX,WORD PTR SS:[TempMas + 6]
MOV EDX,EAX
SHL EDX,8
MOVZX EAX,AX
SHR EAX,8
OR DX,AX
MOV WORD PTR SS:[TempMas + 6],DX
MOV AX,WORD PTR SS:[TempMas - 4]
MOV WORD PTR SS:[TempMas + 2],AX
MOV EDX,ESI
LEA EAX, TempMas
MOV ECX,8
CALL AVKCr007E5FB0
LEA EDX,DWORD PTR DS:[ESI+8]
MOV EAX,ESI
MOV ECX,8
CALL AVKCr007E5FB0
JMP AVKCr0050602E
MOV EDX,ESI
MOV EAX, 0
MOV ECX,8
CALL AVKCr007E5FB0
LEA EDX,DWORD PTR DS:[ESI+8]
MOV EAX,ESI
MOV ECX,8
CALL AVKCr007E5FB0
AVKCr0050602E:
POP EDI
POP ESI
POP EBX
MOV ESP, TEMPEBP
POP EBP
retn
///////// AVKCr00505B14
AVKCr00505B14:
PUSH EBX
PUSH ESI
PUSH EDI
PUSH EBP
MOV DWORD PTR TEMPESP74 ,EDX
MOV ESI,EAX
MOV EBX, PPostMas
ADD EBX, $68
SUB EBX,2
MOV AX,WORD PTR DS:[ESI]
CALL AVKCr005056C8
MOV EDI,EAX
ADD ESI,2
PUSH EAX
MOV AX, WORD PTR DS:[ESI]
NEG AX
MOV TMPBP, AX
POP EAX
ADD ESI,2
MOV AX,WORD PTR DS:[ESI]
NEG AX
MOV WORD PTR SS:[ESP+8],AX
ADD ESI,2
MOV AX,WORD PTR DS:[ESI]
CALL AVKCr005056C8
MOV WORD PTR DS:[EBX],AX
ADD ESI,2
SUB EBX,2
MOV AX,WORD PTR SS:[ESP+8]
MOV WORD PTR DS:[EBX],AX
SUB EBX,2
PUSH EAX
MOV AX, TMPBP
MOV WORD PTR DS:[EBX], AX
POP EAX
SUB EBX,2
MOV WORD PTR DS:[EBX],DI
SUB EBX,2
MOV DWORD PTR SS:[ESP+4],7
AVKCr00505B7E: MOV DI,WORD PTR DS:[ESI]
ADD ESI,2
MOV AX,WORD PTR DS:[ESI]
MOV WORD PTR DS:[EBX],AX
ADD ESI,2
SUB EBX,2
MOV WORD PTR DS:[EBX],DI
SUB EBX,2
MOV AX,WORD PTR DS:[ESI]
CALL AVKCr005056C8
MOV EDI,EAX
ADD ESI,2
PUSH EAX
MOV AX, WORD PTR DS:[ESI]
NEG AX
MOV TMPBP, AX
POP EAX
ADD ESI,2
MOV AX,WORD PTR DS:[ESI]
NEG AX
MOV WORD PTR SS:[ESP+8],AX
ADD ESI,2
MOV AX,WORD PTR DS:[ESI]
CALL AVKCr005056C8
MOV WORD PTR DS:[EBX],AX
ADD ESI,2
SUB EBX,2
PUSH EAX
MOV AX, TMPBP
MOV WORD PTR DS:[EBX], AX
POP EAX
SUB EBX,2
MOV AX,WORD PTR SS:[ESP+8]
MOV WORD PTR DS:[EBX],AX
SUB EBX,2
MOV WORD PTR DS:[EBX],DI
SUB EBX,2
DEC DWORD PTR SS:[ESP+4]
JNZ AVKCr00505B7E
MOV DI,WORD PTR DS:[ESI]
ADD ESI,2
MOV AX,WORD PTR DS:[ESI]
MOV WORD PTR DS:[EBX],AX
SUB EBX,2
ADD ESI,2
MOV WORD PTR DS:[EBX],DI
SUB EBX,2
MOV AX,WORD PTR DS:[ESI]
CALL AVKCr005056C8
MOV EDI,EAX
ADD ESI,2
PUSH EAX
MOV AX,WORD PTR DS:[ESI]
NEG AX
MOV TMPBP, AX
POP EAX
ADD ESI,2
MOV AX,WORD PTR DS:[ESI]
NEG AX
MOV WORD PTR SS:[ESP+8],AX
ADD ESI,2
MOV AX,WORD PTR DS:[ESI]
CALL AVKCr005056C8
MOV WORD PTR DS:[EBX],AX
SUB EBX,2
MOV AX,WORD PTR SS:[ESP+8]
MOV WORD PTR DS:[EBX],AX
SUB EBX,2
PUSH EAX
MOV AX, TMPBP
MOV WORD PTR DS:[EBX], AX
POP EAX
SUB EBX,2
MOV WORD PTR DS:[EBX],DI
lea EDX, TempMas
Add Edx, $78
Mov EAX, PPostMas
MOV ECX,$68
CALL AVKCr007E5FB0
POP EBP
POP EDI
POP ESI
POP EBX
retn
///////// AVKCr00505688
AVKCr00505688:
PUSH EBX
MOVZX ECX,WORD PTR DS:[EAX]
MOVZX EBX,DX
IMUL ECX,EBX
TEST ECX,ECX
JNZ AVKCr005056A5
MOV CX,1
SUB CX,WORD PTR DS:[EAX]
SUB CX,DX
MOV WORD PTR DS:[EAX],CX
POP EBX
RETN
AVKCr005056A5: MOV EDX,ECX
SHR EDX,$10
MOV WORD PTR DS:[EAX],DX
MOV EDX,ECX
AND DX,$FFFF
MOV ECX,EDX
SUB CX,WORD PTR DS:[EAX]
MOV WORD PTR DS:[EAX],CX
CMP DX,WORD PTR DS:[EAX]
JNB AVKCr005056C4
INC WORD PTR DS:[EAX]
AVKCr005056C4: POP EBX
RETN
//////// AVKCr005056C8
AVKCr005056C8:
PUSH EBX
PUSH ESI
PUSH EDI
PUSH EBP
PUSH ECX
MOV ECX,EAX
CMP CX,1
JA AVKCr005056DC
MOV EAX,ECX
JMP AVKCr0050576A
AVKCr005056DC: MOVZX EBX,CX
MOV EAX, $10001
XOR EDX,EDX
DIV EBX
MOV WORD PTR SS:[ESP],AX
MOV EAX,$10001
XOR EDX,EDX
DIV EBX
MOV EBX,EDX
CMP BX,1
JNZ AVKCr0050570B
MOV AX,1
SUB AX,WORD PTR SS:[ESP]
AND AX,$FFFF
JMP AVKCr0050576A
AVKCr0050570B:
MOV BP,1
AVKCr0050570F: MOVZX EAX,CX
MOVZX EDI,BX
XOR EDX,EDX
DIV EDI
MOV ESI,EAX
MOVZX EAX,CX
XOR EDX,EDX
DIV EDI
MOV ECX,EDX
IMUL SI,WORD PTR SS:[ESP]
ADD BP,SI
CMP CX,1
JNZ AVKCr00505736
MOV EAX,EBP
JMP AVKCr0050576A
AVKCr00505736: MOV EAX,EDI
MOVZX EDX,CX
MOV ESI,EDX
XOR EDX,EDX
DIV ESI
MOV ESI,EAX
MOV EAX,EDI
MOVZX EDX,CX
MOV EBX,EDX
XOR EDX,EDX
DIV EBX
MOV EBX,EDX
IMUL SI,BP
ADD WORD PTR SS:[ESP],SI
CMP BX,1
JNZ AVKCr0050570F
MOV AX,1
SUB AX,WORD PTR SS:[ESP]
AND AX, $FFFF
AVKCr0050576A:
POP EDX
POP EBP
POP EDI
POP ESI
POP EBX
RETN
///////////// AvkCr007E6654
AvkCr007E6654:
PUSH EDI
MOV EDI,EAX
MOV CH,CL
MOV EAX,ECX
SHL EAX,$10
MOV AX,CX
MOV ECX,EDX
SAR ECX,2
JS AVKCr007E6671
REP STOS DWORD PTR ES:[EDI]
MOV ECX,EDX
AND ECX,3
REP STOS BYTE PTR ES:[EDI]
AVKCr007E6671:
POP EDI
RETN
/////////// AvkCr007E5FB0
AvkCr007E5FB0:
PUSH ESI
PUSH EDI
MOV ESI,EAX
MOV EDI,EDX
MOV EAX,ECX
CMP EDI,ESI
JA AVKCr007E5FCF
JE AVKCr007E5FED
SAR ECX,2
JS AVKCr007E5FED
REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
MOV ECX,EAX
AND ECX,3
REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
POP EDI
POP ESI
RETN
AVKCr007E5FCF:
LEA ESI,DWORD PTR DS:[ECX+ESI-4]
LEA EDI,DWORD PTR DS:[ECX+EDI-4]
SAR ECX,2
JS AVKCr007E5FED
STD
REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
MOV ECX,EAX
AND ECX,3
ADD ESI,3
ADD EDI,3
REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
CLD
AVKCr007E5FED:
POP EDI
POP ESI
RETN
end;
end;
end.