Function at 0x464890
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff0
mov eax, 0x2050
call fcn.004b41f0
mov ebx, dword [ebp + 0xc]
mov eax, dword [ebp + 8]
mov dword [esp + 0x20], edx
mov dword [esp], ecx
cmp ebx, 0x1001
jb 0x4648e6
cmp byte [eax + 0x1000], 0xbf
mov ebx, 0x1000
jg 0x4648e6
cmp byte [eax + 0xfff], 0xbf
mov ebx, 0xfff
jg 0x4648e6
xor ebx, ebx
cmp byte [eax + 0xffe], 0xc0
setge bl
add ebx, 0xffd
lea esi, [esp + 0x4c]
push 0x1000
push esi
push ebx
push eax
push 8
push 0xfde9
call sub.KERNEL32.dll_MultiByteToWideChar
test eax, eax
je 0x464bed
mov edi, eax
cmp eax, 0x1001
jae 0x464c24
mov dword [esp + 8], 0
lea eax, [esp + 8]
push 0
push eax
push edi
push esi
push dword [esp + 0x30]
call sub.KERNEL32.dll_WriteConsoleW
test eax, eax
je 0x464ba3
mov ecx, dword [esp + 8]
cmp ecx, edi
je 0x464bb5
jae 0x464be1
movzx eax, word [esp + ecx*2 + 0x4c]
add eax, 0x2312
movzx eax, ax
cmp eax, 0x312
jae 0x464987
lea eax, [esp + ecx*2 + 0x4c]
inc ecx
mov dword [esp + 8], 0
mov ebx, ecx
push 0
lea ecx, [esp + 0xc]
push ecx
push 1
push eax
push dword [esp + 0x30]
call sub.KERNEL32.dll_WriteConsoleW
test eax, eax
je 0x464bc6
mov ecx, ebx
cmp ecx, edi
ja 0x464bd5
test ecx, ecx
je 0x464bb3
lea eax, [ecx - 1]
xor ebx, ebx
and eax, 0x7fffffff
cmp eax, 7
jb 0x464b4b
inc eax
mov dword [esp + 4], ecx
pxor xmm0, xmm0
lea edx, [esp + 0x54]
pxor xmm1, xmm1
mov ecx, eax
and ecx, 0xfffffff8
lea esi, [esp + ecx*2 + 0x4c]
mov edi, ecx
nop word cs:[eax + eax]
movq xmm2, qword [edx]
movdqa xmmword [esp + 0x30], xmm1
movq xmm1, qword [edx - 8]
movdqa xmm3, xmmword [0x4bcb00]
movdqa xmmword [esp + 0x20], xmm0
add edx, 0x10
add edi, 0xfffffff8
movdqa xmm0, xmm1
movdqa xmm5, xmm2
movdqa xmm7, xmm1
movdqa xmm4, xmm2
paddw xmm5, xmm3
paddw xmm0, xmm3
movdqa xmm3, xmmword [0x4bcae0]
pxor xmm4, xmmword [0x4bcae0]
pxor xmm5, xmmword [0x4bcae0]
pxor xmm0, xmm3
movdqa xmm3, xmmword [0x4bcb10]
pcmpgtw xmm4, xmmword [0x4bcaf0]
movdqa xmm6, xmm3
pcmpgtw xmm3, xmm5
movdqa xmm5, xmmword [0x4bcb20]
punpcklwd xmm4, xmm4
pcmpgtw xmm6, xmm0
punpcklwd xmm3, xmm3
punpcklwd xmm6, xmm6
movdqa xmm0, xmm6
pandn xmm0, xmm5
movdqa xmm5, xmmword [0x4bcb30]
pand xmm6, xmm5
por xmm6, xmm0
movdqa xmm0, xmm3
pand xmm3, xmm5
movdqa xmm5, xmmword [0x4bcae0]
pandn xmm0, xmmword [0x4bcb20]
pxor xmm7, xmm5
por xmm3, xmm0
movdqa xmm0, xmmword [0x4bcb40]
pand xmm3, xmm4
paddw xmm1, xmm0
paddw xmm2, xmm0
movdqa xmm0, xmmword [0x4bcb50]
pxor xmm1, xmmword [0x4bcae0]
pxor xmm2, xmm5
pcmpeqd xmm5, xmm5
pcmpgtw xmm0, xmm1
movdqa xmm1, xmmword [0x4bcb50]
punpcklwd xmm0, xmm0
pcmpgtw xmm1, xmm2
movdqa xmm2, xmmword [0x4bcaf0]
pcmpgtw xmm7, xmm2
movdqa xmm2, xmmword [0x4bcb30]
punpcklwd xmm7, xmm7
pand xmm6, xmm7
pand xmm0, xmm2
psubd xmm0, xmm5
pandn xmm7, xmm0
movdqa xmm0, xmmword [esp + 0x20]
por xmm7, xmm6
paddd xmm0, xmm7
punpcklwd xmm1, xmm1
pand xmm1, xmm2
psubd xmm1, xmm5
pandn xmm4, xmm1
movdqa xmm1, xmmword [esp + 0x30]
por xmm4, xmm3
paddd xmm1, xmm4
jne 0x4649d0
paddd xmm1, xmm0
cmp eax, ecx
mov ecx, dword [esp + 4]
pshufd xmm0, xmm1, 0xee
paddd xmm0, xmm1
pshufd xmm1, xmm0, 0x55
paddd xmm1, xmm0
movd ebx, xmm1
je 0x464bb5
lea eax, [esp + ecx*2 + 0x4c]
jmp 0x464b69
add esi, 2
add ebx, edx
cmp esi, eax
je 0x464bb5
movzx ecx, word [esi]
mov edx, 1
cmp ecx, 0x80
jb 0x464b60
movzx edi, cx
mov edx, 2
cmp edi, 0x800
jb 0x464b60
add ecx, 0x2312
xor edx, edx
movzx ecx, cx
cmp ecx, 0x312
setae dl
lea edx, [edx + edx + 1]
jmp 0x464b60
call sub.KERNEL32.dll_GetLastError
mov ecx, dword [esp]
mov byte [ecx], 0
mov dword [ecx + 4], eax
jmp 0x464bbe
xor ebx, ebx
mov eax, dword [esp]
mov dword [eax + 4], ebx
mov byte [eax], 4
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret
call sub.KERNEL32.dll_GetLastError
mov ecx, ebx
cmp ecx, edi
jbe 0x46498f
push 0x4c0c3c
push edi
push ecx
call dbg.slice_end_index_len_fail
push 0x4c0c2c
push edi
push ecx
call dbg.panic_bounds_check
mov dword [esp + 8], str.Unexpected_error_in_MultiByteToWideChar
mov dword [esp + 0xc], 1
mov dword [esp + 0x18], 0
mov dword [esp + 0x10], 0x4bcb70
mov dword [esp + 0x14], 0
lea eax, [esp + 8]
push 0x4c0c0c
push eax
call dbg.panic_fmt
push 0x4c0c1c
push 0x1000
push edi
call dbg.slice_end_index_len_fail
nop word cs:[eax + eax]
nop