Function at 0x487800
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
sub esp, 0x10
mov ebx, dword [ebp + 8]
mov edx, dword [ebp + 0xc]
lea esi, [ebx + 3]
mov eax, edx
and esi, 0xfffffffc
mov ecx, esi
sub ecx, ebx
sub eax, ecx
jb 0x487828
cmp eax, 4
jae 0x4878e3
xor eax, eax
test edx, edx
je 0x487bcc
cmp edx, 8
mov ecx, 0
jb 0x4878cb
movdqa xmm2, xmmword [0x58e920]
movdqa xmm3, xmmword [0x58e930]
mov ecx, edx
lea eax, [ebx + 4]
pxor xmm0, xmm0
pxor xmm1, xmm1
and ecx, 0xfffffff8
mov edi, ecx
nop word cs:[eax + eax]
nop dword [eax]
movd xmm5, dword [eax - 4]
movd xmm4, dword [eax]
add eax, 8
add edi, 0xfffffff8
pcmpgtb xmm5, xmm2
pcmpgtb xmm4, xmm2
punpcklbw xmm5, xmm5
punpcklwd xmm5, xmm5
pand xmm5, xmm3
paddd xmm0, xmm5
punpcklbw xmm4, xmm4
punpcklwd xmm4, xmm4
pand xmm4, xmm3
paddd xmm1, xmm4
jne 0x487870
paddd xmm1, xmm0
cmp ecx, edx
pshufd xmm0, xmm1, 0xee
paddd xmm0, xmm1
pshufd xmm1, xmm0, 0x55
paddd xmm1, xmm0
movd eax, xmm1
je 0x487bcc
sub edx, ecx
add ebx, ecx
nop
xor ecx, ecx
cmp byte [ebx], 0xc0
setge cl
inc ebx
add eax, ecx
dec edx
jne 0x4878d0
jmp 0x487bcc
mov edx, eax
mov dword [ebp - 0x10], eax
xor edi, edi
mov eax, 0
mov dword [ebp - 0x18], ecx
mov dword [ebp - 0x14], ebx
and edx, 3
cmp esi, ebx
je 0x48791e
mov ecx, ebx
xor eax, eax
sub ecx, esi
mov esi, ebx
nop word cs:[eax + eax]
nop
xor ebx, ebx
cmp byte [esi], 0xc0
setge bl
inc esi
add eax, ebx
inc ecx
jne 0x487910
mov ecx, dword [ebp - 0x18]
mov esi, eax
add dword [ebp - 0x14], ecx
test edx, edx
je 0x48794e
mov ebx, dword [ebp - 0x10]
xor edi, edi
and ebx, 0xfffffffc
add ebx, dword [ebp - 0x14]
nop word cs:[eax + eax]
nop
xor ecx, ecx
cmp byte [ebx], 0xc0
setge cl
inc ebx
add edi, ecx
dec edx
jne 0x487940
mov edx, dword [ebp - 0x10]
movdqa xmm2, xmmword [0x58e910]
add edi, esi
pcmpeqd xmm7, xmm7
shr edx, 2
jmp 0x4879a8
mov ecx, esi
shr esi, 8
mov ebx, dword [ebp - 0x18]
and ecx, 0xff00ff
and esi, 0xff00ff
add esi, ecx
mov edi, esi
shl edi, 0x10
add edi, esi
mov esi, dword [ebp - 0x10]
shr edi, 0x10
add edi, eax
lea ecx, [esi + ebx*4]
mov dword [ebp - 0x14], ecx
mov ecx, edx
sub edx, ebx
test bl, 3
jne 0x487b62
mov ecx, dword [ebp - 0x14]
mov eax, edi
test edx, edx
je 0x487bcc
cmp edx, 0xc0
mov edi, 0xc0
mov dword [ebp - 0x10], ecx
cmovb edi, edx
xor esi, esi
cmp edx, 4
mov dword [ebp - 0x18], edi
jb 0x487970
mov ecx, dword [ebp - 0x18]
mov edi, dword [ebp - 0x10]
xor esi, esi
shr ecx, 2
lea ebx, [ecx - 1]
and ebx, 0xfffffff
cmp ebx, 3
jb 0x487b11
inc ebx
mov dword [ebp - 0x14], eax
pxor xmm3, xmm3
mov esi, ebx
mov dword [ebp - 0x1c], ebx
mov ebx, dword [ebp - 0x10]
and esi, 0xfffffffc
mov edi, esi
mov eax, esi
shl edi, 4
add edi, ebx
nop dword [eax]
movdqu xmm2, xmmword [ebx]
movdqu xmm1, xmmword [ebx + 0x20]
movdqu xmm4, xmmword [ebx + 0x10]
movdqu xmm7, xmmword [ebx + 0x30]
add ebx, 0x40
add esi, 0xfffffffc
movdqa xmm5, xmm2
movdqa xmm0, xmm1
punpckhdq xmm1, xmm7
punpckhdq xmm2, xmm4
punpckldq xmm5, xmm4
punpckldq xmm0, xmm7
pcmpeqd xmm7, xmm7
movdqa xmm4, xmm2
punpckhqdq xmm2, xmm1
movdqa xmm6, xmm5
punpckhqdq xmm5, xmm0
punpcklqdq xmm4, xmm1
movdqa xmm1, xmmword [0x58e910]
punpcklqdq xmm6, xmm0
movdqa xmm0, xmm6
psrld xmm6, 6
pxor xmm0, xmm7
psrld xmm0, 7
por xmm6, xmm0
movdqa xmm0, xmm5
psrld xmm5, 6
pxor xmm0, xmm7
pand xmm6, xmm1
psrld xmm0, 7
paddd xmm6, xmm3
movdqa xmm3, xmm2
psrld xmm2, 6
por xmm5, xmm0
movdqa xmm0, xmm4
pxor xmm3, xmm7
psrld xmm4, 6
pxor xmm0, xmm7
psrld xmm3, 7
pand xmm5, xmm1
psrld xmm0, 7
por xmm2, xmm3
por xmm4, xmm0
pand xmm2, xmm1
pand xmm4, xmm1
movdqa xmm3, xmm2
paddd xmm4, xmm5
paddd xmm4, xmm6
paddd xmm3, xmm4
jne 0x487a10
pshufd xmm0, xmm3, 0xee
cmp dword [ebp - 0x1c], eax
mov eax, dword [ebp - 0x14]
movdqa xmm2, xmmword [0x58e910]
paddd xmm0, xmm3
pshufd xmm1, xmm0, 0x55
paddd xmm1, xmm0
movd esi, xmm1
je 0x487970
shl ecx, 4
add ecx, dword [ebp - 0x10]
nop word [eax + eax]
movdqu xmm0, xmmword [edi]
add edi, 0x10
movdqa xmm1, xmm0
psrld xmm0, 6
pxor xmm1, xmm7
psrld xmm1, 7
por xmm0, xmm1
pand xmm0, xmm2
pshufd xmm1, xmm0, 0xee
paddd xmm1, xmm0
pshufd xmm0, xmm1, 0x55
paddd xmm0, xmm1
movd ebx, xmm0
add esi, ebx
cmp edi, ecx
jne 0x487b20
jmp 0x487970
and ebx, 0xfc
cmp ecx, 0xc0
lea eax, [esi + ebx*4]
mov esi, 0xc0
cmovb esi, ecx
xor ecx, ecx
and esi, 3
shl esi, 2
nop word cs:[eax + eax]
nop dword [eax + eax]
mov edx, dword [eax]
add eax, 4
mov ebx, edx
shr edx, 6
not ebx
shr ebx, 7
or edx, ebx
and edx, 0x1010101
add ecx, edx
add esi, 0xfffffffc
jne 0x487b90
mov eax, ecx
shr ecx, 8
and eax, 0xff00ff
and ecx, 0xff00ff
add ecx, eax
mov eax, ecx
shl eax, 0x10
add eax, ecx
shr eax, 0x10
add eax, edi
add esp, 0x10
pop esi
pop edi
pop ebx
pop ebp
ret