Function at 0x422d10
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 0x422d4c
ja 0x422d46
mov eax, dword [esp + 0x30]
cmp eax, edx
jbe 0x422d50
mov eax, edx
mov ecx, edi
jmp 0x422d50
mov eax, dword [esp + 0x30]
mov dword [esi + 0xc0], eax
or eax, ecx
mov dword [esi + 0xc4], ecx
je 0x4230e5
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 0x422ebd
mov ecx, dword [esi + 0xe0]
mov ebp, ebx
mov edx, dword [esi + 0xe4]
mov eax, ecx
or eax, edx
je 0x422ebd
xor ebx, ebx
mov edi, 0x4000
test edx, edx
ja 0x422dbf
jb 0x422dbb
cmp ecx, edi
jae 0x422dbf
mov edi, ecx
mov ebx, edx
mov edx, dword [esi + 0x98]
mov ecx, esi
push edi
call fcn.00422300
add esp, 4
test eax, eax
je 0x4230ac
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 0x422ebd
xor edx, edx
lea ebp, [esi + 0xa0]
test ebx, ebx
jb 0x422ebd
ja 0x422e26
test edi, edi
je 0x422ebd
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 + 0x4d2f60]
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 + 0x4d2f60]
xor eax, eax
mov dword [esi + 0xf8], ecx
cmp eax, ebx
jb 0x422e30
ja 0x422eb7
cmp edx, edi
jb 0x422e30
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 0x422ef1
ja 0x422ee3
cmp edi, ecx
jbe 0x422ef1
mov ebx, edx
lea ebp, [esi + 0xa0]
mov edi, ecx
mov dword [esp + 0x18], ebx
mov eax, edi
or eax, ebx
je 0x422f48
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 0x422f48
mov al, bl
cmp al, byte [esi + 0x108]
jne 0x4230bf
cmp word [esi + 0x56], 0
jne 0x423001
mov eax, dword [esi + 0xc4]
mov ebx, dword [esi + 0xc0]
mov dword [esp + 0x30], eax
cmp eax, edx
ja 0x422f6d
jb 0x422f73
cmp ebx, ecx
jb 0x422f73
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.00421e20
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 0x423091
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.00421f10
mov dword [esp + 0x1c], eax
test eax, eax
je 0x423033
cmp eax, 1
jne 0x4230d2
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.00421e20
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 0x4230f7
or eax, ecx
je 0x4230f7
mov eax, dword [esi + 0xc0]
or eax, dword [esi + 0xc4]
je 0x4230f7
lea ebx, [esi + 0xa0]
jmp 0x422d80
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