Function at 0x45c260
Capabilities:
Encode data using xor
Generate random numbers using the delphi lcg
Hash data with crc32

Disassembly:
sub esp, 0xc
mov eax, dword [esp + 0x14]
push ebx
push ebp
push esi
mov esi, dword [esp + 0x1c]
xor ebp, ebp
mov dword [eax], ebp
push edi
mov eax, dword [esi + 0x490]
mov ecx, dword [esi + 0x48c]
cmp eax, ebp
mov dword [esp + 0x10], ebp
mov dword [esi + 0x4a0], ecx
mov dword [esi + 0x4a4], eax
jne 0x45c29d
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0xc
ret
mov al, byte [esi + 0x4ec]
test al, al
je 0x45c436
mov al, byte [esi + 0x508]
test al, al
je 0x45c436
cmp dword [esi + 0x504], ebp
jne 0x45c436
and eax, 3
mov edx, dword [esi + 0x4d4]
lea ebx, [eax*4 + 4]
mov eax, ebp
mov ecx, ebx
add ecx, 2
adc eax, ebp
cmp eax, edx
ja 0x45c436
jb 0x45c2f4
cmp ecx, dword [esi + 0x4d0]
jae 0x45c436
mov ecx, dword [esi]
lea edi, [esi + 0x4c8]
push edi
call fcn.005b3e20
test eax, eax
jne 0x45c42e
mov ecx, dword [esi]
lea eax, [esi + 0x509]
push ebx
push eax
call fcn.005b3b70
test eax, eax
jne 0x45c42e
mov eax, dword [edi]
mov ecx, dword [esi + 0x4d0]
add eax, ebx
push 0
mov dword [edi], eax
mov edx, dword [edi + 4]
adc edx, ebp
sub ecx, ebx
mov dword [esi + 0x4d0], ecx
mov eax, dword [esi + 0x4d4]
sbb eax, ebp
lea ebp, [esi + 0x519]
mov dword [esi + 0x4d4], eax
lea eax, [esi + 0x509]
mov dword [edi + 4], edx
mov dl, byte [esi + 0x508]
push ebp
push eax
lea eax, [esi + 0x408]
push edx
push eax
call fcn.0047d500
add esp, 0x14
mov dword [esi + 0x504], eax
test eax, eax
je 0x45c421
mov ecx, dword [esi]
lea ebx, [esi + 0x529]
push 2
push ebx
call fcn.005b3b70
test eax, eax
mov dword [esp + 0x10], eax
jne 0x45c42e
mov ecx, dword [edi]
mov edx, dword [esi + 0x4d0]
add ecx, 2
mov dword [edi], ecx
mov eax, dword [edi + 4]
adc eax, 0
add edx, 0xfffffffe
mov dword [esi + 0x4d0], edx
mov ecx, dword [esi + 0x4d4]
mov dword [edi + 4], eax
mov al, byte [ebx]
adc ecx, 0xffffffff
test al, al
mov dword [esi + 0x4d4], ecx
je 0x45c3ec
mov al, byte [esi + 0x52a]
test al, al
je 0x45c3ec
mov cx, word [ebx]
cmp cx, word [ebp]
je 0x45c3ec
mov dword [esp + 0x10], 0xfffffff6
jmp 0x45c436
mov eax, dword [esi + 0x4d4]
mov ecx, dword [esi + 0x4d0]
test eax, eax
ja 0x45c40d
jb 0x45c403
cmp ecx, 0xa
jae 0x45c40d
mov dword [esp + 0x10], 0xfffffff8
jmp 0x45c436
sub ecx, 0xa
sbb eax, 0
mov dword [esi + 0x4d0], ecx
mov dword [esi + 0x4d4], eax
jmp 0x45c436
pop edi
pop esi
pop ebp
mov eax, 0xfffffff5
pop ebx
add esp, 0xc
ret
mov dword [esp + 0x10], 0xfffffffa
mov edx, dword [esi + 0x4dc]
mov ecx, dword [esi + 0x4a4]
xor eax, eax
cmp eax, edx
jb 0x45c45e
ja 0x45c452
cmp ecx, dword [esi + 0x4d8]
jbe 0x45c45e
mov edx, dword [esi + 0x4d8]
mov dword [esi + 0x4a4], edx
mov eax, dword [esi + 0x4a4]
test eax, eax
jbe 0x45c877
mov eax, dword [esp + 0x10]
test eax, eax
jne 0x45c877
mov eax, dword [esi + 0x498]
test eax, eax
jne 0x45c605
mov eax, dword [esi + 0x4d4]
mov edx, dword [esi + 0x4d0]
test eax, eax
ja 0x45c49e
test edx, edx
jbe 0x45c605
mov ebx, dword [esi + 0x490]
xor ecx, ecx
cmp ecx, eax
mov dword [esp + 0x20], ebx
jb 0x45c4be
ja 0x45c4b4
cmp ebx, edx
jbe 0x45c4be
mov ebx, dword [esi + 0x4d0]
mov dword [esp + 0x20], ebx
test ebx, ebx
je 0x45c848
mov ecx, dword [esi]
lea edi, [esi + 0x4c8]
push edi
call fcn.005b3e20
test eax, eax
jne 0x45c85b
mov eax, dword [esi + 0x488]
mov ecx, dword [esi]
push ebx
push eax
call fcn.005b3b70
test eax, eax
mov dword [esp + 0x10], eax
jne 0x45c85b
mov ecx, dword [edi]
mov edx, dword [esi + 0x4d0]
add ecx, ebx
mov dword [esi + 0x498], ebx
mov dword [edi], ecx
mov ebp, dword [edi + 4]
adc ebp, eax
sub edx, ebx
mov dword [esi + 0x4d0], edx
mov ecx, dword [esi + 0x4d4]
sbb ecx, eax
mov al, byte [esi + 0x4ec]
mov dword [edi + 4], ebp
mov edi, dword [esi + 0x488]
test al, al
mov dword [esi + 0x4d4], ecx
mov dword [esp + 0x18], edi
mov dword [esi + 0x494], edi
je 0x45c605
mov eax, dword [esi + 0x504]
test eax, eax
je 0x45c55f
push ebx
push edi
push eax
call fcn.0047d600
add esp, 0xc
jmp 0x45c605
xor ebp, ebp
test ebx, ebx
jbe 0x45c605
mov edx, dword [esi + 0x4f8]
mov eax, edx
and eax, 0xfffd
or al, 2
mov ecx, eax
xor ecx, 1
imul ecx, eax
mov al, byte [edi + ebp]
mov edi, dword [esi + 0x4f0]
shr ecx, 8
xor cl, al
mov eax, edi
mov byte [esp + 0x14], cl
and eax, 0xff
mov ebx, dword [esp + 0x14]
and ebx, 0xff
xor eax, ebx
mov ebx, dword [esi + 0x4f4]
shr edi, 8
mov eax, dword [eax*4 + 0x775df4]
xor eax, edi
mov edi, edx
mov dword [esi + 0x4f0], eax
and eax, 0xff
add eax, ebx
and edi, 0xff
imul eax, eax, 0x8088405
inc eax
mov dword [esi + 0x4f4], eax
shr eax, 0x18
xor eax, edi
mov edi, dword [esp + 0x18]
shr edx, 8
mov eax, dword [eax*4 + 0x775df4]
xor eax, edx
inc ebp
mov dword [esi + 0x4f8], eax
mov eax, dword [esp + 0x20]
mov byte [edi + ebp - 1], cl
cmp ebp, eax
jb 0x45c569
mov eax, dword [esi + 0x4fc]
mov ecx, dword [esi + 0x498]
cmp eax, ecx
jbe 0x45c617
mov eax, ecx
test eax, eax
jbe 0x45c652
mov edx, dword [esi + 0x494]
sub ecx, eax
lea edi, [eax + edx]
mov dl, byte [eax + edx - 1]
mov dword [esi + 0x498], ecx
mov ecx, dword [esi + 0x4fc]
mov dword [esi + 0x494], edi
sub ecx, eax
mov dword [esi + 0x4fc], ecx
jne 0x45c652
cmp dl, byte [esi + 0x500]
jne 0x45c86f
mov eax, dword [esi + 0x4e0]
cmp eax, 0x63
ja case.0x45c669.2
xor ecx, ecx
mov cl, byte [eax + 0x45c890]
jmp dword [ecx*4 + 0x45c884]
mov eax, dword [esi + 0x4a4]
mov edi, dword [esi + 0x498]
cmp eax, edi
jae 0x45c682
mov edi, eax
xor eax, eax
test edi, edi
jbe 0x45c69f
mov edx, dword [esi + 0x494]
mov ecx, dword [esi + 0x4a0]
mov dl, byte [eax + edx]
mov byte [ecx + eax], dl
inc eax
cmp eax, edi
jb 0x45c688
mov eax, dword [esi + 0x4a0]
mov ecx, dword [esi + 0x4e4]
push edi
push eax
push ecx
call fcn.0048a230
mov ecx, dword [esi + 0x4d8]
mov dword [esi + 0x4e4], eax
mov eax, dword [esi + 0x4dc]
xor edx, edx
add esp, 0xc
cmp eax, edx
jb 0x45c6e6
ja 0x45c6d4
cmp ecx, edi
jbe 0x45c6e6
sub ecx, edi
sbb eax, edx
mov dword [esi + 0x4d8], ecx
mov dword [esi + 0x4dc], eax
jmp 0x45c6f2
mov dword [esi + 0x4d8], edx
mov dword [esi + 0x4dc], edx
mov eax, dword [esi + 0x4a4]
mov ecx, dword [esi + 0x498]
mov ebp, dword [esi + 0x4a0]
mov ebx, dword [esi + 0x494]
mov edx, dword [esi + 0x4a8]
sub eax, edi
mov dword [esi + 0x4a4], eax
mov eax, dword [esp + 0x24]
sub ecx, edi
add ebp, edi
add ebx, edi
add edx, edi
mov dword [esi + 0x498], ecx
mov dword [esi + 0x4a0], ebp
mov dword [esi + 0x494], ebx
mov dword [esi + 0x4a8], edx
mov ecx, dword [eax]
add ecx, edi
mov dword [eax], ecx
mov edx, dword [esi + 0x4d8]
or edx, dword [esi + 0x4dc]
jne 0x45c825
jmp 0x45c81e
mov dword [esp + 0x10], 0xfffffff5
jmp 0x45c825
mov ecx, dword [esi + 0x4a0]
mov ebp, dword [esi + 0x4a8]
lea edx, [esi + 0x494]
push 2
push edx
mov dword [esp + 0x28], ecx
call fcn.00488810
mov ebx, dword [esi + 0x4a8]
mov ecx, dword [esi + 0x4e4]
mov edi, ebx
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x28]
sub edi, ebp
push edi
push eax
push ecx
call fcn.0048a230
mov ecx, dword [esi + 0x4d8]
mov dword [esi + 0x4e4], eax
mov eax, dword [esi + 0x4dc]
xor edx, edx
add esp, 0x14
cmp eax, edx
jb 0x45c7d9
ja 0x45c7c5
cmp ecx, edi
jbe 0x45c7d9
sub ecx, edi
sbb eax, edx
mov dword [esi + 0x4d8], ecx
mov dword [esi + 0x4dc], eax
xor ecx, ecx
jmp 0x45c7e7
xor ecx, ecx
mov dword [esi + 0x4d8], ecx
mov dword [esi + 0x4dc], ecx
mov eax, dword [esp + 0x24]
sub ebx, ebp
mov edi, dword [eax]
add edi, ebx
mov dword [eax], edi
mov eax, dword [esp + 0x10]
cmp eax, 1
je 0x45c81a
mov edx, dword [esi + 0x4d8]
mov edi, dword [esi + 0x4dc]
or edx, edi
je 0x45c81a
cmp eax, ecx
je 0x45c825
mov dword [esp + 0x10], 0xffffffec
jmp 0x45c825
mov dword [esp + 0x10], ecx
mov eax, dword [esp + 0x28]
mov byte [eax], 1
mov ecx, dword [esp + 0x28]
cmp byte [ecx], 0
jne 0x45c877
mov eax, dword [esi + 0x4a4]
test eax, eax
ja 0x45c46c
mov eax, dword [esp + 0x10]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0xc
ret
mov edx, dword [esp + 0x28]
mov eax, dword [esp + 0x10]
pop edi
pop esi
pop ebp
mov byte [edx], 1
pop ebx
add esp, 0xc
ret
pop edi
mov dword [esp + 0xc], 0xfffffffa
mov eax, dword [esp + 0xc]
pop esi
pop ebp
pop ebx
add esp, 0xc
ret
mov dword [esp + 0x10], 0xfffffff6
mov eax, dword [esp + 0x10]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0xc
ret