Function at 0x47e927
Capabilities:
Encode data using xor

Disassembly:
sub esp, 0x1c
push ebx
push ebp
mov ebp, dword [esp + 0x28]
test ebp, ebp
je 0x47eb41
mov ebx, dword [esp + 0x2c]
test ebx, ebx
je 0x47eb41
cmp byte [ebx], 1
je 0x47eb41
push esi
mov esi, dword [esp + 0x34]
test esi, esi
je 0x47eb38
mov ecx, dword [esp + 0x38]
test ecx, ecx
jle 0x47eb38
mov eax, ecx
cdq
and edx, 0xf
add eax, edx
push edi
mov edi, eax
movzx eax, byte [ebp + 0x14]
sar edi, 4
dec eax
je 0x47ea8f
dec eax
je 0x47e98f
pop edi
pop esi
pop ebp
mov eax, 0xfffffffb
pop ebx
add esp, 0x1c
ret
test edi, edi
mov eax, ebp
mov ebp, dword [esp + 0x40]
jle 0x47e9f2
mov dword [esp + 0x30], edi
mov edx, dword [eax]
mov ecx, dword [esi]
xor ecx, edx
mov edx, dword [eax + 4]
mov dword [esp + 0x1c], ecx
xor edx, dword [esi + 4]
mov ecx, dword [eax + 8]
mov dword [esp + 0x20], edx
xor ecx, dword [esi + 8]
mov edx, dword [eax + 0xc]
xor edx, dword [esi + 0xc]
mov eax, dword [ebx + 0x4c]
push eax
lea eax, [ebx + 0x54]
push eax
mov dword [esp + 0x2c], ecx
lea ecx, [esp + 0x24]
push ebp
push ecx
mov dword [esp + 0x38], edx
call fcn.0049e147
mov ecx, dword [esp + 0x40]
mov eax, ebp
add esp, 0x10
add esi, 0x10
add ebp, 0x10
dec ecx
mov dword [esp + 0x30], ecx
jne 0x47e99d
mov ecx, dword [esp + 0x3c]
shl edi, 4
mov edx, edi
mov dword [esp + 0x10], edx
sub edx, ecx
add edx, 0x10
mov edi, 0x10
sub edi, edx
test edi, edi
jle 0x47ea47
mov ebx, eax
sub ebx, esi
mov dword [esp + 0x14], ebx
lea ebx, [esp + 0x1c]
sub ebx, esi
mov ecx, esi
mov dword [esp + 0x18], ebx
mov dword [esp + 0x30], edi
lea esp, [esp]
mov esi, dword [esp + 0x14]
mov bl, byte [esi + ecx]
xor bl, byte [ecx]
mov esi, dword [esp + 0x18]
mov byte [esi + ecx], bl
mov esi, dword [esp + 0x30]
inc ecx
dec esi
mov dword [esp + 0x30], esi
jne 0x47ea27
mov ebx, dword [esp + 0x34]
mov ecx, edi
cmp ecx, 0x10
jge 0x47ea6a
mov esi, eax
lea eax, [esp + 0x1c]
sub esi, eax
nop
lea eax, [esi + ecx]
mov al, byte [esp + eax + 0x1c]
xor al, dl
mov byte [esp + ecx + 0x1c], al
inc ecx
cmp ecx, 0x10
jl 0x47ea57
mov ecx, dword [ebx + 0x4c]
push ecx
add ebx, 0x54
push ebx
lea edx, [esp + 0x24]
push ebp
push edx
call fcn.0049e147
mov eax, dword [esp + 0x20]
add esp, 0x10
pop edi
pop esi
pop ebp
add eax, 0x10
pop ebx
add esp, 0x1c
ret
test edi, edi
mov ebp, dword [esp + 0x40]
jle 0x47eac2
mov dword [esp + 0x30], edi
mov eax, dword [ebx + 0x4c]
push eax
lea eax, [ebx + 0x54]
push eax
push ebp
push esi
call fcn.0049e147
mov eax, dword [esp + 0x40]
add esp, 0x10
add esi, 0x10
add ebp, 0x10
dec eax
mov dword [esp + 0x30], eax
jne 0x47ea9b
mov ecx, dword [esp + 0x3c]
shl edi, 4
mov edx, edi
sub edx, ecx
add edx, 0x10
mov dword [esp + 0x10], edi
mov ecx, 0x10
sub ecx, edx
mov eax, ecx
shr ecx, 2
lea edi, [esp + 0x1c]
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
mov al, dl
mov dword [esp + 0x30], ebx
mov bl, al
mov bh, bl
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov eax, ebx
shl eax, 0x10
mov ax, bx
mov ebx, dword [esp + 0x30]
mov ecx, edx
shr ecx, 2
lea edi, [esp + 0x2c]
sub edi, edx
add ebx, 0x54
rep stosd dword es:[edi], eax
mov ecx, edx
and ecx, 3
rep stosb byte es:[edi], al
mov eax, dword [ebx - 8]
push eax
push ebx
lea ecx, [esp + 0x24]
push ebp
push ecx
call fcn.0049e147
mov eax, dword [esp + 0x20]
add esp, 0x10
pop edi
pop esi
pop ebp
add eax, 0x10
pop ebx
add esp, 0x1c
ret
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x1c
ret
pop ebp
mov eax, 0xfffffffb
pop ebx
add esp, 0x1c
ret