Function at 0x46b1c0
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
sub esp, 0x3c
mov ebx, dword [ebp + 8]
test bl, 3
je 0x46b1e3
mov byte [ecx + 4], 0
mov dword [ecx], 0
add esp, 0x3c
pop esi
pop edi
pop ebx
pop ebp
ret
cmp ebx, 2
jb 0x46b252
movzx eax, word [ebx + edx - 2]
movdqa xmm3, xmmword [0x5ab0f0]
pxor xmm1, xmm1
movdqa xmm2, xmmword [0x5ab110]
mov edi, edx
mov esi, ebx
movd xmm0, eax
punpcklbw xmm0, xmm1
psubw xmm3, xmm0
paddw xmm0, xmmword [0x5ab100]
pand xmm0, xmm3
psrlw xmm0, 8
pand xmm2, xmm0
movd edx, xmm2
pextrw eax, xmm2, 1
add edx, eax
movzx edx, dx
sub esi, edx
test dx, dx
je 0x46b25d
cmp edx, 2
je 0x46b266
cmp edx, 1
jne 0x46b1d1
movzx eax, ax
mov edx, edi
xor eax, 1
mov dword [ebp - 0x10], eax
jmp 0x46b277
mov dword [ebp - 0x10], 0
mov esi, ebx
jmp 0x46b277
mov dword [ebp - 0x10], 0
jmp 0x46b275
movd edx, xmm0
movzx eax, ax
and eax, edx
xor eax, 1
mov dword [ebp - 0x10], eax
mov edx, edi
mov edi, esi
mov eax, esi
and edi, 3
shr eax, 2
lea ebx, [edi + edi*2]
mov dword [ebp - 0x18], eax
lea eax, [eax + eax*2]
shr ebx, 2
add ebx, eax
cmp ebx, dword [ebp + 0x10]
jbe 0x46b29d
mov byte [ecx + 4], 1
jmp 0x46b1d5
and esi, 0xfffffffc
mov dword [ebp - 0x14], ecx
mov ecx, 0xaaaaaaab
mov dword [ebp - 0x3c], edi
mov edi, edx
mov dword [ebp - 0x24], ebx
lea eax, [edx + esi]
mov dword [ebp - 0x20], edi
mov dword [ebp - 0x30], eax
mov eax, ebx
mul ecx
shr edx, 1
lea ecx, [edx + edx*2]
sub ebx, ecx
test esi, esi
mov esi, dword [ebp + 0xc]
mov dword [ebp - 0x38], ebx
lea eax, [esi + ecx]
mov dword [ebp - 0x34], eax
je 0x46b48e
mov edx, edi
mov edi, dword [ebp - 0x18]
mov dword [ebp - 0x28], esi
movdqa xmm3, xmmword [0x5ab1c0]
movdqa xmm5, xmmword [0x5ab1e0]
mov esi, dword [ebp - 0x10]
shl edi, 2
neg edi
nop dword [eax + eax]
sub ecx, 3
jb 0x46b491
movd xmm1, dword [edx]
pxor xmm0, xmm0
movdqa xmm2, xmmword [0x5ab120]
movdqa xmm6, xmmword [0x5ab160]
movdqa xmm7, xmmword [0x5ab190]
mov dword [ebp - 0x44], ecx
mov dword [ebp - 0x40], edx
mov dword [ebp - 0x18], edi
mov dword [ebp - 0x10], esi
punpcklbw xmm1, xmm0
movdqa xmm0, xmm1
psubw xmm2, xmm1
movdqa xmm4, xmm1
psubw xmm6, xmm1
psubw xmm7, xmm1
paddw xmm0, xmmword [0x5ab130]
paddw xmm4, xmmword [0x5ab170]
pand xmm0, xmm2
movdqa xmm2, xmm1
paddw xmm2, xmmword [0x5ab150]
psrlw xmm0, 8
pand xmm0, xmmword [0x5ab140]
pand xmm6, xmm2
movdqa xmm2, xmm1
paddw xmm2, xmmword [0x5ab180]
psraw xmm6, 8
pand xmm4, xmm6
movdqa xmm6, xmm1
paddw xmm6, xmmword [0x5ab1a0]
pand xmm7, xmm2
movdqa xmm2, xmm1
paddw xmm2, xmmword [0x5ab1b0]
psraw xmm7, 8
pand xmm6, xmm7
movdqa xmm7, xmm3
psubw xmm7, xmm1
pand xmm7, xmm2
movdqa xmm2, xmm1
paddw xmm2, xmmword [0x5ab1d0]
psraw xmm7, 8
pand xmm2, xmm7
paddw xmm2, xmm6
paddw xmm2, xmm4
pcmpeqd xmm4, xmm4
paddw xmm2, xmm4
paddw xmm2, xmm0
movdqa xmm0, xmm5
psubw xmm0, xmm1
paddw xmm1, xmmword [0x5ab1f0]
movd eax, xmm2
pextrw edi, xmm2, 1
pextrw esi, xmm2, 2
shl eax, 2
shl edi, 4
shl esi, 6
pand xmm1, xmm0
psrlw xmm1, 8
pand xmm1, xmm3
paddw xmm1, xmm2
pextrw ebx, xmm1, 1
pshufd xmm0, xmm1, 0x55
pextrw ecx, xmm1, 2
pextrw edx, xmm1, 3
shr ebx, 4
por xmm0, xmm1
shr ecx, 2
or edx, esi
or ebx, eax
mov eax, dword [ebp - 0x28]
movdqa xmm1, xmm0
or ecx, edi
mov edi, dword [ebp - 0x18]
psrld xmm1, 0x10
por xmm1, xmm0
mov byte [eax], bl
movd ebx, xmm1
mov byte [eax + 1], cl
mov byte [eax + 2], dl
mov edx, dword [ebp - 0x40]
mov ecx, dword [ebp - 0x44]
add eax, 3
shr ebx, 8
mov dword [ebp - 0x28], eax
and ebx, 1
or dword [ebp - 0x10], ebx
mov esi, dword [ebp - 0x10]
add edx, 4
add edi, 4
jne 0x46b300
jmp 0x46b491
mov esi, dword [ebp - 0x10]
mov ebx, dword [ebp - 0x3c]
mov dword [ebp - 0x2c], 0x41414141
lea eax, [ebp - 0x2c]
push ebx
push dword [ebp - 0x30]
push eax
call sub.msvcrt.dll_memcpy
add esp, 0xc
movd xmm0, dword [ebp - 0x2c]
pxor xmm1, xmm1
movdqa xmm2, xmmword [0x5ab120]
movdqa xmm3, xmmword [0x5ab160]
movdqa xmm5, xmmword [0x5ab190]
movdqa xmm4, xmmword [0x5ab1a0]
movdqa xmm7, xmmword [0x5ab1d0]
punpcklbw xmm0, xmm1
movdqa xmm1, xmmword [0x5ab130]
psubw xmm2, xmm0
psubw xmm3, xmm0
psubw xmm5, xmm0
paddw xmm4, xmm0
paddw xmm7, xmm0
paddw xmm1, xmm0
pand xmm1, xmm2
movdqa xmm2, xmmword [0x5ab150]
psrlw xmm1, 8
pand xmm1, xmmword [0x5ab140]
paddw xmm2, xmm0
pand xmm3, xmm2
movdqa xmm2, xmmword [0x5ab170]
psraw xmm3, 8
paddw xmm2, xmm0
pand xmm2, xmm3
movdqa xmm3, xmmword [0x5ab180]
paddw xmm3, xmm0
pand xmm5, xmm3
movdqa xmm3, xmmword [0x5ab1c0]
psraw xmm5, 8
pand xmm4, xmm5
movdqa xmm5, xmmword [0x5ab1b0]
movdqa xmm6, xmm3
psubw xmm6, xmm0
paddw xmm5, xmm0
pand xmm6, xmm5
psraw xmm6, 8
pand xmm7, xmm6
paddw xmm7, xmm4
paddw xmm7, xmm2
pcmpeqd xmm2, xmm2
paddw xmm2, xmm7
paddw xmm2, xmm1
movdqa xmm1, xmmword [0x5ab1e0]
movd eax, xmm2
shl eax, 2
psubw xmm1, xmm0
paddw xmm0, xmmword [0x5ab1f0]
pand xmm0, xmm1
psrlw xmm0, 8
pand xmm0, xmm3
paddw xmm0, xmm2
pextrw ecx, xmm0, 1
pshufd xmm1, xmm0, 0x55
shr ecx, 4
por xmm1, xmm0
or ecx, eax
pextrw eax, xmm2, 1
mov byte [ebp - 0x1b], cl
pextrw ecx, xmm0, 2
shl eax, 4
shr ecx, 2
or ecx, eax
pextrw eax, xmm2, 2
movdqa xmm2, xmm1
psrld xmm2, 0x10
mov byte [ebp - 0x1a], cl
shl eax, 6
pextrw ecx, xmm0, 3
por xmm2, xmm1
or ecx, eax
xor eax, eax
movd edi, xmm2
mov byte [ebp - 0x19], cl
shr edi, 8
and edi, 1
cmp ebx, 1
sete al
or esi, eax
lea eax, [ebp - 0x1b]
push dword [ebp - 0x38]
push eax
push dword [ebp - 0x34]
call sub.msvcrt.dll_memcpy
add esp, 0xc
or si, di
je 0x46b63f
mov eax, dword [ebp - 0x14]
mov byte [eax + 4], 0
mov dword [eax], 0
jmp 0x46b1db
mov ecx, dword [ebp - 0x24]
mov edi, dword [ebp + 8]
mov edx, dword [ebp - 0x14]
mov eax, ecx
or eax, edi
je 0x46b818
mov eax, edi
mov ebx, dword [ebp - 0x20]
xor esi, esi
mov ecx, edi
sub eax, 1
cmovb eax, esi
and eax, 0xfffffffc
add ebx, eax
sub ecx, eax
cmovb ecx, esi
mov esi, ecx
and esi, 1
cmp eax, edi
cmovbe esi, ecx
mov eax, esi
mov esi, 0
cmova ebx, esi
mov dword [ebp - 0x20], ebx
jbe 0x46b68b
and al, 1
jmp 0x46b82a
mov edi, dword [ebp - 0x24]
mov ebx, eax
mov esi, 0
mov ecx, 0xaaaaaaab
mov eax, edi
sub eax, 1
cmovb eax, esi
mul ecx
mov eax, edi
shr edx, 1
lea ecx, [edx + edx*2]
sub eax, ecx
cmovb eax, esi
mov edx, eax
and edx, 1
cmp ecx, edi
cmovbe edx, eax
jbe 0x46b6c9
and dl, 1
mov eax, edx
mov edx, dword [ebp - 0x14]
jmp 0x46b82a
mov eax, dword [ebp + 0xc]
mov dword [ebp - 0x48], 0
add ecx, eax
lea eax, [ebp - 0x48]
push eax
call fcn.0046b840
add esp, 4
test eax, eax
mov dword [ebp - 0x10], eax
je 0x46b825
cmp edx, ebx
cmovb ebx, edx
test ebx, ebx
je 0x46b812
mov edi, dword [ebp - 0x20]
mov esi, dword [ebp - 0x10]
xor edx, edx
cmp ebx, 8
mov eax, ebx
mov ecx, 0
jb 0x46b7f9
xor edx, edx
cmp eax, 0x20
mov dword [ebp - 0x18], eax
jb 0x46b7a0
mov ecx, eax
pxor xmm0, xmm0
xor edx, edx
pxor xmm1, xmm1
and ecx, 0xffffffe0
movdqu xmm2, xmmword [esi + edx]
movdqu xmm4, xmmword [edi + edx]
movdqu xmm3, xmmword [esi + edx + 0x10]
pxor xmm4, xmm2
por xmm0, xmm4
movdqu xmm4, xmmword [edi + edx + 0x10]
add edx, 0x20
cmp ecx, edx
pxor xmm4, xmm3
por xmm1, xmm4
jne 0x46b72e
por xmm1, xmm0
mov eax, dword [ebp - 0x18]
pshufd xmm0, xmm1, 0xee
por xmm0, xmm1
pshufd xmm1, xmm0, 0x55
por xmm1, xmm0
cmp eax, ecx
movdqa xmm0, xmm1
psrld xmm0, 0x10
por xmm0, xmm1
movdqa xmm1, xmm0
psrlw xmm1, 8
por xmm1, xmm0
movd edx, xmm1
je 0x46b807
mov edi, dword [ebp - 0x20]
mov esi, dword [ebp - 0x10]
test al, 0x18
je 0x46b7f9
mov ebx, esi
mov esi, ecx
mov ecx, eax
movzx edx, dl
and ecx, 0xfffffff8
movd xmm0, edx
movq xmm1, qword [ebx + esi]
movq xmm2, qword [edi + esi]
add esi, 8
cmp ecx, esi
pxor xmm2, xmm1
por xmm0, xmm2
jne 0x46b7b0
pshufd xmm1, xmm0, 0x55
mov eax, dword [ebp - 0x18]
mov esi, ebx
por xmm1, xmm0
movdqa xmm0, xmm1
psrld xmm0, 0x10
por xmm0, xmm1
cmp eax, ecx
movdqa xmm1, xmm0
psrlw xmm1, 8
por xmm1, xmm0
movd edx, xmm1
je 0x46b807
movzx ebx, byte [edi + ecx]
xor bl, byte [esi + ecx]
inc ecx
or dl, bl
cmp eax, ecx
jne 0x46b7f9
test dl, dl
je 0x46b812
mov edx, dword [ebp - 0x14]
xor eax, eax
jmp 0x46b82a
mov edx, dword [ebp - 0x14]
mov ecx, dword [ebp - 0x24]
mov eax, dword [ebp + 0xc]
mov dword [edx], eax
mov dword [edx + 4], ecx
jmp 0x46b1db
mov edx, dword [ebp - 0x14]
mov al, 1
mov byte [edx + 4], al
mov dword [edx], 0
jmp 0x46b1db