Function at 0x415540
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff0
sub esp, 0xa0
mov edi, ecx
add ecx, 3
xor esi, esi
mov ebx, 0
and ecx, 0xfffffffc
mov eax, ecx
mov dword [esp + 0x10], ecx
sub eax, edi
sub edx, eax
mov eax, edx
mov dword [esp + 0x30], edx
and eax, 3
cmp ecx, edi
je 0x41558e
mov ecx, edi
xor ebx, ebx
sub ecx, dword [esp + 0x10]
nop dword [eax]
xor edx, edx
cmp byte [edi], 0xc0
setge dl
inc edi
add ebx, edx
inc ecx
jne 0x415580
test eax, eax
je 0x4155ae
mov ecx, dword [esp + 0x30]
xor esi, esi
and ecx, 0xfffffffc
add ecx, dword [esp + 0x10]
nop
xor edx, edx
cmp byte [ecx], 0xc0
setge dl
inc ecx
add esi, edx
dec eax
jne 0x4155a0
mov edx, dword [esp + 0x30]
add esi, ebx
movdqa xmm3, xmmword [0x4010f0]
mov ebx, dword [esp + 0x10]
pcmpeqd xmm2, xmm2
shr edx, 2
jmp 0x415608
pcmpeqd xmm2, xmm2
nop dword [eax]
mov eax, ecx
shr ecx, 8
mov edi, dword [esp + 0xc]
and eax, 0xff00ff
and ecx, 0xff00ff
add ecx, eax
mov eax, esi
mov esi, ecx
shl esi, 0x10
lea ebx, [eax + edi*4]
sub edx, edi
add esi, ecx
mov ecx, edi
shr esi, 0x10
and ecx, 3
add esi, dword [esp + 0x2c]
test ecx, ecx
jne 0x4158f2
mov eax, esi
test edx, edx
je 0x41593d
cmp edx, 0xc0
mov edi, 0xc0
mov esi, ebx
mov dword [esp + 0x2c], eax
cmovb edi, edx
xor ecx, ecx
cmp edx, 4
mov dword [esp + 0xc], edi
jb 0x4155d0
mov edi, dword [esp + 0xc]
xor ecx, ecx
mov ebx, esi
shr edi, 2
lea eax, [edi - 1]
and eax, 0xfffffff
cmp eax, 7
jb 0x4158a2
inc eax
lea ecx, [esi + 0x40]
pxor xmm2, xmm2
xorps xmm1, xmm1
mov dword [esp + 0x28], eax
and eax, 0xfffffff8
mov ebx, eax
mov dword [esp + 0x24], eax
shl ebx, 4
nop dword [eax + eax]
movdqu xmm7, xmmword [ecx - 0x20]
movdqa xmmword [esp + 0x40], xmm2
movaps xmmword [esp + 0x80], xmm1
movdqu xmm2, xmmword [ecx - 0x40]
movdqu xmm1, xmmword [ecx - 0x10]
movdqu xmm3, xmmword [ecx - 0x30]
movdqu xmm6, xmmword [ecx + 0x10]
movdqa xmm0, xmm7
movdqa xmmword [esp + 0x30], xmm1
movdqa xmmword [esp + 0x10], xmm2
movdqa xmmword [esp + 0x60], xmm3
punpckldq xmm0, xmm1
movdqa xmm1, xmm2
movdqu xmm2, xmmword [ecx + 0x30]
punpckhdq xmm7, xmmword [esp + 0x30]
punpckldq xmm1, xmm3
movdqa xmm4, xmm1
punpckhqdq xmm1, xmm0
movdqa xmmword [esp + 0x70], xmm1
movdqu xmm1, xmmword [ecx + 0x20]
punpcklqdq xmm4, xmm0
movdqa xmmword [esp + 0x50], xmm2
movdqa xmm0, xmm1
punpckhdq xmm1, xmmword [esp + 0x50]
punpckldq xmm0, xmm2
movdqu xmm2, xmmword [ecx]
sub ecx, 0xffffff80
add eax, 0xfffffff8
movdqa xmm3, xmm2
punpckhdq xmm2, xmm6
punpckldq xmm3, xmm6
movdqa xmm5, xmm3
punpckhqdq xmm3, xmm0
punpcklqdq xmm5, xmm0
movdqa xmm0, xmmword [esp + 0x10]
punpckhdq xmm0, xmmword [esp + 0x60]
movdqa xmm6, xmm0
punpckhqdq xmm0, xmm7
punpcklqdq xmm6, xmm7
movdqa xmm7, xmm2
movdqa xmmword [esp + 0x10], xmm0
punpckhqdq xmm2, xmm1
movdqa xmm0, xmm4
psrld xmm4, 6
punpcklqdq xmm7, xmm1
pcmpeqd xmm1, xmm1
movdqa xmmword [esp + 0x30], xmm2
movdqa xmm2, xmmword [esp + 0x70]
pxor xmm0, xmm1
psrld xmm0, 7
por xmm4, xmm0
movdqa xmm0, xmm5
psrld xmm5, 6
pxor xmm0, xmm1
movdqa xmm1, xmmword [0x4010f0]
psrld xmm0, 7
por xmm5, xmm0
movdqa xmm0, xmm2
psrld xmm2, 6
pand xmm4, xmm1
pand xmm5, xmm1
paddd xmm4, xmmword [esp + 0x40]
paddd xmm5, xmmword [esp + 0x80]
movdqa xmmword [esp + 0x40], xmm4
pcmpeqd xmm4, xmm4
pxor xmm0, xmm4
psrld xmm0, 7
por xmm2, xmm0
movdqa xmm0, xmm3
psrld xmm3, 6
pxor xmm0, xmm4
pand xmm2, xmm1
psrld xmm0, 7
por xmm3, xmm0
movdqa xmm0, xmm6
psrld xmm6, 6
pxor xmm0, xmm4
pand xmm3, xmm1
psrld xmm0, 7
por xmm6, xmm0
movdqa xmm0, xmm7
psrld xmm7, 6
pxor xmm0, xmm4
pand xmm6, xmm1
psrld xmm0, 7
paddd xmm6, xmm2
movdqa xmm2, xmmword [esp + 0x10]
por xmm7, xmm0
paddd xmm6, xmmword [esp + 0x40]
pand xmm7, xmm1
paddd xmm7, xmm3
movdqa xmm3, xmmword [esp + 0x30]
paddd xmm7, xmm5
movdqa xmm0, xmm2
psrld xmm2, 6
pxor xmm0, xmm4
psrld xmm0, 7
movdqa xmm5, xmm3
psrld xmm3, 6
por xmm2, xmm0
pxor xmm5, xmm4
pand xmm2, xmm1
psrld xmm5, 7
paddd xmm2, xmm6
por xmm3, xmm5
pand xmm3, xmm1
movdqa xmm1, xmm3
paddd xmm1, xmm7
jne 0x415670
mov eax, dword [esp + 0x24]
paddd xmm1, xmm2
movdqa xmm3, xmmword [0x4010f0]
pshufd xmm0, xmm1, 0xee
paddd xmm0, xmm1
pshufd xmm1, xmm0, 0x55
cmp dword [esp + 0x28], eax
paddd xmm1, xmm0
movd ecx, xmm1
je 0x4155c9
add ebx, esi
pcmpeqd xmm2, xmm2
shl edi, 4
add edi, esi
nop word [eax + eax]
movdqu xmm0, xmmword [ebx]
add ebx, 0x10
movdqa xmm1, xmm0
psrld xmm0, 6
pxor xmm1, xmm2
psrld xmm1, 7
por xmm0, xmm1
pand xmm0, xmm3
pshufd xmm1, xmm0, 0xee
paddd xmm1, xmm0
pshufd xmm0, xmm1, 0x55
paddd xmm0, xmm1
movd eax, xmm0
add ecx, eax
cmp ebx, edi
jne 0x4158b0
jmp 0x4155d0
and edi, 0xfc
shl ecx, 2
xor edx, edx
lea eax, [eax + edi*4]
mov edi, dword [eax]
add eax, 4
mov ebx, edi
shr edi, 6
not ebx
shr ebx, 7
or edi, ebx
and edi, 0x1010101
add edx, edi
add ecx, 0xfffffffc
jne 0x415900
mov ecx, edx
shr edx, 8
and ecx, 0xff00ff
and edx, 0xff00ff
add edx, ecx
mov eax, edx
shl eax, 0x10
add eax, edx
shr eax, 0x10
add eax, esi
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret