Function at 0x2e3c63870
Capabilities:
Encode data using xor
Hash data with crc32

Disassembly:
push r15
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0xc8
movaps xmmword [rsp + 0xb0], xmm6
mov esi, dword [0x2e3e69324]
mov eax, 0xffffffff
movdqa xmm0, xmmword [0x2e3ed49b0]
mov r13d, dword [rsp + 0x130]
imul r13d, r8d
mov r14d, edx
test edx, edx
mov r12d, r8d
mov qword [rsp + 0x110], rcx
mov edi, r9d
mov dword [rsp + 0xa0], 6
cmove r14d, r13d
cmp esi, 5
lea ebx, [r13 + 1]
movaps xmmword [rsp + 0x90], xmm0
cmovl eax, esi
mov dword [rsp + 0x50], eax
mov eax, ebx
imul eax, r9d
movsxd rcx, eax
mov dword [rsp + 0x7c], eax
call sub.msvcrt.dll_malloc
mov qword [rsp + 0x70], rax
test rax, rax
je 0x2e3c6405a
movsxd rax, r13d
mov rcx, rax
mov qword [rsp + 0x58], rax
call sub.msvcrt.dll_malloc
mov r15, rax
test rax, rax
je 0x2e3c6406a
test edi, edi
jle 0x2e3c63d83
movsxd rax, ebx
mov dword [rsp + 0x120], r12d
xor esi, esi
mov r12d, r14d
mov qword [rsp + 0x60], rax
mov rax, qword [rsp + 0x70]
mov r14, r15
lea rbp, [rax + 1]
lea eax, [r13 - 1]
mov dword [rsp + 0x54], eax
mov eax, r13d
shr eax, 4
lea ebx, [rax - 1]
mov eax, r13d
add rbx, 1
and eax, 0xfffffff0
shl rbx, 4
mov dword [rsp + 0x78], eax
add rbx, r15
mov r15d, dword [rsp + 0x120]
jmp 0x2e3c639de
mov ecx, dword [rsp + 0x130]
mov r9d, edi
mov r8d, r15d
mov edx, r12d
mov dword [rsp + 0x30], eax
mov dword [rsp + 0x28], ecx
mov rcx, qword [rsp + 0x110]
mov qword [rsp + 0x38], r14
mov dword [rsp + 0x20], esi
call fcn.2e3c4f4c0
mov eax, dword [rsp + 0x50]
mov dword [rsp + 0x48], eax
movzx eax, byte [rsp + 0x48]
mov r8, qword [rsp + 0x58]
mov rcx, rbp
mov rdx, r14
add esi, 1
mov byte [rbp - 1], al
call sub.msvcrt.dll_memcpy
add rbp, qword [rsp + 0x60]
cmp edi, esi
je 0x2e3c63d7d
mov eax, dword [rsp + 0x50]
test eax, eax
jns 0x2e3c63980
mov dword [rsp + 0x4c], 0x7fffffff
xor eax, eax
pxor xmm6, xmm6
mov dword [rsp + 0x48], 0
mov qword [rsp + 0x68], rbp
mov ebp, edi
mov edi, esi
mov esi, r15d
mov r15d, eax
mov qword [rsp + 0x38], r14
mov r9d, ebp
mov r8d, esi
mov edx, r12d
mov eax, dword [rsp + 0x130]
mov dword [rsp + 0x30], r15d
mov dword [rsp + 0x20], edi
mov rcx, qword [rsp + 0x110]
mov dword [rsp + 0x28], eax
call fcn.2e3c4f4c0
test r13d, r13d
jle 0x2e3c63d70
cmp dword [rsp + 0x54], 0xe
jbe 0x2e3c63d74
mov rdx, r14
pxor xmm0, xmm0
pxor xmm4, xmm4
nop dword [rax]
movdqu xmm5, xmmword [rdx]
movdqa xmm2, xmm6
add rdx, 0x10
psubb xmm2, xmm5
pminub xmm2, xmm5
movdqa xmm3, xmm2
punpckhbw xmm2, xmm6
punpcklbw xmm3, xmm6
movdqa xmm1, xmm3
punpckhwd xmm3, xmm4
punpcklwd xmm1, xmm4
paddd xmm0, xmm1
movdqa xmm1, xmm2
punpckhwd xmm2, xmm4
paddd xmm0, xmm3
punpcklwd xmm1, xmm4
paddd xmm0, xmm1
paddd xmm0, xmm2
cmp rdx, rbx
jne 0x2e3c63a60
movdqa xmm1, xmm0
mov eax, dword [rsp + 0x78]
psrldq xmm1, 8
paddd xmm0, xmm1
movdqa xmm1, xmm0
psrldq xmm1, 4
paddd xmm0, xmm1
movd edx, xmm0
cmp eax, r13d
je 0x2e3c63d00
mov ecx, eax
movsxd r10, ecx
movzx r11d, byte [r14 + r10]
mov r10d, r11d
neg r10b
cmovs r10d, r11d
movzx r10d, r10b
add edx, r10d
lea r10d, [rcx + 1]
cmp r13d, r10d
jle 0x2e3c63d00
movsxd r10, r10d
movzx r11d, byte [r14 + r10]
mov r10d, r11d
neg r10b
cmovs r10d, r11d
movzx r10d, r10b
add edx, r10d
lea r10d, [rcx + 2]
cmp r13d, r10d
jle 0x2e3c63d00
movsxd r10, r10d
movzx r11d, byte [r14 + r10]
mov r10d, r11d
neg r10b
cmovs r10d, r11d
movzx r10d, r10b
add edx, r10d
lea r10d, [rcx + 3]
cmp r13d, r10d
jle 0x2e3c63d00
movsxd r10, r10d
movzx r11d, byte [r14 + r10]
mov r10d, r11d
neg r10b
cmovs r10d, r11d
movzx r10d, r10b
add edx, r10d
lea r10d, [rcx + 4]
cmp r13d, r10d
jle 0x2e3c63d00
movsxd r10, r10d
movzx r11d, byte [r14 + r10]
mov r10d, r11d
neg r10b
cmovs r10d, r11d
movzx r10d, r10b
add edx, r10d
lea r10d, [rcx + 5]
cmp r13d, r10d
jle 0x2e3c63d00
movsxd r10, r10d
movzx r11d, byte [r14 + r10]
mov r10d, r11d
neg r10b
cmovs r10d, r11d
movzx r10d, r10b
add edx, r10d
lea r10d, [rcx + 6]
cmp r13d, r10d
jle 0x2e3c63d00
movsxd r10, r10d
movzx r11d, byte [r14 + r10]
mov r10d, r11d
neg r10b
cmovs r10d, r11d
movzx r10d, r10b
add edx, r10d
lea r10d, [rcx + 7]
cmp r13d, r10d
jle 0x2e3c63d00
movsxd r10, r10d
movzx r11d, byte [r14 + r10]
mov r10d, r11d
neg r10b
cmovs r10d, r11d
movzx r10d, r10b
add edx, r10d
lea r10d, [rcx + 8]
cmp r13d, r10d
jle 0x2e3c63d00
movsxd r10, r10d
movzx r11d, byte [r14 + r10]
mov r10d, r11d
neg r10b
cmovs r10d, r11d
movzx r10d, r10b
add edx, r10d
lea r10d, [rcx + 9]
cmp r13d, r10d
jle 0x2e3c63d00
movsxd r10, r10d
movzx r11d, byte [r14 + r10]
mov r10d, r11d
neg r10b
cmovs r10d, r11d
movzx r10d, r10b
add edx, r10d
lea r10d, [rcx + 0xa]
cmp r13d, r10d
jle 0x2e3c63d00
movsxd r10, r10d
movzx r11d, byte [r14 + r10]
mov r10d, r11d
neg r10b
cmovs r10d, r11d
movzx r10d, r10b
add edx, r10d
lea r10d, [rcx + 0xb]
cmp r13d, r10d
jle 0x2e3c63d00
movsxd r10, r10d
movzx r11d, byte [r14 + r10]
mov r10d, r11d
neg r10b
cmovs r10d, r11d
movzx r10d, r10b
add edx, r10d
lea r10d, [rcx + 0xc]
cmp r13d, r10d
jle 0x2e3c63d00
movsxd r10, r10d
movzx r11d, byte [r14 + r10]
mov r10d, r11d
neg r10b
cmovs r10d, r11d
movzx r10d, r10b
add edx, r10d
lea r10d, [rcx + 0xd]
cmp r13d, r10d
jle 0x2e3c63d00
movsxd r10, r10d
movzx r11d, byte [r14 + r10]
mov r10d, r11d
neg r10b
cmovs r10d, r11d
add ecx, 0xe
movzx r10d, r10b
add edx, r10d
cmp r13d, ecx
jle 0x2e3c63d00
movsxd rcx, ecx
movzx r10d, byte [r14 + rcx]
mov ecx, r10d
neg cl
cmovs ecx, r10d
movzx ecx, cl
add edx, ecx
nop word [rax + rax]
cmp dword [rsp + 0x4c], edx
jle 0x2e3c63d0f
mov dword [rsp + 0x4c], edx
mov dword [rsp + 0x48], r15d
add r15d, 1
cmp r15d, 5
jne 0x2e3c63a0b
mov eax, dword [rsp + 0x48]
mov r15d, esi
mov esi, edi
mov edi, ebp
mov rbp, qword [rsp + 0x68]
cmp eax, 5
je 0x2e3c639b6
mov dword [rsp + 0x30], eax
mov r9d, edi
mov r8d, r15d
mov edx, r12d
mov eax, dword [rsp + 0x130]
mov qword [rsp + 0x38], r14
mov dword [rsp + 0x20], esi
mov rcx, qword [rsp + 0x110]
mov dword [rsp + 0x28], eax
call fcn.2e3c4f4c0
jmp 0x2e3c639b6
xor edx, edx
jmp 0x2e3c63d00
xor ecx, ecx
xor edx, edx
jmp 0x2e3c63ada
mov r12d, r15d
mov r15, r14
mov rcx, r15
call sub.msvcrt.dll_free
mov rsi, qword [rsp + 0x70]
mov r9d, dword [0x2e3e69320]
lea r8, [rsp + 0x8c]
mov edx, dword [rsp + 0x7c]
mov rcx, rsi
call fcn.2e3c62900
mov rcx, rsi
mov r13, rax
call sub.msvcrt.dll_free
test r13, r13
je 0x2e3c6405a
movsxd rsi, dword [rsp + 0x8c]
lea ebx, [rsi + 0x39]
mov ebp, esi
movsxd rcx, ebx
bswap ebp
call sub.msvcrt.dll_malloc
mov r15, rax
test rax, rax
je 0x2e3c6405a
mov rax, qword [rsp + 0x138]
mov r8d, edi
mov r9d, edi
mov ecx, edi
sar r8d, 8
sar r9d, 0x10
mov r11d, r12d
mov r14d, r12d
mov dword [rax], ebx
movzx ebx, r8b
sar ecx, 0x18
mov edx, r12d
sar r11d, 8
movzx ecx, cl
sar r14d, 0x10
mov byte [r15 + 0x18], 8
movabs rax, 0xa1a0a0d474e5089
sar edx, 0x18
mov dword [r15 + 0x21], ebp
mov qword [r15], rax
mov rax, qword [0x2e3ed49c0]
mov byte [r15 + 0x1c], 0
mov qword [r15 + 8], rax
movzx eax, dil
shl rax, 8
mov dword [r15 + 0x25], 0x54414449
or rax, rbx
movzx ebx, r9b
shl rax, 8
or rax, rbx
lea rbx, [0x2e3ed3fe0]
shl rax, 8
or rax, rcx
movzx ecx, r12b
shl rax, 8
or rax, rcx
movzx ecx, r11b
shl rax, 8
or rax, rcx
movzx ecx, r14b
shl rax, 8
or rax, rcx
movzx ecx, dl
xor edx, 0xfffffff5
shl rax, 8
or rax, rcx
mov qword [r15 + 0x10], rax
movsxd rax, dword [rsp + 0x130]
mov ecx, dword [rsp + rax*4 + 0x90]
xor eax, eax
mov word [r15 + 0x1a], ax
movzx eax, dl
mov eax, dword [rbx + rax*4]
mov byte [r15 + 0x19], cl
xor eax, 0x575e51
mov edx, eax
xor eax, r14d
movzx eax, al
shr edx, 8
xor edx, dword [rbx + rax*4]
mov eax, edx
xor edx, r11d
mov r11d, edi
movzx edx, dl
shr eax, 8
xor eax, dword [rbx + rdx*4]
mov edx, eax
xor eax, r12d
movzx eax, al
shr edx, 8
xor edx, dword [rbx + rax*4]
mov eax, edx
shr eax, 8
shr r11d, 0x18
xor edx, r11d
movzx edx, dl
xor eax, dword [rbx + rdx*4]
mov edx, eax
xor eax, r9d
movzx eax, al
shr edx, 8
xor edx, dword [rbx + rax*4]
mov eax, edx
xor edx, r8d
mov r8, rsi
movzx edx, dl
shr eax, 8
xor eax, dword [rbx + rdx*4]
mov edx, eax
xor eax, edi
movzx eax, al
shr edx, 8
xor edx, dword [rbx + rax*4]
mov eax, edx
movzx edx, dl
xor rdx, 8
shr eax, 8
xor eax, dword [rbx + rdx*4]
mov edx, eax
xor eax, ecx
lea rcx, [r15 + 0x29]
movzx eax, al
shr edx, 8
xor edx, dword [rbx + rax*4]
mov eax, edx
movzx edx, dl
shr eax, 8
xor eax, dword [rbx + rdx*4]
mov edx, eax
movzx eax, al
shr edx, 8
xor edx, dword [rbx + rax*4]
mov eax, edx
movzx edx, dl
shr eax, 8
xor eax, dword [rbx + rdx*4]
mov rdx, r13
not eax
bswap eax
mov dword [r15 + 0x1d], eax
call sub.msvcrt.dll_memmove
mov rcx, r13
add rsi, rax
call sub.msvcrt.dll_free
movsxd rcx, dword [rsp + 0x8c]
mov rdx, 0xfffffffffffffffc
mov rax, rcx
sub rdx, rcx
cmp ecx, 0xfffffffd
jl 0x2e3c6405f
add eax, 3
add rdx, rsi
sub rax, rcx
lea r8, [rsi + rax - 3]
mov eax, 0xffffffff
nop dword [rax + rax]
mov ecx, eax
xor al, byte [rdx]
add rdx, 1
movzx eax, al
shr ecx, 8
xor ecx, dword [rbx + rax*4]
mov eax, ecx
cmp rdx, r8
jne 0x2e3c63fc0
not eax
mov edi, eax
mov edx, eax
movzx ecx, ah
shr edi, 0x18
shr edx, 0x10
mov r8d, edi
mov byte [rsi + 3], al
mov rax, qword [0x2e3ed49c8]
add rsi, 0x10
mov byte [rsi - 0x10], r8b
mov qword [rsi - 0xc], rax
mov rax, qword [rsp + 0x138]
mov byte [rsi - 0xf], dl
movsxd rax, dword [rax]
mov byte [rsi - 0xe], cl
mov dword [rsi - 4], 0x826042ae
add rax, r15
cmp rax, rsi
je 0x2e3c6403b
mov r8d, 0x4b9
lea rdx, [0x2e3ed3c70]
lea rcx, str.o__out__out_len
call qword [sym.imp.msvcrt.dll__assert]
nop
movaps xmm6, xmmword [rsp + 0xb0]
mov rax, r15
add rsp, 0xc8
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
pop r15
ret
xor r15d, r15d
jmp 0x2e3c6403b
xor eax, eax
xor ecx, ecx
xor edx, edx
xor r8d, r8d
jmp 0x2e3c63fea
mov rcx, qword [rsp + 0x70]
call sub.msvcrt.dll_free
jmp 0x2e3c6403b