Function at 0x4c0850
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x14
mov eax, dword [esp + 0x40]
mov ebp, dword [esp + 0x30]
mov ecx, dword [esp + 0x3c]
mov edi, dword [esp + 0x2c]
mov ebx, dword [esp + 0x28]
mov esi, dword [eax]
test ebp, ebp
je 0x4c089a
nop word cs:[eax + eax]
nop dword [eax + eax]
test esi, esi
je 0x4c089a
movzx eax, byte [ecx + esi]
inc esi
and esi, 0xf
xor al, byte [ebx]
inc ebx
mov byte [edi], al
inc edi
cmp ebp, 1
lea ebp, [ebp - 1]
jne 0x4c0880
mov eax, dword [esp + 0x38]
mov edx, dword [esp + 0x38]
cmp ebp, 0x10
mov dword [esp + 0x10], esi
mov eax, dword [eax + 0xc]
bswap eax
mov dword [esp + 0xc], eax
jae 0x4c08db
jmp 0x4c09a5
mov ecx, dword [esp]
mov edi, dword [esp + 4]
shl esi, 4
add ebx, esi
sub ecx, esi
add edi, esi
cmp ecx, 0xf
mov ebp, ecx
jbe 0x4c09a5
mov eax, ebp
mov dword [esp], ebp
mov ebp, dword [esp + 0xc]
mov ecx, 0
shr eax, 4
mov esi, ebp
neg esi
add ebp, eax
cmovae esi, eax
cmovb ebp, ecx
push edx
push dword [esp + 0x38]
push esi
mov dword [esp + 0x10], edi
push edi
push ebx
call dword [esp + 0x58]
mov edx, dword [esp + 0x4c]
add esp, 0x14
mov eax, ebp
test ebp, ebp
mov dword [esp + 0xc], ebp
bswap eax
mov dword [edx + 0xc], eax
jne 0x4c08c0
movzx eax, byte [edx + 0xb]
inc eax
mov byte [edx + 0xb], al
shr eax, 8
movzx ecx, byte [edx + 0xa]
add ecx, eax
mov byte [edx + 0xa], cl
shr ecx, 8
movzx eax, byte [edx + 9]
add eax, ecx
mov byte [edx + 9], al
shr eax, 8
movzx ecx, byte [edx + 8]
add ecx, eax
mov byte [edx + 8], cl
shr ecx, 8
movzx eax, byte [edx + 7]
add eax, ecx
mov byte [edx + 7], al
shr eax, 8
movzx ecx, byte [edx + 6]
add ecx, eax
mov byte [edx + 6], cl
shr ecx, 8
movzx eax, byte [edx + 5]
add eax, ecx
mov byte [edx + 5], al
shr eax, 8
movzx ecx, byte [edx + 4]
add ecx, eax
mov byte [edx + 4], cl
shr ecx, 8
movzx eax, byte [edx + 3]
add eax, ecx
mov byte [edx + 3], al
shr eax, 8
movzx ecx, byte [edx + 2]
add ecx, eax
mov byte [edx + 2], cl
shr ecx, 8
movzx eax, byte [edx + 1]
add eax, ecx
mov byte [edx + 1], al
add byte [edx], ah
jmp 0x4c08c0
test ebp, ebp
mov dword [esp + 8], ebx
mov dword [esp + 4], edi
je 0x4c0a9d
mov dword [esp], ebp
mov ebp, dword [esp + 0x3c]
mov dword [ebp + 4], 0
mov dword [ebp], 0
mov dword [ebp + 0xc], 0
mov dword [ebp + 8], 0
push edx
push dword [esp + 0x38]
push 1
push ebp
push ebp
call dword [esp + 0x58]
mov edx, dword [esp + 0x4c]
add esp, 0x14
mov eax, dword [esp + 0xc]
inc eax
bswap eax
mov dword [edx + 0xc], eax
jne 0x4c0a7e
movzx eax, byte [edx + 0xb]
inc eax
mov byte [edx + 0xb], al
shr eax, 8
movzx ecx, byte [edx + 0xa]
add ecx, eax
mov byte [edx + 0xa], cl
shr ecx, 8
movzx eax, byte [edx + 9]
add eax, ecx
mov byte [edx + 9], al
shr eax, 8
movzx ecx, byte [edx + 8]
add ecx, eax
mov byte [edx + 8], cl
shr ecx, 8
movzx eax, byte [edx + 7]
add eax, ecx
mov byte [edx + 7], al
shr eax, 8
movzx ecx, byte [edx + 6]
add ecx, eax
mov byte [edx + 6], cl
shr ecx, 8
movzx eax, byte [edx + 5]
add eax, ecx
mov byte [edx + 5], al
shr eax, 8
movzx ecx, byte [edx + 4]
add ecx, eax
mov byte [edx + 4], cl
shr ecx, 8
movzx eax, byte [edx + 3]
add eax, ecx
mov byte [edx + 3], al
shr eax, 8
movzx ecx, byte [edx + 2]
add ecx, eax
mov byte [edx + 2], cl
shr ecx, 8
movzx eax, byte [edx + 1]
add eax, ecx
mov byte [edx + 1], al
add byte [edx], ah
mov ecx, dword [esp]
mov esi, dword [esp + 4]
mov edi, dword [esp + 0x10]
cmp ecx, 0x20
jae 0x4c0aaa
mov edx, dword [esp + 0x40]
mov ebx, dword [esp + 8]
mov eax, ecx
jmp 0x4c0b50
mov edx, dword [esp + 0x40]
mov edi, dword [esp + 0x10]
jmp 0x4c0b61
mov ebx, dword [esp + 8]
add ecx, edi
lea eax, [esi + edi]
lea edx, [esi + ecx]
lea esi, [ebx + ecx]
add ecx, ebp
cmp eax, esi
lea esi, [ebx + edi]
setb bl
cmp esi, edx
setb bh
cmp eax, ecx
lea ecx, [ebp + edi]
setb al
cmp ecx, edx
setb cl
test bl, bh
jne 0x4c0b40
and al, cl
jne 0x4c0b40
mov ecx, dword [esp + 8]
mov eax, dword [esp]
lea esi, [ebp + edi + 0x10]
lea edx, [ecx + edi + 0x10]
mov ecx, dword [esp + 4]
mov ebx, eax
and ebx, 0xffffffe0
sub eax, ebx
lea ebp, [ecx + edi + 0x10]
add edi, ebx
xor ecx, ecx
movups xmm0, xmmword [edx + ecx - 0x10]
movups xmm2, xmmword [esi + ecx - 0x10]
movups xmm1, xmmword [edx + ecx]
movups xmm3, xmmword [esi + ecx]
xorps xmm2, xmm0
xorps xmm3, xmm1
movups xmmword [ebp + ecx - 0x10], xmm2
movups xmmword [ebp + ecx], xmm3
add ecx, 0x20
cmp ebx, ecx
jne 0x4c0b00
cmp dword [esp], ebx
mov edx, dword [esp + 0x40]
mov ebp, dword [esp + 0x3c]
mov esi, dword [esp + 4]
mov ebx, dword [esp + 8]
jne 0x4c0b50
jmp 0x4c0b61
mov eax, dword [esp]
mov edx, dword [esp + 0x40]
mov esi, dword [esp + 4]
mov ebx, dword [esp + 8]
nop
movzx ecx, byte [ebp + edi]
xor cl, byte [ebx + edi]
dec eax
mov byte [esi + edi], cl
lea edi, [edi + 1]
jne 0x4c0b50
mov dword [edx], edi
add esp, 0x14
pop esi
pop edi
pop ebx
pop ebp
ret