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

Disassembly:
push rbp
push rbx
push r12
lea rbp, [rsp - 0x550]
sub rsp, 0x650
mov rax, qword [0x1800a11a0]
xor rax, rsp
mov qword [rbp + 0x520], rax
cmp dword [rcx + 0x24], 0
mov r12, r8
mov rbx, rcx
je 0x18002586b
mov eax, 0x40000
jmp 0x180025d14
cmp byte [rcx + 0x40], 0
je 0x18002587b
mov eax, 0x50000
jmp 0x180025d14
mov rax, qword [rcx]
mov r8, rdx
neg rax
mov qword [rsp + 0x648], rdi
mov qword [rsp + 0x640], r13
lea rcx, [rbp + 0x310]
sbb r13d, r13d
mov edx, 0x104
and r13d, 0xc
call fcn.18005c52c
movzx ecx, word [rbp + 0x310]
test cx, cx
jne 0x1800258c2
mov eax, 0x10000
jmp 0x180025d04
mov qword [rsp + 0x688], rsi
lea rax, [rbp + 0x310]
mov qword [rsp + 0x638], r14
mov edx, 0x2f
mov qword [rsp + 0x630], r15
cmp cx, 0x5c
jne 0x1800258ef
mov word [rax], dx
movzx ecx, word [rax + 2]
add rax, 2
test cx, cx
jne 0x1800258e6
mov r14d, 8
lea rcx, [rbp + 0x310]
mov rsi, 0xffffffffffffffff
mov r15d, r14d
mov rax, rsi
nop word [rax + rax]
cmp word [rcx + rax*2 + 2], 0
lea rax, [rax + 1]
jne 0x180025920
lea rdi, [rbp + 0x310]
xor ecx, ecx
lea rdi, [rdi + rax*2]
lea rax, [rbp + 0x310]
cmp rdi, rax
jbe 0x18002595b
cmp word [rdi], 0x2e
je 0x180025971
sub rdi, 2
lea rax, [rbp + 0x310]
cmp rdi, rax
ja 0x180025945
lea rax, [rbp + 0x310]
cmp rdi, rax
jne 0x180025971
cmp word [rdi], 0x2e
jne 0x180025a16
lea rdx, [0x18008f614]
mov rcx, rdi
call fcn.18005c2a4
test eax, eax
je 0x180025a0d
lea rdx, str..zip
mov rcx, rdi
call fcn.18005c2a4
test eax, eax
je 0x180025a0d
lea rdx, str..zoo
mov rcx, rdi
call fcn.18005c2a4
test eax, eax
je 0x180025a0d
lea rdx, str..arc
mov rcx, rdi
call fcn.18005c2a4
test eax, eax
je 0x180025a0d
lea rdx, str..lzh
mov rcx, rdi
call fcn.18005c2a4
test eax, eax
je 0x180025a0d
lea rdx, str..arj
mov rcx, rdi
call fcn.18005c2a4
test eax, eax
je 0x180025a0d
lea rdx, [0x18008f670]
mov rcx, rdi
call fcn.18005c2a4
test eax, eax
je 0x180025a0d
lea rdx, str..tgz
mov rcx, rdi
call fcn.18005c2a4
test eax, eax
jne 0x180025a14
xor ecx, ecx
mov r15d, ecx
jmp 0x180025a16
xor ecx, ecx
mov qword [rbx + 0xa8], rcx
mov qword [rbx + 0xb8], rcx
mov byte [rbx + 0xb0], 0
mov qword [rbx + 0x9c], 0
mov dword [rbx + 0x98], ecx
mov dword [rbx + 0xc8], ecx
test r12, r12
jne 0x180025a53
mov edi, 0x10000
mov eax, edi
jmp 0x180025cec
mov qword [rsp + 0x30], rcx
xor r9d, r9d
mov dword [rsp + 0x28], ecx
mov edx, 0x80000000
mov rcx, r12
mov dword [rsp + 0x20], 3
lea r8d, [r9 + 1]
call qword [sym.imp.KERNEL32.dll_CreateFileW]
mov r12, rax
cmp rax, rsi
jne 0x180025a8d
mov edi, 0x200
mov eax, edi
jmp 0x180025cec
mov rdx, r12
mov rcx, rbx
call fcn.180025150
mov edi, eax
test eax, eax
je 0x180025aae
mov rcx, r12
call qword [sym.imp.KERNEL32.dll_CloseHandle]
mov eax, edi
jmp 0x180025cec
xor r12d, r12d
mov byte [rbx + 0xb0], 1
lea r8, [0x18008f025]
mov qword [rbp + 0x2c0], r12
mov edx, 0x104
lea rcx, [rbp - 0x78]
call fcn.18005747c
mov qword [rsp + 0x38], r12
lea rax, [rbp + 0xa8]
mov qword [rsp + 0x30], r12
lea r8, [rbp + 0x310]
mov dword [rsp + 0x28], 0x104
mov r9d, esi
xor edx, edx
mov qword [rsp + 0x20], rax
mov ecx, 0xfde9
call qword [sym.imp.KERNEL32.dll_WideCharToMultiByte]
lea rax, [rbp + 0xa8]
inc rsi
cmp byte [rax + rsi], r12b
jne 0x180025b10
lea r8, [0x18008f025]
mov qword [rsp + 0x58], rsi
mov edx, 0x104
lea rcx, [rbp + 0x1ac]
call fcn.18005747c
mov edx, 9
mov eax, dword [rbx + 0x90]
mov dword [rsp + 0x48], eax
mov qword [rbp + 0xa0], r12
mov qword [rsp + 0x70], r12
mov dword [rbp + 0x2b0], 1
mov dword [rbp + 0x2b8], r12d
mov word [rsp + 0x7a], r12w
mov dword [rsp + 0x40], 0x140b17
mov dword [rsp + 0x4c], r12d
mov word [rsp + 0x44], r14w
cmp qword [rbx], r12
je 0x180025b89
movzx r14d, dx
mov word [rsp + 0x44], dx
mov word [rsp + 0x7c], r14w
mov word [rsp + 0x46], r15w
test r15d, r15d
jne 0x180025bae
mov ecx, dword [rbx + 0x98]
test ecx, ecx
js 0x180025bae
lea eax, [rcx + r13]
mov dword [rsp + 0x50], eax
jmp 0x180025bb9
mov ecx, dword [rbx + 0x98]
mov dword [rsp + 0x50], r12d
mov eax, dword [rbx + 0x70]
mov r8, qword [rbx + 0x80]
mov dword [rbp - 0x80], eax
mov eax, dword [rbx + 0x28]
add eax, dword [rbx + 0x20]
mov dword [rbp - 0x7c], eax
lea rax, [rbp + 0x2e0]
mov qword [rbp + 0x90], rax
lea rax, [rbp + 0x2f8]
mov qword [rbp + 0x98], rax
movzx eax, byte [rbx + 0x80]
mov byte [rbp + 0x2e5], al
mov rax, r8
sar rax, 8
mov byte [rbp + 0x2e6], al
mov rax, r8
sar rax, 0x10
mov byte [rbp + 0x2e7], al
movzx eax, byte [rbx + 0x78]
mov byte [rbp + 0x2e9], al
mov dword [rsp + 0x54], ecx
mov rcx, qword [rbx + 0x78]
mov rax, rcx
sar r8, 0x18
sar rax, 8
mov byte [rbp + 0x2ea], al
mov rax, rcx
sar rax, 0x10
mov byte [rbp + 0x2eb], al
movzx eax, byte [rbx + 0x88]
mov byte [rbp + 0x2ed], al
mov qword [rsp + 0x68], rdx
mov rdx, qword [rbx + 0x88]
mov rax, rdx
sar rcx, 0x18
sar rax, 8
mov byte [rbp + 0x2ee], al
mov rax, rdx
mov dword [rbp + 0x2e0], 0xd5455
mov byte [rbp + 0x2e4], 7
movsd xmm0, qword [rbp + 0x2e0]
sar rax, 0x10
mov byte [rbp + 0x2e8], r8b
mov byte [rbp + 0x2ec], cl
lea rcx, [rsp + 0x40]
sar rdx, 0x18
mov byte [rbp + 0x300], r8b
mov r8, rbx
movsd qword [rbp + 0x2f8], xmm0
mov byte [rbp + 0x2ef], al
mov word [rsp + 0x78], r12w
mov qword [rsp + 0x60], 0x11
mov byte [rbp + 0x2f0], dl
mov byte [rbp + 0x2fa], 5
call fcn.180023e60
test eax, eax
je 0x180025d2f
mov rcx, rbx
call fcn.180025450
mov eax, 0x400
mov r14, qword [rsp + 0x638]
mov rsi, qword [rsp + 0x688]
mov r15, qword [rsp + 0x630]
mov rdi, qword [rsp + 0x648]
mov r13, qword [rsp + 0x640]
mov rcx, qword [rbp + 0x520]
xor rcx, rsp
call fcn.180032aa0
add rsp, 0x650
pop r12
pop rbx
pop rbp
ret
mov ecx, dword [rsp + 0x58]
add ecx, 0x1e
add ecx, dword [rsp + 0x60]
add dword [rbx + 0x28], ecx
cmp dword [rbx + 0x24], r12d
je 0x180025d50
mov rcx, rbx
call fcn.180025450
mov eax, dword [rbx + 0x24]
jmp 0x180025cec
mov dword [rbx + 0x44], 0x12345678
lea rsi, [0x18008e340]
mov dword [rbx + 0x48], 0x23456789
mov dword [rbx + 0x4c], 0x34567890
mov r8, qword [rbx]
test r8, r8
je 0x180025dc1
movzx eax, byte [r8]
test al, al
je 0x180025dc1
mov edx, dword [rbx + 0x44]
mov ecx, edx
xor rcx, rax
shr edx, 8
movzx eax, cl
mov ecx, dword [rsi + rax*4]
xor ecx, edx
mov edx, dword [rbx + 0x4c]
movzx eax, cl
add eax, dword [rbx + 0x48]
imul eax, eax, 0x8088405
mov dword [rbx + 0x44], ecx
movzx ecx, dl
shr edx, 8
inc eax
mov dword [rbx + 0x48], eax
shr rax, 0x18
xor rcx, rax
mov eax, dword [rsi + rcx*4]
xor eax, edx
mov dword [rbx + 0x4c], eax
add r8, 1
jne 0x180025d74
cmp byte [0x1800a6cf4], r12b
jne 0x180025de2
call qword [sym.imp.USER32.dll_GetDesktopWindow]
mov rdi, rax
call qword [sym.imp.KERNEL32.dll_GetTickCount]
xor edi, eax
mov ecx, edi
call fcn.18005c440
mov rdi, r12
call fcn.18005c414
sar eax, 7
mov byte [rbp + rdi + 0x2d0], al
inc rdi
cmp rdi, 0xc
jl 0x180025de5
mov eax, dword [rsp + 0x48]
mov rdi, r12
shr eax, 8
mov byte [rbp + 0x2db], al
nop dword [rax]
mov edx, dword [rbx + 0x44]
mov ecx, edx
mov r9d, dword [rbx + 0x4c]
movsx r10, byte [rbp + rdi + 0x2d0]
mov r8d, r9d
xor rcx, r10
shr edx, 8
movzx eax, cl
and r9d, 0xfffd
or r9d, 2
mov eax, dword [rsi + rax*4]
xor eax, edx
mov edx, eax
movzx eax, al
add eax, dword [rbx + 0x48]
imul eax, eax, 0x8088405
inc eax
mov dword [rbx + 0x48], eax
mov ecx, eax
shr rcx, 0x18
movzx eax, r8b
xor rcx, rax
shr r8d, 8
mov eax, r9d
xor eax, 1
imul eax, r9d
mov r11d, dword [rsi + rcx*4]
mov ecx, edx
shr edx, 8
xor r11d, r8d
movsx r8, byte [rbp + rdi + 0x2d1]
xor rcx, r8
mov dword [rbx + 0x4c], r11d
shr eax, 8
and r11d, 0xfffd
xor al, r10b
or r11d, 2
mov byte [rbp + rdi + 0x2d0], al
movzx eax, cl
mov ecx, dword [rsi + rax*4]
xor ecx, edx
mov dword [rbx + 0x44], ecx
movzx eax, cl
add eax, dword [rbx + 0x48]
imul eax, eax, 0x8088405
inc eax
mov dword [rbx + 0x48], eax
mov edx, dword [rbx + 0x4c]
mov ecx, eax
movzx eax, dl
shr edx, 8
shr rcx, 0x18
xor rcx, rax
mov eax, r11d
xor eax, 1
imul eax, r11d
mov r9d, dword [rsi + rcx*4]
xor r9d, edx
mov dword [rbx + 0x4c], r9d
and r9d, 0xfffd
mov edx, dword [rbx + 0x44]
or r9d, 2
shr eax, 8
xor al, r8b
movsx r8, byte [rbp + rdi + 0x2d2]
mov byte [rbp + rdi + 0x2d1], al
mov rax, r8
xor rax, rdx
shr edx, 8
movzx ecx, al
mov eax, dword [rsi + rcx*4]
xor eax, edx
mov dword [rbx + 0x44], eax
movzx eax, al
add eax, dword [rbx + 0x48]
imul eax, eax, 0x8088405
inc eax
mov ecx, eax
mov dword [rbx + 0x48], eax
mov edx, dword [rbx + 0x4c]
shr rcx, 0x18
movzx eax, dl
xor rcx, rax
shr edx, 8
mov eax, r9d
xor eax, 1
imul eax, r9d
mov r10d, dword [rsi + rcx*4]
xor r10d, edx
mov dword [rbx + 0x4c], r10d
and r10d, 0xfffd
mov edx, dword [rbx + 0x44]
or r10d, 2
shr eax, 8
xor al, r8b
movsx r8, byte [rbp + rdi + 0x2d3]
mov byte [rbp + rdi + 0x2d2], al
mov rax, r8
xor rax, rdx
shr edx, 8
movzx ecx, al
mov eax, dword [rsi + rcx*4]
xor eax, edx
mov dword [rbx + 0x44], eax
movzx eax, al
add eax, dword [rbx + 0x48]
imul eax, eax, 0x8088405
inc eax
mov dword [rbx + 0x48], eax
mov edx, dword [rbx + 0x4c]
mov ecx, eax
movzx eax, dl
shr edx, 8
shr rcx, 0x18
xor rcx, rax
mov eax, r10d
xor eax, 1
imul eax, r10d
mov r11d, dword [rsi + rcx*4]
xor r11d, edx
mov dword [rbx + 0x4c], r11d
and r11d, 0xfffd
mov edx, dword [rbx + 0x44]
or r11d, 2
shr eax, 8
xor al, r8b
movsx r8, byte [rbp + rdi + 0x2d4]
mov byte [rbp + rdi + 0x2d3], al
mov rax, r8
xor rax, rdx
shr edx, 8
movzx ecx, al
mov eax, dword [rsi + rcx*4]
xor eax, edx
mov dword [rbx + 0x44], eax
movzx eax, al
add eax, dword [rbx + 0x48]
imul eax, eax, 0x8088405
inc eax
mov dword [rbx + 0x48], eax
mov edx, dword [rbx + 0x4c]
mov ecx, eax
movzx eax, dl
shr rcx, 0x18
xor rcx, rax
shr edx, 8
mov eax, r11d
xor eax, 1
imul eax, r11d
mov r9d, dword [rsi + rcx*4]
xor r9d, edx
mov dword [rbx + 0x4c], r9d
and r9d, 0xfffd
mov edx, dword [rbx + 0x44]
or r9d, 2
shr eax, 8
xor al, r8b
movsx r8, byte [rbp + rdi + 0x2d5]
mov byte [rbp + rdi + 0x2d4], al
mov rax, r8
xor rax, rdx
movzx ecx, al
mov eax, dword [rsi + rcx*4]
shr edx, 8
xor eax, edx
mov dword [rbx + 0x44], eax
movzx eax, al
add eax, dword [rbx + 0x48]
imul eax, eax, 0x8088405
inc eax
mov dword [rbx + 0x48], eax
mov edx, dword [rbx + 0x4c]
mov ecx, eax
movzx eax, dl
shr rcx, 0x18
xor rcx, rax
shr edx, 8
mov eax, dword [rsi + rcx*4]
xor eax, edx
mov dword [rbx + 0x4c], eax
mov eax, r9d
xor eax, 1
imul eax, r9d
shr eax, 8
xor al, r8b
mov byte [rbp + rdi + 0x2d5], al
add rdi, 6
cmp rdi, 0xc
jl 0x180025e10
mov rax, qword [rbx]
test rax, rax
je 0x1800260df
mov r8d, 0xc
lea rdx, [rbp + 0x2d0]
mov rcx, rbx
call fcn.180024fb0
add dword [rbx + 0x28], 0xc
mov rax, qword [rbx]
test rax, rax
mov edi, r12d
setne al
mov byte [rbx + 0x41], al
cmp r15d, 8
jne 0x180026102
lea rdx, [rsp + 0x40]
mov rcx, rbx
call fcn.1800254c0
mov edi, eax
jmp 0x18002616c
test r15d, r15d
jne 0x18002616c
mov r8d, 0x4000
lea rdx, [rbx + 0xcc]
mov rcx, rbx
mov r14d, r12d
call fcn.180025360
mov edi, eax
test eax, eax
je 0x180026162
cmp edi, 0xffffffff
je 0x180026162
mov r8d, edi
lea rdx, [rbx + 0xcc]
mov rcx, rbx
call fcn.180024fb0
cmp eax, edi
jne 0x180026230
mov r8d, 0x4000
lea rdx, [rbx + 0xcc]
mov rcx, rbx
add r14d, edi
call fcn.180025360
mov edi, eax
test eax, eax
jne 0x180026125
mov dword [rbx + 0xc8], r14d
mov edi, r12d
mov byte [rbx + 0x41], r12b
cmp byte [rbx + 0xb0], r12b
je 0x18002618b
mov rcx, qword [rbx + 0xa8]
test rcx, rcx
je 0x18002618b
call qword [sym.imp.KERNEL32.dll_CloseHandle]
mov ecx, dword [rbx + 0xc8]
add dword [rbx + 0x28], ecx
mov eax, dword [rbx + 0x24]
mov edx, dword [rbx + 0x9c]
mov qword [rbx + 0xa8], r12
mov dword [rbx + 0x98], edx
test eax, eax
jne 0x180025cec
test edi, edi
jne 0x180025ce7
mov eax, dword [rbx + 0xa0]
add ecx, r13d
cmp dword [rsp + 0x50], ecx
mov dword [rsp + 0x4c], eax
sete r8b
mov dword [rsp + 0x50], ecx
mov dword [rsp + 0x54], edx
cmp byte [rbx + 0x2c], r12b
je 0x1800262c6
cmp qword [rbx], r12
jne 0x1800262c6
movzx eax, word [rsp + 0x44]
mov word [rsp + 0x46], r15w
test al, 1
jne 0x180026206
mov ecx, 0xfff7
and ax, cx
mov word [rsp + 0x44], ax
mov edx, dword [rbx + 0x20]
mov word [rsp + 0x7c], ax
mov eax, dword [rbp - 0x7c]
sub eax, edx
cmp qword [rbx + 0x30], r12
je 0x18002623f
cmp eax, dword [rbx + 0x3c]
jb 0x18002623a
mov eax, 0x30000
mov dword [rbx + 0x24], eax
mov eax, 0x2000000
jmp 0x180025cec
mov edi, 0x60000
jmp 0x18002616c
mov dword [rbx + 0x38], eax
jmp 0x180026256
mov rcx, qword [rbx + 8]
test rcx, rcx
je 0x1800262b4
add edx, eax
xor r9d, r9d
xor r8d, r8d
call qword [sym.imp.KERNEL32.dll_SetFilePointer]
mov r8, rbx
lea rcx, [rsp + 0x40]
call fcn.180023e60
test eax, eax
jne 0x180025ce7
mov ecx, dword [rbx + 0x28]
cmp byte [rbx + 0x2c], r12b
jne 0x180026285
mov dword [rbx + 0x24], 0x2000000
mov eax, 0x2000000
jmp 0x180025cec
cmp qword [rbx + 0x30], r12
je 0x180026295
cmp ecx, dword [rbx + 0x3c]
jae 0x18002621e
mov dword [rbx + 0x38], ecx
jmp 0x180026303
mov r10, qword [rbx + 8]
test r10, r10
je 0x1800262b4
mov edx, dword [rbx + 0x20]
xor r9d, r9d
add edx, ecx
xor r8d, r8d
mov rcx, r10
call qword [sym.imp.KERNEL32.dll_SetFilePointer]
jmp 0x180026303
mov eax, 0x1000000
mov dword [rbx + 0x24], eax
mov eax, 0x2000000
jmp 0x180025cec
cmp word [rsp + 0x46], r15w
jne 0x1800263ed
test r15d, r15d
jne 0x1800262e0
test r8b, r8b
je 0x1800263ed
mov r8, rbx
lea rcx, [rsp + 0x40]
call fcn.1800241f0
test eax, eax
jne 0x180025ce7
movzx eax, word [rsp + 0x7c]
add dword [rbx + 0x28], 0x10
mov word [rsp + 0x44], ax
mov eax, dword [rbx + 0x24]
test eax, eax
jne 0x180025cec
mov rcx, qword [rsp + 0x68]
call fcn.180032eb4
mov r8, qword [rsp + 0x68]
mov rcx, rax
mov rdx, qword [rbp + 0x98]
mov rdi, rax
call fcn.1800516a0
mov ecx, 0x388
mov qword [rbp + 0x98], rdi
call fcn.180032af8
mov r8, rax
mov rcx, rax
lea rax, [rsp + 0x40]
mov edx, 7
lea rcx, [rcx + 0x80]
movups xmm0, xmmword [rax]
lea rax, [rax + 0x80]
movups xmmword [rcx - 0x80], xmm0
movups xmm1, xmmword [rax - 0x70]
movups xmmword [rcx - 0x70], xmm1
movups xmm0, xmmword [rax - 0x60]
movups xmmword [rcx - 0x60], xmm0
movups xmm1, xmmword [rax - 0x50]
movups xmmword [rcx - 0x50], xmm1
movups xmm0, xmmword [rax - 0x40]
movups xmmword [rcx - 0x40], xmm0
movups xmm1, xmmword [rax - 0x30]
movups xmmword [rcx - 0x30], xmm1
movups xmm0, xmmword [rax - 0x20]
movups xmmword [rcx - 0x20], xmm0
movups xmm1, xmmword [rax - 0x10]
movups xmmword [rcx - 0x10], xmm1
sub rdx, 1
jne 0x180026350
mov rax, qword [rax]
mov qword [rcx], rax
mov rcx, qword [rbx + 0x60]
test rcx, rcx
jne 0x1800263bd
mov qword [rbx + 0x60], r8
xor eax, eax
jmp 0x180025cec
mov rax, qword [rcx + 0x380]
test rax, rax
je 0x1800263df
nop dword [rax]
mov rcx, rax
mov rax, qword [rax + 0x380]
test rax, rax
jne 0x1800263d0
mov qword [rcx + 0x380], r8
xor eax, eax
jmp 0x180025cec
mov eax, 0x4000000
jmp 0x180025cec