Function at 0x850b30
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x84
mov ebp, dword [esp + 0xa0]
test ebp, ebp
je 0x850efe
mov edi, dword [esp + 0xac]
mov eax, dword [esp + 0xa8]
mov edx, dword [esp + 0x9c]
mov esi, dword [esp + 0x98]
mov ecx, dword [esp + 0xa4]
movdqu xmm0, xmmword [ecx]
movdqu xmm5, xmmword [ecx + 0x10]
mov ecx, edi
pshufd xmm0, xmm0, 0x39
movdqu xmmword [esp + 0x54], xmm0
movq xmm0, qword [eax]
movd xmm4, dword [eax + 8]
movdqu xmmword [esp + 0x64], xmm4
movdqu xmmword [esp + 0x74], xmm0
punpcklqdq xmm4, xmm0
jmp 0x850bad
add esi, ebx
add edx, ebx
inc ecx
sub ebp, ebx
je 0x850efe
movd xmm6, ecx
movdqa xmm7, xmm6
movdqu xmm0, xmmword [esp + 0x64]
punpcklqdq xmm7, xmm0
shufps xmm7, xmm0, 0xe2
mov edi, 0x16
movdqa xmm2, xmmword [0x9471a0]
movdqa xmm3, xmm5
movdqa xmm0, xmm5
movdqu xmm1, xmmword [esp + 0x54]
movups xmm5, xmmword [esp + 0x74]
nop word cs:[eax + eax]
movlhps xmm7, xmm5
pshufd xmm1, xmm1, 0x4e
pshufd xmm0, xmm0, 0x93
pshufd xmm2, xmm2, 0x93
paddd xmm2, xmm1
xorps xmm7, xmm2
movaps xmm5, xmm7
psrld xmm5, 0x10
pslld xmm7, 0x10
por xmm7, xmm5
paddd xmm0, xmm7
pxor xmm1, xmm0
movdqa xmm5, xmm1
psrld xmm5, 0x14
pslld xmm1, 0xc
por xmm1, xmm5
paddd xmm2, xmm1
pxor xmm7, xmm2
movdqa xmm5, xmm7
psrld xmm5, 0x18
pslld xmm7, 8
por xmm7, xmm5
paddd xmm0, xmm7
pxor xmm1, xmm0
pshufd xmm1, xmm1, 0x4e
movdqa xmm5, xmm1
psrld xmm5, 0x19
pslld xmm1, 7
por xmm1, xmm5
pshufd xmm2, xmm2, 0x39
paddd xmm2, xmm1
pxor xmm7, xmm2
movdqa xmm5, xmm7
psrld xmm5, 0x10
pslld xmm7, 0x10
por xmm7, xmm5
pshufd xmm0, xmm0, 0x93
paddd xmm0, xmm7
pxor xmm1, xmm0
movdqa xmm5, xmm1
psrld xmm5, 0x14
pslld xmm1, 0xc
por xmm1, xmm5
paddd xmm2, xmm1
pxor xmm7, xmm2
movdqa xmm5, xmm7
psrld xmm5, 0x18
pslld xmm7, 8
por xmm7, xmm5
paddd xmm0, xmm7
pxor xmm1, xmm0
movdqa xmm5, xmm1
psrld xmm5, 0x19
pslld xmm1, 7
por xmm1, xmm5
pshufd xmm0, xmm0, 0x4e
pshufd xmm5, xmm7, 0xee
add edi, 0xfffffffe
cmp edi, 2
ja 0x850bf0
paddd xmm2, xmmword [0x9471a0]
movdqu xmmword [esp + 0x14], xmm2
movdqu xmm2, xmmword [esp + 0x54]
paddd xmm1, xmm2
pshufd xmm1, xmm1, 0x93
movdqu xmmword [esp + 0x24], xmm1
movdqa xmm5, xmm3
paddd xmm0, xmm3
movdqu xmmword [esp + 0x34], xmm0
punpcklqdq xmm6, xmm4
shufps xmm6, xmm4, 0xe2
shufps xmm6, xmm6, 0x39
pshufd xmm0, xmm7, 0x39
paddd xmm0, xmm6
movdqu xmmword [esp + 0x44], xmm0
cmp ebp, 0x40
mov ebx, 0x40
cmovb ebx, ebp
test ebx, ebx
je 0x850ba0
xor edi, edi
cmp ebx, 8
mov dword [esp + 4], ebp
mov dword [esp], ecx
jb 0x850e93
mov eax, esi
sub eax, edx
cmp eax, 0x10
jb 0x850e93
xor edi, edi
cmp ebx, 0x10
jb 0x850e5a
lea eax, [ebx - 0x10]
mov edi, eax
shr edi, 4
inc edi
mov ebp, edi
and ebp, 3
xor ecx, ecx
cmp eax, 0x30
jb 0x850df2
and edi, 0xfffffffc
xor ecx, ecx
nop dword [eax + eax]
movups xmm0, xmmword [edx + ecx]
movups xmm1, xmmword [esp + ecx + 0x14]
xorps xmm1, xmm0
movups xmmword [esi + ecx], xmm1
movups xmm0, xmmword [edx + ecx + 0x10]
movups xmm1, xmmword [esp + ecx + 0x24]
xorps xmm1, xmm0
movups xmmword [esi + ecx + 0x10], xmm1
movups xmm0, xmmword [edx + ecx + 0x20]
movups xmm1, xmmword [esp + ecx + 0x34]
xorps xmm1, xmm0
movups xmmword [esi + ecx + 0x20], xmm1
movdqu xmm0, xmmword [edx + ecx + 0x30]
movdqu xmm1, xmmword [esp + ecx + 0x44]
pxor xmm1, xmm0
movdqu xmmword [esi + ecx + 0x30], xmm1
add ecx, 0x40
add edi, 0xfffffffc
jne 0x850da0
mov edi, ebx
and edi, 0x70
test ebp, ebp
mov dword [esp + 8], ebp
je 0x850e46
lea eax, [esi + ecx]
mov dword [esp + 0x10], eax
lea eax, [esp + ecx]
add eax, 0x14
mov dword [esp + 0xc], eax
add ecx, edx
shl dword [esp + 8], 4
xor eax, eax
nop dword [eax]
movdqu xmm0, xmmword [ecx + eax]
mov ebp, dword [esp + 0xc]
movdqu xmm1, xmmword [ebp + eax]
pxor xmm1, xmm0
mov ebp, dword [esp + 0x10]
movdqu xmmword [ebp + eax], xmm1
add eax, 0x10
cmp dword [esp + 8], eax
jne 0x850e20
cmp ebx, edi
mov ebp, dword [esp + 4]
mov ecx, dword [esp]
je 0x850ba0
test bl, 8
je 0x850e93
mov eax, edi
mov edi, ebx
and edi, 0x78
nop word cs:[eax + eax]
movq xmm0, qword [edx + eax]
movq xmm1, qword [esp + eax + 0x14]
pxor xmm1, xmm0
movq qword [esi + eax], xmm1
add eax, 8
cmp edi, eax
jne 0x850e70
cmp ebx, edi
je 0x850ba0
mov ecx, edi
not ecx
add ecx, ebx
mov ebp, ebx
and ebp, 3
je 0x850eaf
movzx eax, byte [esp + edi + 0x14]
xor al, byte [edx + edi]
mov byte [esi + edi], al
inc edi
dec ebp
jne 0x850ea0
cmp ecx, 3
mov ebp, dword [esp + 4]
mov ecx, dword [esp]
jb 0x850ba0
nop
movzx eax, byte [esp + edi + 0x14]
xor al, byte [edx + edi]
mov byte [esi + edi], al
movzx eax, byte [esp + edi + 0x15]
xor al, byte [edx + edi + 1]
mov byte [esi + edi + 1], al
movzx eax, byte [esp + edi + 0x16]
xor al, byte [edx + edi + 2]
mov byte [esi + edi + 2], al
movzx eax, byte [esp + edi + 0x17]
xor al, byte [edx + edi + 3]
mov byte [esi + edi + 3], al
add edi, 4
cmp ebx, edi
jne 0x850ec0
jmp 0x850ba0
add esp, 0x84
pop esi
pop edi
pop ebx
pop ebp
ret