Function at 0x5002f0
Capabilities:
Encode data using xor

Disassembly:
sub esp, 0x1c
push ebx
push ebp
mov ebp, dword [esp + 0x28]
mov ebx, edx
push esi
mov esi, dword [esp + 0x30]
mov edx, ecx
push edi
mov edi, esi
mov dword [esp + 0x18], ebx
shr edi, 2
xor ecx, ecx
mov dword [esp + 0x14], edx
mov dword [esp + 0x10], ecx
mov dword [esp + 0x28], edi
test edi, edi
je 0x500425
cmp edi, 8
jb 0x5003d6
lea eax, [ebp - 4]
mov dword [esp + 0x10], ecx
lea eax, [eax + edi*4]
cmp edx, eax
ja 0x500347
lea eax, [edx - 4]
lea eax, [eax + edi*4]
cmp eax, ebp
jae 0x5003d6
lea eax, [ebx - 4]
lea eax, [eax + edi*4]
cmp edx, eax
ja 0x50035b
lea eax, [edx - 4]
lea eax, [eax + edi*4]
cmp eax, ebx
jae 0x5003d6
mov eax, edi
mov esi, edi
and eax, 7
sub esi, eax
lea eax, [ebx + 0x10]
mov dword [esp + 0x24], esi
mov esi, edx
sub esi, ebx
mov dword [esp + 0x10], esi
mov esi, ebp
mov edi, dword [esp + 0x10]
sub esi, ebx
mov dword [esp + 0x1c], esi
mov esi, edx
mov edx, dword [esp + 0x1c]
sub esi, ebp
mov dword [esp + 0x20], esi
mov esi, ebp
mov ebx, dword [esp + 0x20]
movups xmm0, xmmword [esi]
add ecx, 8
lea esi, [esi + 0x20]
lea eax, [eax + 0x20]
movups xmm1, xmmword [eax - 0x30]
pxor xmm1, xmm0
movups xmmword [ebx + esi - 0x20], xmm1
movups xmm1, xmmword [edx + eax - 0x20]
movups xmm0, xmmword [eax - 0x20]
pxor xmm1, xmm0
movups xmmword [edi + eax - 0x20], xmm1
cmp ecx, dword [esp + 0x24]
jb 0x500391
mov esi, dword [esp + 0x34]
mov edi, dword [esp + 0x28]
mov edx, dword [esp + 0x14]
mov ebx, dword [esp + 0x18]
mov dword [esp + 0x10], ecx
cmp ecx, edi
jae 0x500425
mov eax, ebx
lea ecx, [ecx*4]
sub eax, ebp
add ecx, ebp
mov dword [esp + 0x28], eax
mov eax, edx
mov esi, dword [esp + 0x28]
sub eax, ebp
mov dword [esp + 0x24], eax
mov eax, dword [esp + 0x10]
sub edi, eax
mov ebp, dword [esp + 0x24]
add eax, edi
mov dword [esp + 0x10], eax
mov eax, dword [esi + ecx]
lea ecx, [ecx + 4]
xor eax, dword [ecx - 4]
mov dword [ecx + ebp - 4], eax
sub edi, 1
jne 0x500407
mov esi, dword [esp + 0x34]
mov ebp, dword [esp + 0x30]
mov ecx, dword [esp + 0x10]
shl ecx, 2
sub esi, ecx
mov dword [esp + 0x34], esi
je 0x500512
add edx, ecx
add ebx, ecx
add ebp, ecx
mov dword [esp + 0x14], edx
xor edi, edi
mov dword [esp + 0x18], ebx
mov dword [esp + 0x30], ebp
test esi, esi
je 0x500512
cmp esi, 0x20
jb 0x5004f3
lea eax, [ebp - 1]
lea ecx, [edx - 1]
add eax, esi
add ecx, esi
cmp edx, eax
ja 0x50046f
cmp ecx, ebp
jae 0x5004f3
lea eax, [ebx - 1]
add eax, esi
cmp edx, eax
ja 0x50047c
cmp ecx, ebx
jae 0x5004f3
mov eax, esi
mov ecx, esi
mov esi, edx
and eax, 0x1f
sub esi, ebx
sub ecx, eax
mov dword [esp + 0x28], esi
mov eax, ebx
mov esi, ebp
mov dword [esp + 0x1c], ecx
sub esi, ebx
lea ecx, [ebp + 0x10]
mov dword [esp + 0x24], esi
mov esi, edx
mov edx, dword [esp + 0x24]
sub esi, ebp
mov ebp, dword [esp + 0x28]
mov dword [esp + 0x20], esi
mov esi, dword [esp + 0x34]
mov ebx, dword [esp + 0x20]
movups xmm0, xmmword [eax]
add edi, 0x20
lea eax, [eax + 0x20]
lea ecx, [ecx + 0x20]
movups xmm1, xmmword [eax + edx - 0x20]
pxor xmm1, xmm0
movups xmmword [eax + ebp - 0x20], xmm1
movups xmm1, xmmword [eax - 0x10]
movups xmm0, xmmword [ecx - 0x20]
pxor xmm1, xmm0
movups xmmword [ecx + ebx - 0x20], xmm1
cmp edi, dword [esp + 0x1c]
jb 0x5004b6
mov edx, dword [esp + 0x14]
mov ebx, dword [esp + 0x18]
mov ebp, dword [esp + 0x30]
cmp edi, esi
jae 0x500512
sub ebx, ebp
lea ecx, [edi + ebp]
sub edx, ebp
sub esi, edi
mov al, byte [ebx + ecx]
lea ecx, [ecx + 1]
xor al, byte [ecx - 1]
mov byte [edx + ecx - 1], al
sub esi, 1
jne 0x500500
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x1c
ret