Function at 0x473940
Capabilities:
Encode data using xor

Disassembly:
push ebx
push ebp
push esi
push edi
mov edi, ecx
mov ecx, edx
mov eax, dword [esp + 0x14]
mov edx, dword [esp + 0x18]
mov ebp, dword [esp + 0x1c]
cmp ecx, 0x23
jb 0x473b65
test edi, 3
je 0x473980
movzx esi, byte [edi]
inc edi
movzx ebx, al
xor esi, ebx
shrd eax, edx, 8
shr edx, 8
xor eax, dword [ebp + esi*8]
xor edx, dword [ebp + esi*8 + 4]
dec ecx
jmp 0x47395d
xor eax, dword [edi]
xor edx, dword [edi + 4]
add edi, 8
lea ecx, [edi + ecx - 0x1f]
mov dword [esp + 0x1c], ecx
movzx esi, byte [edi]
mov ecx, dword [ebp + esi*8 + 0x1800]
mov ebx, dword [ebp + esi*8 + 0x1804]
movzx esi, byte [edi + 1]
xor ecx, dword [ebp + esi*8 + 0x1000]
xor ebx, dword [ebp + esi*8 + 0x1004]
movzx esi, byte [edi + 2]
xor ecx, dword [ebp + esi*8 + 0x800]
xor ebx, dword [ebp + esi*8 + 0x804]
movzx esi, byte [edi + 3]
xor ecx, dword [ebp + esi*8]
xor ebx, dword [ebp + esi*8 + 4]
xor ecx, dword [edi + 4]
xor ebx, dword [edi + 8]
movzx esi, al
shr eax, 8
xor ecx, dword [ebp + esi*8 + 0x5800]
xor ebx, dword [ebp + esi*8 + 0x5804]
movzx esi, al
shr eax, 8
xor ecx, dword [ebp + esi*8 + 0x5000]
xor ebx, dword [ebp + esi*8 + 0x5004]
movzx esi, al
shr eax, 8
xor ecx, dword [ebp + esi*8 + 0x4800]
xor ebx, dword [ebp + esi*8 + 0x4804]
xor ecx, dword [ebp + eax*8 + 0x4000]
xor ebx, dword [ebp + eax*8 + 0x4004]
movzx esi, dl
shr edx, 8
xor ecx, dword [ebp + esi*8 + 0x3800]
xor ebx, dword [ebp + esi*8 + 0x3804]
movzx esi, dl
shr edx, 8
xor ecx, dword [ebp + esi*8 + 0x3000]
xor ebx, dword [ebp + esi*8 + 0x3004]
movzx esi, dl
shr edx, 8
xor ecx, dword [ebp + esi*8 + 0x2800]
xor ebx, dword [ebp + esi*8 + 0x2804]
xor ecx, dword [ebp + edx*8 + 0x2000]
xor ebx, dword [ebp + edx*8 + 0x2004]
movzx esi, byte [edi + 0xc]
mov eax, dword [ebp + esi*8 + 0x1800]
mov edx, dword [ebp + esi*8 + 0x1804]
movzx esi, byte [edi + 0xd]
xor eax, dword [ebp + esi*8 + 0x1000]
xor edx, dword [ebp + esi*8 + 0x1004]
movzx esi, byte [edi + 0xe]
xor eax, dword [ebp + esi*8 + 0x800]
xor edx, dword [ebp + esi*8 + 0x804]
movzx esi, byte [edi + 0xf]
xor eax, dword [ebp + esi*8]
xor edx, dword [ebp + esi*8 + 4]
xor eax, dword [edi + 0x10]
xor edx, dword [edi + 0x14]
movzx esi, cl
shr ecx, 8
xor eax, dword [ebp + esi*8 + 0x5800]
xor edx, dword [ebp + esi*8 + 0x5804]
movzx esi, cl
shr ecx, 8
xor eax, dword [ebp + esi*8 + 0x5000]
xor edx, dword [ebp + esi*8 + 0x5004]
movzx esi, cl
shr ecx, 8
xor eax, dword [ebp + esi*8 + 0x4800]
xor edx, dword [ebp + esi*8 + 0x4804]
xor eax, dword [ebp + ecx*8 + 0x4000]
xor edx, dword [ebp + ecx*8 + 0x4004]
movzx esi, bl
shr ebx, 8
xor eax, dword [ebp + esi*8 + 0x3800]
xor edx, dword [ebp + esi*8 + 0x3804]
movzx esi, bl
shr ebx, 8
xor eax, dword [ebp + esi*8 + 0x3000]
xor edx, dword [ebp + esi*8 + 0x3004]
movzx esi, bl
shr ebx, 8
xor eax, dword [ebp + esi*8 + 0x2800]
xor edx, dword [ebp + esi*8 + 0x2804]
xor eax, dword [ebp + ebx*8 + 0x2000]
xor edx, dword [ebp + ebx*8 + 0x2004]
add edi, 0x18
cmp edi, dword [esp + 0x1c]
jb 0x473990
mov ecx, dword [esp + 0x1c]
add ecx, 0x1f
sub ecx, edi
sub edi, 8
xor eax, dword [edi]
xor edx, dword [edi + 4]
test ecx, ecx
je 0x473b84
movzx esi, byte [edi]
inc edi
movzx ebx, al
xor esi, ebx
shrd eax, edx, 8
shr edx, 8
xor eax, dword [ebp + esi*8]
xor edx, dword [ebp + esi*8 + 4]
dec ecx
jne 0x473b69
pop edi
pop esi
pop ebp
pop ebx
ret 0xc