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

Disassembly:
sub esp, 0x1c
push ebx
push ebp
push esi
mov esi, ecx
xorps xmm0, xmm0
mov ecx, dword [esp + 0x30]
push edi
movlpd qword [esp + 0x20], xmm0
mov edi, dword [esi + 0xec]
mov dword [esi + 0xb8], edx
mov edx, dword [esi + 0xe8]
cmp ecx, edi
jb 0x422d1c
ja 0x422d16
mov eax, dword [esp + 0x30]
cmp eax, edx
jbe 0x422d20
mov eax, edx
mov ecx, edi
jmp 0x422d20
mov eax, dword [esp + 0x30]
mov dword [esi + 0xc0], eax
or eax, ecx
mov dword [esi + 0xc4], ecx
je 0x4230b5
mov eax, dword [esp + 0x24]
lea ebx, [esi + 0xa0]
mov dword [esp + 0x14], eax
mov ebp, ebx
mov eax, dword [esp + 0x20]
mov dword [esp + 0x10], eax
nop dword [eax]
mov eax, dword [esi + 0xa8]
or eax, dword [esi + 0xac]
jne 0x422e8d
mov ecx, dword [esi + 0xe0]
mov ebp, ebx
mov edx, dword [esi + 0xe4]
mov eax, ecx
or eax, edx
je 0x422e8d
xor ebx, ebx
mov edi, 0x4000
test edx, edx
ja 0x422d8f
jb 0x422d8b
cmp ecx, edi
jae 0x422d8f
mov edi, ecx
mov ebx, edx
mov edx, dword [esi + 0x98]
mov ecx, esi
push edi
call fcn.004222d0
add esp, 4
test eax, eax
je 0x42307c
sub dword [esi + 0xe0], edi
lea ebp, [esi + 0xa0]
mov ecx, dword [esi + 0x98]
sbb dword [esi + 0xe4], ebx
test byte [esi + 0x54], 1
mov dword [esi + 0xa0], ecx
mov dword [esi + 0xa8], edi
mov dword [esi + 0xac], ebx
je 0x422e8d
xor edx, edx
lea ebp, [esi + 0xa0]
test ebx, ebx
jb 0x422e8d
ja 0x422df6
test edi, edi
je 0x422e8d
mov ebp, ecx
nop dword [eax + eax]
mov ecx, dword [esi + 0xf8]
and ecx, 0xfffd
or ecx, 2
mov eax, ecx
xor eax, 1
imul eax, ecx
shr eax, 8
xor byte [edx + ebp], al
mov ebp, dword [esi + 0x98]
mov ecx, dword [esi + 0xf0]
movsx eax, byte [edx + ebp]
inc edx
xor eax, ecx
shr ecx, 8
movzx eax, al
xor ecx, dword [eax*4 + 0x4d2f08]
movzx eax, cl
add eax, dword [esi + 0xf4]
imul eax, eax, 0x8088405
mov dword [esi + 0xf0], ecx
mov ecx, dword [esi + 0xf8]
inc eax
mov dword [esi + 0xf4], eax
shr eax, 0x18
xor eax, ecx
shr ecx, 8
movzx eax, al
xor ecx, dword [eax*4 + 0x4d2f08]
xor eax, eax
mov dword [esi + 0xf8], ecx
cmp eax, ebx
jb 0x422e00
ja 0x422e87
cmp edx, edi
jb 0x422e00
lea ebp, [esi + 0xa0]
mov ebx, dword [esi + 0x104]
mov edx, dword [esi + 0xac]
mov edi, dword [esi + 0x100]
mov ecx, dword [esi + 0xa8]
mov dword [esp + 0x18], ebx
cmp ebx, edx
jb 0x422ec1
ja 0x422eb3
cmp edi, ecx
jbe 0x422ec1
mov ebx, edx
lea ebp, [esi + 0xa0]
mov edi, ecx
mov dword [esp + 0x18], ebx
mov eax, edi
or eax, ebx
je 0x422f18
mov eax, dword [ebp]
add eax, edi
sub ecx, edi
sbb edx, dword [esp + 0x18]
mov bl, byte [eax - 1]
mov dword [ebp], eax
mov eax, dword [esi + 0x100]
sub eax, edi
mov byte [esp + 0x30], bl
mov edi, dword [esi + 0x104]
sbb edi, dword [esp + 0x18]
mov dword [esi + 0x100], eax
or eax, edi
mov dword [esi + 0xa8], ecx
mov dword [esi + 0xac], edx
mov dword [esi + 0x104], edi
jne 0x422f18
mov al, bl
cmp al, byte [esi + 0x108]
jne 0x42308f
cmp word [esi + 0x56], 0
jne 0x422fd1
mov eax, dword [esi + 0xc4]
mov ebx, dword [esi + 0xc0]
mov dword [esp + 0x30], eax
cmp eax, edx
ja 0x422f3d
jb 0x422f43
cmp ebx, ecx
jb 0x422f43
mov ebx, ecx
mov dword [esp + 0x30], edx
push ebx
push dword [ebp]
push dword [esi + 0xb8]
call sub.VCRUNTIME140.dll_memcpy
mov edi, dword [esi + 0xb8]
add esp, 0xc
mov ecx, dword [esi + 0xd8]
mov edx, edi
push ebx
call fcn.00421df0
mov edx, dword [esp + 0x34]
add esp, 4
sub dword [esi + 0xe8], ebx
mov ecx, dword [esi + 0xe8]
sbb dword [esi + 0xec], edx
sub dword [esi + 0xa8], ebx
mov dword [esi + 0xd8], eax
lea eax, [edi + ebx]
sbb dword [esi + 0xac], edx
sub dword [esi + 0xc0], ebx
mov dword [esi + 0xb8], eax
sbb dword [esi + 0xc4], edx
add dword [ebp], ebx
add dword [esi + 0xc8], ebx
adc dword [esi + 0xcc], edx
add dword [esp + 0x10], ebx
mov ebx, dword [esp + 0x14]
adc ebx, edx
or ecx, dword [esi + 0xec]
mov dword [esp + 0x14], ebx
jmp 0x423061
mov eax, dword [esi + 0xcc]
mov ecx, ebp
mov edi, dword [esi + 0xc8]
mov dword [esp + 0x30], eax
mov eax, dword [esi + 0xb8]
mov dword [esp + 0x20], eax
call fcn.00421ee0
mov dword [esp + 0x1c], eax
test eax, eax
je 0x423003
cmp eax, 1
jne 0x4230a2
mov ebx, dword [esi + 0xc8]
mov edx, dword [esp + 0x20]
sub ebx, edi
mov edi, dword [esi + 0xcc]
mov ecx, dword [esi + 0xd8]
sbb edi, dword [esp + 0x30]
push ebx
call fcn.00421df0
mov ecx, dword [esi + 0xec]
add esp, 4
mov dword [esi + 0xd8], eax
mov eax, dword [esi + 0xe8]
sub eax, ebx
mov dword [esi + 0xe8], eax
sbb ecx, edi
add dword [esp + 0x10], ebx
mov ebx, dword [esp + 0x14]
adc ebx, edi
mov dword [esi + 0xec], ecx
cmp dword [esp + 0x1c], 1
mov dword [esp + 0x14], ebx
je 0x4230c7
or eax, ecx
je 0x4230c7
mov eax, dword [esi + 0xc0]
or eax, dword [esi + 0xc4]
je 0x4230c7
lea ebx, [esi + 0xa0]
jmp 0x422d50
xor eax, eax
mov dword [esi + 8], 7
xor edx, edx
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x1c
ret
xor eax, eax
mov dword [esi + 8], 0x13
xor edx, edx
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x1c
ret
mov dword [esi + 8], 0x12
xor eax, eax
xor edx, edx
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x1c
ret
mov ebx, dword [esp + 0x24]
mov edx, ebx
mov eax, dword [esp + 0x20]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x1c
ret
mov eax, dword [esp + 0x10]
mov edx, ebx
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x1c
ret