Function at 0x47f550
Capabilities:
Encode data using xor

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0x10
mov eax, dword [esp + 0x24]
mov esi, dword [eax]
lea edi, [eax + 8]
mov ebp, dword [eax + 4]
mov eax, dword [esp + 0x2c]
or eax, dword [esp + 0x30]
test al, 3
je 0x47f9b8
mov eax, dword [esp + 0x28]
shr eax, 3
test eax, eax
mov dword [esp + 0xc], eax
je 0x47f741
mov dword [esp + 8], eax
mov eax, dword [esp + 0x30]
mov dword [esp], eax
mov eax, dword [esp + 0x2c]
mov dword [esp + 4], eax
lea esi, [esi]
lea eax, [esi + 1]
movzx esi, al
lea ecx, [edi + esi*4]
mov eax, dword [ecx]
lea edx, [ebp + eax]
movzx ebp, dl
lea ebx, [edi + ebp*4]
mov edx, dword [ebx]
mov dword [ecx], edx
mov ecx, dword [esp]
mov dword [ebx], eax
mov ebx, dword [esp + 4]
add eax, edx
movzx eax, al
mov eax, dword [edi + eax*4]
xor al, byte [ebx]
mov byte [ecx], al
lea eax, [esi + 1]
movzx esi, al
lea ebx, [edi + esi*4]
mov eax, dword [ebx]
lea edx, [eax + ebp]
movzx ebp, dl
lea ecx, [edi + ebp*4]
mov edx, dword [ecx]
mov dword [ebx], edx
mov ebx, dword [esp + 4]
mov dword [ecx], eax
add eax, edx
mov ecx, dword [esp]
movzx eax, al
mov eax, dword [edi + eax*4]
xor al, byte [ebx + 1]
mov byte [ecx + 1], al
lea eax, [esi + 1]
movzx esi, al
lea ebx, [edi + esi*4]
mov eax, dword [ebx]
lea edx, [eax + ebp]
movzx ebp, dl
lea ecx, [edi + ebp*4]
mov edx, dword [ecx]
mov dword [ebx], edx
mov ebx, dword [esp + 4]
mov dword [ecx], eax
add eax, edx
mov ecx, dword [esp]
movzx eax, al
mov eax, dword [edi + eax*4]
xor al, byte [ebx + 2]
mov byte [ecx + 2], al
lea eax, [esi + 1]
movzx esi, al
lea ebx, [edi + esi*4]
mov eax, dword [ebx]
lea edx, [eax + ebp]
movzx ebp, dl
lea ecx, [edi + ebp*4]
mov edx, dword [ecx]
mov dword [ebx], edx
mov ebx, dword [esp + 4]
mov dword [ecx], eax
add eax, edx
mov ecx, dword [esp]
movzx eax, al
mov eax, dword [edi + eax*4]
xor al, byte [ebx + 3]
mov byte [ecx + 3], al
lea eax, [esi + 1]
movzx esi, al
lea ebx, [edi + esi*4]
mov eax, dword [ebx]
lea edx, [eax + ebp]
movzx ebp, dl
lea ecx, [edi + ebp*4]
mov edx, dword [ecx]
mov dword [ebx], edx
mov ebx, dword [esp + 4]
mov dword [ecx], eax
add eax, edx
mov ecx, dword [esp]
movzx eax, al
mov eax, dword [edi + eax*4]
xor al, byte [ebx + 4]
mov byte [ecx + 4], al
lea eax, [esi + 1]
movzx esi, al
lea ebx, [edi + esi*4]
mov eax, dword [ebx]
lea edx, [eax + ebp]
movzx ebp, dl
lea ecx, [edi + ebp*4]
mov edx, dword [ecx]
mov dword [ebx], edx
mov ebx, dword [esp + 4]
mov dword [ecx], eax
add eax, edx
mov ecx, dword [esp]
movzx eax, al
mov eax, dword [edi + eax*4]
xor al, byte [ebx + 5]
mov byte [ecx + 5], al
lea eax, [esi + 1]
movzx esi, al
lea ebx, [edi + esi*4]
mov eax, dword [ebx]
lea edx, [eax + ebp]
movzx ebp, dl
lea ecx, [edi + ebp*4]
mov edx, dword [ecx]
mov dword [ebx], edx
mov ebx, dword [esp + 4]
mov dword [ecx], eax
add eax, edx
mov ecx, dword [esp]
movzx eax, al
mov eax, dword [edi + eax*4]
xor al, byte [ebx + 6]
mov byte [ecx + 6], al
lea eax, [esi + 1]
movzx esi, al
lea ebx, [edi + esi*4]
mov eax, dword [ebx]
lea edx, [eax + ebp]
movzx ebp, dl
lea ecx, [edi + ebp*4]
mov edx, dword [ecx]
mov dword [ebx], edx
mov ebx, dword [esp + 4]
mov dword [ecx], eax
mov ecx, dword [esp]
add eax, edx
movzx eax, al
add ecx, 8
mov dword [esp], ecx
lea ecx, [ebx + 8]
mov dword [esp + 4], ecx
mov eax, dword [edi + eax*4]
xor al, byte [ecx - 1]
mov ecx, dword [esp]
sub dword [esp + 8], 1
mov byte [ecx - 1], al
jne 0x47f5a0
mov eax, dword [esp + 0xc]
shl eax, 3
add dword [esp + 0x30], eax
add dword [esp + 0x2c], eax
mov eax, dword [esp + 0x28]
and eax, 7
mov dword [esp], eax
je 0x47f8d3
lea ebx, [esi + 1]
movzx esi, bl
lea ebx, [edi + esi*4]
mov eax, dword [ebx]
lea edx, [eax + ebp]
movzx ebp, dl
lea ecx, [edi + ebp*4]
mov edx, dword [ecx]
mov dword [ebx], edx
mov dword [ecx], eax
mov ecx, dword [esp + 0x2c]
add eax, edx
movzx eax, al
mov eax, dword [edi + eax*4]
xor al, byte [ecx]
mov ecx, dword [esp + 0x30]
cmp dword [esp], 1
mov byte [ecx], al
je 0x47f8d3
lea ebx, [esi + 1]
movzx esi, bl
lea ebx, [edi + esi*4]
mov eax, dword [ebx]
lea edx, [eax + ebp]
movzx ebp, dl
lea ecx, [edi + ebp*4]
mov edx, dword [ecx]
mov dword [ebx], edx
mov dword [ecx], eax
add eax, edx
mov edx, dword [esp + 0x2c]
movzx eax, al
mov ecx, dword [esp + 0x30]
mov eax, dword [edi + eax*4]
xor al, byte [edx + 1]
cmp dword [esp], 2
mov byte [ecx + 1], al
je 0x47f8d3
lea ebx, [esi + 1]
movzx esi, bl
lea ebx, [edi + esi*4]
mov eax, dword [ebx]
lea edx, [eax + ebp]
movzx ebp, dl
lea ecx, [edi + ebp*4]
mov edx, dword [ecx]
mov dword [ebx], edx
mov dword [ecx], eax
add eax, edx
mov edx, dword [esp + 0x2c]
movzx eax, al
mov ecx, dword [esp + 0x30]
mov eax, dword [edi + eax*4]
xor al, byte [edx + 2]
cmp dword [esp], 3
mov byte [ecx + 2], al
je 0x47f8d3
lea ebx, [esi + 1]
movzx esi, bl
lea ebx, [edi + esi*4]
mov eax, dword [ebx]
lea edx, [eax + ebp]
movzx ebp, dl
lea ecx, [edi + ebp*4]
mov edx, dword [ecx]
mov dword [ebx], edx
mov dword [ecx], eax
add eax, edx
mov edx, dword [esp + 0x2c]
movzx eax, al
mov ecx, dword [esp + 0x30]
mov eax, dword [edi + eax*4]
xor al, byte [edx + 3]
cmp dword [esp], 4
mov byte [ecx + 3], al
je 0x47f8d3
lea ebx, [esi + 1]
movzx esi, bl
lea ebx, [edi + esi*4]
mov eax, dword [ebx]
lea edx, [eax + ebp]
movzx ebp, dl
lea ecx, [edi + ebp*4]
mov edx, dword [ecx]
mov dword [ebx], edx
mov dword [ecx], eax
add eax, edx
mov edx, dword [esp + 0x2c]
movzx eax, al
mov ecx, dword [esp + 0x30]
mov eax, dword [edi + eax*4]
xor al, byte [edx + 4]
cmp dword [esp], 5
mov byte [ecx + 4], al
je 0x47f8d3
lea ebx, [esi + 1]
movzx esi, bl
lea ebx, [edi + esi*4]
mov eax, dword [ebx]
lea edx, [eax + ebp]
movzx ebp, dl
lea ecx, [edi + ebp*4]
mov edx, dword [ecx]
mov dword [ebx], edx
mov dword [ecx], eax
add eax, edx
mov edx, dword [esp + 0x2c]
movzx eax, al
mov ecx, dword [esp + 0x30]
mov eax, dword [edi + eax*4]
xor al, byte [edx + 5]
cmp dword [esp], 6
mov byte [ecx + 5], al
je 0x47f8d3
lea ebx, [esi + 1]
movzx esi, bl
lea ebx, [edi + esi*4]
mov eax, dword [ebx]
lea edx, [eax + ebp]
movzx ebp, dl
lea ecx, [edi + ebp*4]
mov edx, dword [ecx]
mov dword [ebx], edx
mov dword [ecx], eax
add eax, edx
movzx eax, al
mov eax, dword [edi + eax*4]
mov edi, dword [esp + 0x2c]
xor al, byte [edi + 6]
mov edi, dword [esp + 0x30]
mov byte [edi + 6], al
mov eax, dword [esp + 0x24]
mov dword [eax], esi
mov dword [eax + 4], ebp
add esp, 0x10
pop ebx
pop esi
pop edi
pop ebp
ret
mov eax, dword [esp + 0x2c]
lea ecx, [esi + 1]
movzx ecx, cl
lea esi, [edi + ecx*4]
add ecx, 1
movzx ecx, cl
mov eax, dword [eax]
mov dword [esp + 4], eax
mov eax, dword [esi]
lea edx, [ebp + eax]
movzx edx, dl
lea ebp, [edi + edx*4]
mov ebx, dword [ebp]
mov dword [ebp], eax
add eax, ebx
movzx eax, al
mov dword [esi], ebx
mov eax, dword [edi + eax*4]
lea esi, [edi + ecx*4]
add ecx, 1
movzx ecx, cl
mov dword [esp + 8], eax
mov eax, dword [esi]
add edx, eax
movzx edx, dl
lea ebp, [edi + edx*4]
mov ebx, dword [ebp]
mov dword [ebp], eax
add eax, ebx
movzx eax, al
mov dword [esi], ebx
mov esi, dword [edi + eax*4]
mov eax, dword [esp + 8]
mov dword [esp], esi
lea esi, [edi + ecx*4]
add ecx, 1
shl dword [esp], 8
or dword [esp], eax
mov eax, dword [esi]
add edx, eax
movzx edx, dl
lea ebp, [edi + edx*4]
mov ebx, dword [ebp]
mov dword [ebp], eax
add eax, ebx
movzx eax, al
mov dword [esi], ebx
mov eax, dword [edi + eax*4]
movzx esi, cl
lea ecx, [edi + esi*4]
shl eax, 0x10
or dword [esp], eax
mov eax, dword [ecx]
add edx, eax
movzx ebp, dl
lea edx, [edi + ebp*4]
mov ebx, dword [edx]
mov dword [edx], eax
add eax, ebx
movzx eax, al
mov dword [ecx], ebx
mov eax, dword [edi + eax*4]
shl eax, 0x18
or dword [esp], eax
mov eax, dword [esp]
xor dword [esp + 4], eax
mov eax, dword [esp + 0x30]
mov ecx, dword [esp + 4]
add dword [esp + 0x2c], 4
add dword [esp + 0x30], 4
sub dword [esp + 0x28], 4
mov dword [eax], ecx
test dword [esp + 0x28], 0xfffffffc
jne 0x47f8e4
jmp 0x47f573