Function at 0x623d60
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 0x623d7b
pop ebx
test eax, eax
je 0x623e37
cmp eax, 1
jne 0x623e51
mov ebx, dword [ebp + 0xc]
lea edx, [edi + 8]
mov ecx, esi
push ebx
mov esi, dword [ebp + 8]
push esi
call fcn.00623be6
add esp, 8
test ebx, ebx
je 0x624198
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 + 0x7f6278]
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 + 0x7f6278]
mov esi, dword [esp + 8]
dec ebx
mov byte [esi], ah
lea esi, [esi + 1]
jne 0x623db6
mov eax, dword [esp]
mov dword [eax + 0x20], edx
mov dword [eax + 0x18], ecx
mov dword [eax + 0x1c], edi
jmp 0x624198
add edi, 8
mov ecx, esi
mov edx, edi
push dword [ebp + 0xc]
push dword [ebp + 8]
call fcn.00623be6
add esp, 8
jmp 0x624198
mov eax, dword [edi + 0x20]
mov ecx, dword [edi + 0x24]
mov edx, eax
or edx, ecx
je 0x623e96
mov edx, dword [ebp + 0xc]
cmp eax, edx
sbb ecx, 0
cmovae eax, edx
cmp eax, edx
ja 0x6241ae
lea edx, [edi + 8]
lea ecx, [esp + 0x18]
mov dword [esp + 0x3c], edx
push eax
push dword [ebp + 8]
call fcn.00623be6
add esp, 8
lea eax, [esp + 0x18]
cmp byte [eax], 4
jne 0x623ea5
mov eax, dword [esp + 0x1c]
jmp 0x623eb6
mov dword [esi + 4], 0
mov byte [esi], 4
jmp 0x624198
mov ecx, dword [esp + 0x18]
mov eax, dword [esp + 0x1c]
cmp cl, 4
jne 0x62405f
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 0x6241b7
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 0x623f14
lea ecx, [esi + ebx]
push eax
mov esi, dword [ebp + 8]
push esi
push ecx
call fcn.0064a810
mov ecx, dword [esp + 0x14]
add esp, 0xc
add ebx, ecx
jmp 0x623f91
cmp byte [esp], 0
mov ecx, dword [ebp + 8]
mov dword [esp], ecx
je 0x623f52
mov esi, dword [esp + 4]
lea eax, [ecx + edx]
mov dword [esp], eax
add ebx, esi
push edx
push ecx
push ebx
call fcn.0064a810
add esp, 0xc
add dword [edi + 0x28], 1
lea ecx, [edi + 0x30]
mov edx, esi
adc dword [edi + 0x2c], 0
push 1
call fcn.005a14c3
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 0x623f7c
shr eax, 6
lea ecx, [edi + 0x30]
add dword [edi + 0x28], eax
adc dword [edi + 0x2c], 0
push eax
call fcn.005a14c3
add esp, 4
push ebx
push esi
push dword [esp + 0xc]
call fcn.0064a810
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 0x623fbe
mov eax, dword [esp + 0x10]
mov dword [eax + 4], esi
mov byte [eax], 4
jmp 0x624198
cmp byte [edi + 0xd0], 0
jne 0x6241c8
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.00623be6
add esp, 8
movzx eax, byte [esp + 0x18]
cmp eax, 4
jne 0x62402c
mov ecx, dword [esp + 0x1c]
test ecx, ecx
je 0x624170
mov eax, ebx
sub eax, ecx
jb 0x6241a0
add edi, ecx
mov ebx, eax
jmp 0x624059
mov eax, dword [eax*4 + 0x6241f4]
add eax, dword [esp + 0x14]
jmp eax
test ebx, ebx
jne 0x623ff6
jmp 0x624079
mov dword [esi], ecx
mov dword [esi + 4], eax
jmp 0x624198
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.00624204
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.00624204
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.004a3a34
test al, al
je 0x624167
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.004b5258
jmp 0x623e49
mov esi, dword [esp + 8]
jmp 0x623faf
xor edx, edx
mov eax, 2
mov ecx, 0x7f59b4
jmp 0x62418a
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 0x7f59c0
call fcn.00652180
jmp 0x6241c3
mov ecx, eax
push 0x7f5df8
jmp 0x6241be
mov ecx, eax
push 0x7f5e08
call fcn.00652260
add esp, 4
ud2
lea ecx, [esp + 0x18]
mov edx, 0x7f5eb4
xor eax, eax
mov dword [ecx], 0x7f5eac
mov dword [ecx + 4], 1
mov dword [ecx + 0x10], eax
mov dword [ecx + 8], 0x7f59e0
mov dword [ecx + 0xc], eax
call fcn.00652150
ud2