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

Disassembly:
push r15
push r14
push r13
push r12
push rsi
push rdi
push rbp
push rbx
sub rsp, 0x118
mov rdi, rdx
mov rsi, rcx
cmp byte [rdx + 0xb9], 0
je 0x140002b18
mov rax, qword [rdi + 0x78]
sub rax, 1
jb 0x1400030ce
mov r12, qword [rdi + 0x70]
imul r13, rax, 0xb0
mov r8, qword [r12 + r13 + 0x40]
cmp r8, 0xffff
jbe 0x140002866
lea rdx, [0x140333ff4]
mov r8d, 0x1e
mov cl, 0x15
call fcn.140213ee0
jmp 0x140002ca5
test r8, r8
je 0x140002b02
mov rax, qword [r12 + r13 + 0x38]
mov rcx, r8
cmp rcx, 3
jbe 0x14000303d
movzx r9d, word [rax]
mov word [rsp + 0x2e], r9w
cmp r9w, 1
je 0x140003051
cmp r9w, 0x20
jb 0x140002be1
movzx edx, word [rax + 2]
movzx r9d, r9w
cmp r9d, 0x4c40
jg 0x140002905
cmp r9d, 0x2704
jle 0x140002954
cmp r9d, 0x4452
jle 0x1400029ae
cmp r9d, 0x4703
jle 0x140002a5f
cmp r9d, 0x4704
je 0x140002be1
cmp r9d, 0x470f
je 0x140002be1
cmp r9d, 0x4b46
jne 0x140002ae5
jmp 0x140002be1
cmp r9d, 0x7074
jg 0x140002971
cmp r9d, 0x5454
jle 0x1400029da
cmp r9d, 0x5854
jle 0x140002a7a
cmp r9d, 0x5855
je 0x140002be1
cmp r9d, 0x6375
je 0x140002be1
cmp r9d, 0x6542
jne 0x140002ae5
jmp 0x140002be1
cmp r9d, 0x64
jg 0x140002a06
add r9d, 0xffffffe0
cmp r9d, 4
jb 0x140002be1
jmp 0x140002ae5
cmp r9d, 0x9900
jle 0x140002a33
cmp r9d, 0xa21f
jg 0x140002a95
lea r10d, [r9 - 0x9901]
cmp r10d, 2
jb 0x140002be1
cmp r9d, 0xa11e
jne 0x140002ae5
jmp 0x140002be1
cmp r9d, 0x334c
jg 0x140002ab0
cmp r9d, 0x2705
je 0x140002be1
cmp r9d, 0x2805
jne 0x140002ae5
jmp 0x140002be1
cmp r9d, 0x4f4b
jg 0x140002acb
cmp r9d, 0x4c41
je 0x140002be1
cmp r9d, 0x4d49
jne 0x140002ae5
jmp 0x140002be1
lea r10d, [r9 - 0x65]
cmp r10d, 2
jb 0x140002be1
cmp r9d, 0x7c8
je 0x140002be1
cmp r9d, 0x2605
jne 0x140002ae5
jmp 0x140002be1
cmp r9d, 0x7075
je 0x140002be1
cmp r9d, 0x756e
je 0x140002be1
cmp r9d, 0x7855
jne 0x140002ae5
jmp 0x140002be1
cmp r9d, 0x4453
je 0x140002be1
cmp r9d, 0x4690
jne 0x140002ae5
jmp 0x140002be1
cmp r9d, 0x5455
je 0x140002be1
cmp r9d, 0x554e
jne 0x140002ae5
jmp 0x140002be1
cmp r9d, 0xa220
je 0x140002be1
cmp r9d, 0xfd4a
jne 0x140002ae5
jmp 0x140002be1
cmp r9d, 0x334d
je 0x140002be1
cmp r9d, 0x4341
jne 0x140002ae5
jmp 0x140002be1
cmp r9d, 0x4f4c
je 0x140002be1
cmp r9d, 0x5356
je 0x140002be1
add rcx, 0xfffffffffffffffc
cmp rcx, rdx
jb 0x140003078
add rax, 4
add rax, rdx
sub rcx, rdx
jne 0x140002877
cmp byte [rdi + 0xba], 0
je 0x140002e00
mov word [rdi + 0xb9], 0
lea rcx, [rsp + 0x30]
mov rdx, rdi
xor r8d, r8d
xor r9d, r9d
call fcn.1400a10a0
mov rax, qword [rsp + 0x30]
cmp rax, 4
jne 0x140003002
mov rax, qword [rdi]
mov r13, qword [rdi + 8]
mov rcx, qword [rdi + 0x60]
mov qword [rsp + 0x80], rcx
movups xmm0, xmmword [rdi + 0x50]
movaps xmmword [rsp + 0x70], xmm0
movups xmm0, xmmword [rdi + 0x40]
movaps xmmword [rsp + 0x60], xmm0
movups xmm0, xmmword [rdi + 0x30]
movaps xmmword [rsp + 0x50], xmm0
movups xmm0, xmmword [rdi + 0x20]
movaps xmmword [rsp + 0x40], xmm0
movups xmm0, xmmword [rdi + 0x10]
movaps xmmword [rsp + 0x30], xmm0
mov qword [rdi], 0
cmp rax, 1
jne 0x1400030ce
lea rbx, [rdi + 0x10]
movabs r14, 0x8000000000000000
cmp r13, r14
jne 0x140002cb7
mov rcx, rdi
call fcn.140004010
mov qword [rdi], 1
mov qword [rdi + 8], r14
mov rax, qword [rsp + 0x50]
mov qword [rbx + 0x20], rax
movaps xmm0, xmmword [rsp + 0x30]
movaps xmm1, xmmword [rsp + 0x40]
movups xmmword [rbx + 0x10], xmm1
movups xmmword [rbx], xmm0
cmp byte [rdi + 0xbb], 0
jne 0x140002f30
jmp 0x140002f40
lea rax, [rsp + 0x2e]
mov qword [rsp + 0xc0], rax
lea rax, [0x140043b60]
mov qword [rsp + 0xc8], rax
mov qword [rsp + 0x30], 2
mov qword [rsp + 0x40], 0
mov qword [rsp + 0x48], 6
mov qword [rsp + 0x50], 0
movabs rax, 0xc00000020
mov qword [rsp + 0x58], rax
mov byte [rsp + 0x60], 3
lea rax, str._3_
mov qword [rsp + 0xd0], rax
mov qword [rsp + 0xd8], 2
lea rax, [rsp + 0x30]
mov qword [rsp + 0xf0], rax
mov qword [rsp + 0xf8], 1
lea rax, [rsp + 0xc0]
mov qword [rsp + 0xe0], rax
mov qword [rsp + 0xe8], 1
lea rdi, [rsp + 0x100]
lea rdx, [rsp + 0xd0]
mov rcx, rdi
call fcn.140035a20
mov rcx, rdi
call fcn.140213ff0
xor ecx, ecx
mov qword [rsi], rcx
mov qword [rsi + 8], rax
mov qword [rsi + 0x10], rdx
jmp 0x14000300e
mov qword [rsp + 0x90], r13
mov rax, qword [rbx + 0x20]
mov qword [rsp + 0xb8], rax
movups xmm0, xmmword [rbx]
movups xmm1, xmmword [rbx + 0x10]
movups xmmword [rsp + 0xa8], xmm1
movups xmmword [rsp + 0x98], xmm0
mov r8, qword [rsp + 0xa0]
cmp r8, 0xc
jb 0x1400030ce
mov eax, dword [rdi + 0x9c]
mov r14, qword [rsp + 0x98]
shr eax, 0x18
mov byte [r14 + 0xb], al
mov ecx, dword [rsp + 0xb8]
mov eax, dword [rsp + 0xb0]
mov edx, dword [rsp + 0xb4]
xor r9d, r9d
lea r10, [0x140333abc]
nop dword [rax + rax]
movzx r11d, byte [r14 + r9]
mov r15d, ecx
or r15d, 3
mov ebp, r15d
and ebp, 0xfffffffe
imul ebp, r15d
mov r15d, eax
xor r15b, r11b
movzx r15d, r15b
shr eax, 8
xor eax, dword [r10 + r15*4]
movzx r15d, al
add r15d, edx
imul edx, r15d, 0x8088405
inc edx
mov r15d, edx
shr r15d, 0x18
movzx r12d, cl
xor r12d, r15d
shr ebp, 8
shr ecx, 8
xor ecx, dword [r10 + r12*4]
xor bpl, r11b
mov byte [r14 + r9], bpl
inc r9
cmp r8, r9
jne 0x140002d30
mov dword [rsp + 0xb8], ecx
mov dword [rsp + 0xb0], eax
mov dword [rsp + 0xb4], edx
lea rcx, [rsp + 0xa8]
mov rdx, r14
call case.0x1400a7928.12
mov r15, rax
test rax, rax
je 0x140002ef0
mov rcx, qword [rsp + 0xa8]
call qword [sym.imp.kernel32.dll_CloseHandle]
mov rbp, r15
test r13, r13
je 0x140002de7
mov rcx, qword [0x14034bdf0]
xor edx, edx
mov r8, r14
call qword [sym.imp.kernel32.dll_HeapFree]
test r15, r15
je 0x140002f06
mov qword [rsi], 0
mov qword [rsi + 8], rbp
jmp 0x14000300e
cmp dword [rdi], 1
jne 0x1400030ce
movabs rax, 0x8000000000000000
cmp qword [rdi + 8], rax
jne 0x1400030ce
lea rbx, [rdi + 0x10]
mov rdx, qword [r12 + r13 + 0x38]
mov rcx, rbx
call case.0x1400a7928.12
test rax, rax
jne 0x140002ca5
lea rax, [r12 + r13]
add rax, 0x40
mov rbp, qword [rax]
mov r14, qword [r12 + r13 + 0x90]
add r14, rbp
mov qword [rdi + 0xa8], r14
mov qword [r12 + r13 + 0x90], r14
movzx eax, byte [r12 + r13 + 0xa8]
mov byte [rsp + 0x2d], al
mov rdx, qword [r12 + r13 + 0x80]
add rdx, 0x1c
mov qword [rsp + 0x30], 0
mov r15, qword [rdi + 0x10]
lea r8, [rsp + 0x30]
mov rcx, r15
xor r9d, r9d
call qword [sym.imp.kernel32.dll_SetFilePointerEx]
test eax, eax
je 0x140003065
lea eax, [rbp + 0x14]
cmp byte [rsp + 0x2d], 0
cmove eax, ebp
mov word [rsp + 0x30], ax
lea rdx, [rsp + 0x30]
mov r8d, 2
mov rcx, rbx
call case.0x1400a7928.12
test rax, rax
jne 0x140002ca5
lea rcx, [rsp + 0x30]
mov rdx, r15
xor r8d, r8d
mov r9, r14
call fcn.1401f7420
cmp qword [rsp + 0x30], 0
je 0x14000308c
mov rax, qword [rsp + 0x38]
jmp 0x140002ca5
mov rbp, qword [rsp + 0xa8]
test r13, r13
jne 0x140002dd5
jmp 0x140002de7
mov rcx, rdi
call fcn.140004010
mov qword [rdi], 1
movabs rax, 0x8000000000000000
mov qword [rdi + 8], rax
mov qword [rdi + 0x10], rbp
cmp byte [rdi + 0xbb], 0
je 0x140002f40
mov byte [rdi + 0xb8], 0
mov byte [rdi + 0xbb], 0
jmp 0x140002f4e
mov rax, qword [rdi + 0x78]
lea r15, [rax - 1]
sub rax, 1
jae 0x140002f5a
mov qword [rsi], 4
jmp 0x14000300e
mov r12, qword [rdi + 0x70]
mov ecx, dword [rdi + 0x9c]
imul r13, rax, 0xb0
mov dword [r12 + r13 + 0x9c], ecx
mov rax, qword [rdi + 0xb0]
mov qword [r12 + r13 + 0x78], rax
mov qword [rsp + 0x30], 0
mov r14, qword [rdi + 0x10]
lea r8, [rsp + 0x30]
mov rcx, r14
xor edx, edx
mov r9d, 1
call qword [sym.imp.kernel32.dll_SetFilePointerEx]
test eax, eax
je 0x140003022
imul r8, r15, 0xb0
add r8, r12
mov r15, qword [rsp + 0x30]
mov rax, r15
sub rax, qword [rdi + 0xa8]
mov qword [r12 + r13 + 0x70], rax
lea rcx, [rsp + 0x30]
mov rdx, rbx
call fcn.1400a0f20
mov rax, qword [rsp + 0x30]
cmp rax, 4
jne 0x140003002
lea rcx, [rsp + 0x30]
mov rdx, r14
xor r8d, r8d
mov r9, r15
call fcn.1401f7420
cmp qword [rsp + 0x30], 0
je 0x140002f30
mov rax, qword [rsp + 0x38]
jmp 0x140003030
movups xmm0, xmmword [rsp + 0x38]
movups xmmword [rsi + 8], xmm0
mov qword [rsi], rax
add rsp, 0x118
pop rbx
pop rbp
pop rdi
pop rsi
pop r12
pop r13
pop r14
pop r15
ret
call qword [sym.imp.kernel32.dll_GetLastError]
shl rax, 0x20
or rax, 2
mov qword [rsi], 0
mov qword [rsi + 8], rax
jmp 0x14000300e
lea rdx, str.Incomplete_extra_data_headerExtra_data_exceeds_extra_field
mov r8d, 0x1c
mov cl, 0x27
jmp 0x14000285c
lea rdx, str.No_custom_ZIP64_extra_data_allowedExtra_data_size_exceeds_extra_fieldExtra_data_header_ID__requires_crate_feature__unreserved_
mov r8d, 0x22
mov cl, 0x27
jmp 0x14000285c
call qword [sym.imp.kernel32.dll_GetLastError]
shl rax, 0x20
or rax, 2
jmp 0x140002ca5
lea rdx, [0x140333f5a]
mov r8d, 0x23
mov cl, 0x27
jmp 0x14000285c
movzx r8d, word [r12 + r13 + 0x98]
mov r9d, dword [r12 + r13 + 0x60]
mov eax, dword [r12 + r13 + 0x64]
mov dword [rsp + 0x20], eax
lea rcx, [rsp + 0x30]
mov rdx, rdi
call fcn.1400a10a0
mov rcx, qword [rsp + 0x30]
cmp rcx, 4
je 0x140002b0f
mov rax, qword [rsp + 0x38]
mov rdx, qword [rsp + 0x40]
jmp 0x140002ca7
ud2