Function at 0x4c2168
Capabilities:
Encode data using xor
Generate random numbers using the delphi lcg
Hash data with crc32
Resolve function by parsing pe exports

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff0
sub esp, 0xb0
movzx eax, byte [edx]
mov edi, edx
mov esi, ecx
call 0x4c2183
pop ebx
test eax, eax
je 0x4c223f
cmp eax, 1
jne 0x4c2259
mov ebx, dword [ebp + 0xc]
lea edx, [edi + 8]
mov ecx, esi
push ebx
mov esi, dword [ebp + 8]
push esi
call fcn.004c1ffa
add esp, 8
test ebx, ebx
je 0x4c25a0
mov edx, dword [edi + 0x20]
mov ecx, dword [edi + 0x18]
mov dword [esp], edi
mov edi, dword [edi + 0x1c]
mov dword [esp + 0x14], ebx
mov ebx, edx
mov dword [esp + 8], esi
or ebx, 3
mov eax, ebx
and eax, 0xfffffffe
imul eax, ebx
mov ebx, ecx
xor ah, byte [esi]
shr ebx, 8
xor cl, ah
movzx esi, cl
mov ecx, ebx
mov ebx, 0xff
xor ecx, dword [esi*4 + 0x52e75c]
mov esi, ecx
and esi, ebx
mov ebx, edx
add esi, edi
shr ebx, 8
imul edi, esi, 0x8088405
inc edi
mov esi, edi
shr esi, 0x18
mov dword [esp + 4], esi
mov esi, 0xff
and edx, esi
mov esi, edx
mov edx, ebx
mov ebx, dword [esp + 0x14]
xor esi, dword [esp + 4]
xor edx, dword [esi*4 + 0x52e75c]
mov esi, dword [esp + 8]
dec ebx
mov byte [esi], ah
lea esi, [esi + 1]
jne 0x4c21be
mov eax, dword [esp]
mov dword [eax + 0x20], edx
mov dword [eax + 0x18], ecx
mov dword [eax + 0x1c], edi
jmp 0x4c25a0
add edi, 8
mov ecx, esi
mov edx, edi
push dword [ebp + 0xc]
push dword [ebp + 8]
call fcn.004c1ffa
add esp, 8
jmp 0x4c25a0
mov eax, dword [edi + 0x20]
mov ecx, dword [edi + 0x24]
mov edx, eax
or edx, ecx
je 0x4c229e
mov edx, dword [ebp + 0xc]
cmp eax, edx
sbb ecx, 0
cmovae eax, edx
cmp eax, edx
ja 0x4c25b4
lea edx, [edi + 8]
lea ecx, [esp + 0x18]
mov dword [esp + 0x3c], edx
push eax
push dword [ebp + 8]
call fcn.004c1ffa
add esp, 8
lea eax, [esp + 0x18]
cmp byte [eax], 4
jne 0x4c22ad
mov eax, dword [esp + 0x1c]
jmp 0x4c22be
mov dword [esi + 4], 0
mov byte [esi], 4
jmp 0x4c25a0
mov ecx, dword [esp + 0x18]
mov eax, dword [esp + 0x1c]
cmp cl, 4
jne 0x4c2467
sub dword [edi + 0x20], eax
mov edx, dword [ebp + 0xc]
mov dword [esp + 0x14], ebx
mov dword [esp + 0x10], esi
sbb dword [edi + 0x24], 0
cmp eax, edx
ja 0x4c25c0
mov cl, byte [edi + 0xc8]
mov edx, 0x40
lea esi, [edi + 0x88]
mov dword [esp + 8], eax
mov dword [esp + 4], esi
movzx ebx, cl
mov byte [esp], cl
mov ecx, eax
sub edx, ebx
sub ecx, edx
mov dword [esp + 0xc], ecx
jae 0x4c231c
lea ecx, [esi + ebx]
push eax
mov esi, dword [ebp + 8]
push esi
push ecx
call fcn.004e4d00
mov ecx, dword [esp + 0x14]
add esp, 0xc
add ebx, ecx
jmp 0x4c2399
cmp byte [esp], 0
mov ecx, dword [ebp + 8]
mov dword [esp], ecx
je 0x4c235a
mov esi, dword [esp + 4]
lea eax, [ecx + edx]
mov dword [esp], eax
add ebx, esi
push edx
push ecx
push ebx
call fcn.004e4d00
add esp, 0xc
add dword [edi + 0x28], 1
lea ecx, [edi + 0x30]
mov edx, esi
adc dword [edi + 0x2c], 0
push 1
call fcn.0049738f
add esp, 4
mov eax, dword [esp + 0xc]
mov edx, dword [esp]
mov esi, eax
mov ebx, eax
and esi, 0xffffffc0
and ebx, 0x3f
add esi, edx
cmp eax, 0x40
jb 0x4c2384
shr eax, 6
lea ecx, [edi + 0x30]
add dword [edi + 0x28], eax
adc dword [edi + 0x2c], 0
push eax
call fcn.0049738f
add esp, 4
push ebx
push esi
push dword [esp + 0xc]
call fcn.004e4d00
add esp, 0xc
mov ecx, dword [esp + 8]
mov esi, dword [ebp + 8]
mov byte [edi + 0xc8], bl
mov eax, dword [edi + 0x1c]
push ecx
push esi
push dword [edi + 0x18]
mov esi, ecx
call dword [eax + 0xc]
add esp, 0xc
mov eax, dword [edi + 0x20]
or eax, dword [edi + 0x24]
je 0x4c23c6
mov eax, dword [esp + 0x10]
mov dword [eax + 4], esi
mov byte [eax], 4
jmp 0x4c25a0
cmp byte [edi + 0xd0], 0
jne 0x4c25cc
mov esi, dword [esp + 0x3c]
lea eax, [edi + 0x28]
mov dword [esp], edi
mov byte [edi + 0xd0], 1
lea edi, [esp + 0x40]
mov ebx, 0xa
mov dword [esp + 0xc], eax
xor eax, eax
mov word [edi + 8], 0
mov dword [edi + 4], eax
mov dword [edi], eax
lea ecx, [esp + 0x18]
mov edx, esi
push ebx
push edi
call fcn.004c1ffa
add esp, 8
movzx eax, byte [esp + 0x18]
cmp eax, 4
jne 0x4c2434
mov ecx, dword [esp + 0x1c]
test ecx, ecx
je 0x4c2578
mov eax, ebx
sub eax, ecx
jb 0x4c25a8
add edi, ecx
mov ebx, eax
jmp 0x4c2461
mov eax, dword [eax*4 + 0x4c25f8]
add eax, dword [esp + 0x14]
jmp eax
test ebx, ebx
jne 0x4c23fe
jmp 0x4c2481
mov dword [esi], ecx
mov dword [esi + 4], eax
jmp 0x4c25a0
mov esi, dword [esp + 4]
xor eax, eax
lea ecx, [esp + 0x50]
xorps xmm0, xmm0
lea edi, [esp + 0x90]
mov dword [ecx + 0x10], eax
movaps xmmword [ecx], xmm0
mov ecx, dword [esp + 0xc]
mov dword [edi + 0x10], eax
movaps xmmword [edi], xmm0
mov edx, esi
push edi
call fcn.004c2c24
add esp, 4
mov ebx, dword [esp]
lea ecx, [esp + 0x18]
movsd xmm2, qword [edi]
mov edx, esi
movsd xmm1, qword [ebx + 0x58]
mov eax, dword [ebx + 0x60]
movsd xmm0, qword [ebx + 0x50]
movsd qword [ecx + 0x10], xmm1
movsd xmm1, qword [ebx + 0x48]
mov dword [ecx + 0x18], eax
movsd qword [ecx + 8], xmm0
mov eax, dword [edi + 0x10]
movsd qword [esi], xmm2
movsd qword [ecx], xmm1
movsd xmm1, qword [edi + 8]
mov dword [esi + 0x10], eax
movsd qword [esi + 8], xmm1
lea esi, [esp + 0x50]
mov byte [ebx + 0xc8], 0x14
push esi
call fcn.004c2c24
add esp, 4
mov eax, dword [ebx + 0x80]
lea edx, [esp + 0x40]
mov dword [ebx + 0x40], eax
movsd xmm0, qword [ebx + 0x78]
movsd qword [ebx + 0x38], xmm0
movsd xmm0, qword [ebx + 0x70]
movsd qword [ebx + 0x30], xmm0
movaps xmm0, xmmword [esi]
mov eax, dword [ebx + 0x68]
mov ecx, dword [ebx + 0x6c]
mov dword [ebx + 0x28], eax
mov eax, dword [esi + 0x10]
mov dword [ebx + 0x2c], ecx
lea ecx, [esp + 0x70]
mov byte [ebx + 0xc8], 0
movaps xmmword [ecx], xmm0
mov dword [ecx + 0x10], eax
call fcn.004039e7
test al, al
je 0x4c256f
mov ecx, dword [esp + 0x10]
mov edx, 0x15
push 0x5b
push str.Invalid_authentication_code__this_could_be_due_to_an_invalid_password_or_errors_in_the_dataTried_to_use_an_already_finalized_HMAC._This_is_a_bug_
call fcn.0040999d
jmp 0x4c2251
mov esi, dword [esp + 8]
jmp 0x4c23b7
xor edx, edx
mov eax, 2
mov ecx, 0x52de94
jmp 0x4c2592
mov esi, dword [esp + 0x10]
movzx eax, al
or eax, edx
mov dword [esi + 4], ecx
mov dword [esi], eax
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret
mov edx, ebx
push 0x52dea0
call fcn.004e8b80
mov ecx, eax
push 0x52e448
call fcn.004e8c40
mov ecx, eax
push 0x52e458
call fcn.004e8c40
lea ecx, [esp + 0x18]
mov edx, 0x52e504
xor eax, eax
mov dword [ecx], 0x52e4fc
mov dword [ecx + 4], 1
mov dword [ecx + 0x10], eax
mov dword [ecx + 8], str.C:Usersigame.cargo_registry_srcindex.crates.io_6f17d22bba15001fzip_0.6.6_src_aes.rs
mov dword [ecx + 0xc], eax
call fcn.004e8b50
nop
out dx, al
add al, byte [eax]
add dl, cl
add al, byte [eax]
add byte [esi - 0x41fffffe], bh
add al, byte [eax]
add byte [esi - 0x7d], dl
push esi
invalid
jns 0x4c2610
add byte [ecx - 0xef8b32], cl
adc bh, bh
push 0