Function at 0x47bfc0
Capabilities:
Encode data using xor

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0x5c
mov dword [esp + 0x40], eax
mov eax, dword [edx + 8]
mov dword [esp + 0x10], edx
mov dword [esp + 0xc], ecx
test eax, eax
mov dword [esp + 0x1c], eax
jne 0x47c0e1
mov esi, dword [esp + 0x70]
test esi, esi
je 0x47c3b8
mov esi, dword [esp + 0x10]
mov eax, dword [esi + 0x10]
mov byte [esi + 4], 6
mov dword [esi + 8], 0x40
mov dword [esp], 0x100
call dword [eax]
test eax, eax
mov dword [esi], eax
je 0x47c3ad
test al, 1
mov edi, eax
mov edx, 0x100
jne 0x47c3da
test edi, 2
jne 0x47c3c9
mov ecx, edx
xor eax, eax
shr ecx, 2
test dl, 2
rep stosd dword es:[edi], eax
jne 0x47c399
and edx, 1
jne 0x47c391
mov esi, dword [esp + 0xc]
mov eax, dword [esp + 0x40]
movzx edx, byte [esi]
mov eax, dword [eax + 0x1f0]
test dl, dl
je 0x47c075
mov ecx, esi
add ecx, 1
imul ebx, eax, 0xf4243
movzx eax, dl
movzx edx, byte [ecx]
xor eax, ebx
test dl, dl
jne 0x47c060
mov edi, dword [esp + 0x10]
mov esi, dword [edi + 8]
mov edi, dword [edi]
mov dword [esp + 0x14], esi
sub esi, 1
and esi, eax
shl esi, 2
add edi, esi
mov ebx, dword [esp + 0x10]
mov ecx, dword [esp + 0x70]
mov eax, dword [ebx + 0x10]
mov dword [esp], ecx
call dword [eax]
mov dword [edi], eax
mov eax, dword [ebx]
mov edi, ebx
mov eax, dword [eax + esi]
test eax, eax
je 0x47c3b8
mov ebx, dword [esp + 0x70]
mov dword [esp + 4], 0
mov dword [esp], eax
mov dword [esp + 8], ebx
call sub.msvcrt.dll_memset
mov eax, dword [edi]
mov ebx, dword [esp + 0xc]
mov eax, dword [eax + esi]
mov dword [eax], ebx
mov eax, dword [edi]
add dword [edi + 0xc], 1
mov eax, dword [eax + esi]
add esp, 0x5c
pop ebx
pop esi
pop edi
pop ebp
ret
mov eax, dword [esp + 0x40]
mov ebp, dword [eax + 0x1f0]
mov eax, dword [esp + 0xc]
movzx ebx, byte [eax]
test bl, bl
mov byte [esp + 0x18], bl
je 0x47c115
mov edx, ebx
lea esi, [esi]
add eax, 1
imul ecx, ebp, 0xf4243
movzx ebp, dl
movzx edx, byte [eax]
xor ebp, ecx
test dl, dl
jne 0x47c100
mov eax, dword [esp + 0x1c]
mov ebx, ebp
mov edi, dword [esp + 0x10]
sub eax, 1
mov esi, dword [edi]
and ebx, eax
mov edi, eax
not eax
mov dword [esp + 0x20], eax
shr edi, 2
and dword [esp + 0x20], ebp
mov dword [esp + 0x30], edi
xor edi, edi
mov dword [esp + 0x14], esi
nop
mov esi, dword [esp + 0x14]
lea eax, [ebx*4]
lea edx, [esi + eax]
mov esi, dword [edx]
test esi, esi
je 0x47c1c7
mov edx, dword [esi]
movzx eax, byte [esp + 0x18]
cmp byte [edx], al
jne 0x47c181
test al, al
je 0x47c1b3
mov ecx, dword [esp + 0xc]
jmp 0x47c174
test al, al
je 0x47c1b3
add ecx, 1
add edx, 1
movzx eax, byte [ecx]
cmp al, byte [edx]
je 0x47c170
mov eax, edi
test al, al
jne 0x47c1a2
mov eax, dword [esp + 0x10]
mov edi, dword [esp + 0x20]
movzx ecx, byte [eax + 4]
movzx eax, byte [esp + 0x30]
sub ecx, 1
shr edi, cl
and edi, eax
or edi, 1
mov eax, edi
movzx eax, al
cmp ebx, eax
jae 0x47c1c0
add ebx, dword [esp + 0x1c]
sub ebx, eax
jmp 0x47c140
add esp, 0x5c
mov eax, esi
pop ebx
pop esi
pop edi
pop ebp
ret
sub ebx, eax
jmp 0x47c140
mov edi, edx
mov edx, dword [esp + 0x70]
mov esi, eax
test edx, edx
je 0x47c3b8
mov eax, dword [esp + 0x10]
movzx edx, byte [eax + 4]
mov eax, dword [eax + 0xc]
lea ecx, [edx - 1]
shr eax, cl
test eax, eax
je 0x47c08c
lea ecx, [edx + 1]
mov dword [esp + 0x14], 1
shl dword [esp + 0x14], cl
mov eax, dword [esp + 0x14]
mov byte [esp + 0x47], cl
lea edi, [eax - 1]
mov dword [esp + 0x18], edi
mov edi, dword [esp + 0x10]
lea esi, [eax*4]
mov eax, dword [edi + 0x10]
mov dword [esp], esi
call dword [eax]
test eax, eax
mov ebx, eax
je 0x47c3b8
mov dword [esp + 8], esi
mov dword [esp + 4], 0
mov dword [esp], eax
call sub.msvcrt.dll_memset
mov eax, dword [edi + 8]
mov esi, dword [esp + 0x18]
test eax, eax
mov eax, dword [esp + 0x10]
mov eax, dword [eax]
je 0x47c3e9
mov edi, esi
not esi
mov dword [esp + 0x1c], esi
movzx esi, byte [esp + 0x47]
shr edi, 2
mov dword [esp + 0x20], edi
xor edi, edi
mov dword [esp + 0x4c], ebp
mov dword [esp + 0x48], esi
sub esi, 1
mov dword [esp + 0x30], esi
mov esi, dword [eax + edi*4]
test esi, esi
je 0x47c2f2
mov eax, dword [esp + 0x40]
mov ecx, dword [esi]
mov edx, dword [eax + 0x1f0]
movzx eax, byte [ecx]
test al, al
je 0x47c2a7
add ecx, 1
imul ebp, edx, 0xf4243
movzx edx, al
movzx eax, byte [ecx]
xor edx, ebp
test al, al
jne 0x47c292
mov eax, dword [esp + 0x18]
movzx ecx, byte [esp + 0x30]
and eax, edx
and edx, dword [esp + 0x1c]
shr edx, cl
xor ecx, ecx
and dl, byte [esp + 0x20]
or edx, 1
lea ebp, [ebx + eax*4]
cmp dword [ebp], 0
je 0x47c2e9
test cl, cl
cmove ecx, edx
movzx ebp, cl
cmp eax, ebp
jae 0x47c3c2
add eax, dword [esp + 0x14]
sub eax, ebp
lea ebp, [ebx + eax*4]
cmp dword [ebp], 0
jne 0x47c2ca
mov eax, dword [esp + 0x10]
mov dword [ebp], esi
mov eax, dword [eax]
mov esi, dword [esp + 0x10]
add edi, 1
cmp dword [esi + 8], edi
ja 0x47c278
mov ebp, dword [esp + 0x4c]
mov edi, dword [esp + 0x10]
mov edx, dword [edi + 0x10]
mov dword [esp], eax
call dword [edx + 8]
movzx eax, byte [esp + 0x47]
mov edx, dword [esp + 0x1c]
mov ecx, dword [esp + 0x48]
mov esi, dword [esp + 0x18]
mov byte [edi + 4], al
mov eax, dword [esp + 0x14]
and edx, ebp
sub ecx, 1
shr edx, cl
mov ecx, esi
shr ecx, 2
and ecx, edx
xor edx, edx
mov dword [edi + 8], eax
mov eax, esi
or ecx, 1
mov dword [edi], ebx
and eax, ebp
lea esi, [eax*4]
lea edi, [ebx + esi]
mov ebp, dword [edi]
test ebp, ebp
je 0x47c08c
test dl, dl
cmove edx, ecx
movzx esi, dl
cmp eax, esi
jae 0x47c38d
add eax, dword [esp + 0x14]
sub eax, esi
lea esi, [eax*4]
lea edi, [ebx + esi]
mov ebp, dword [edi]
test ebp, ebp
je 0x47c08c
test dl, dl
cmove edx, ecx
movzx esi, dl
cmp eax, esi
jb 0x47c367
sub eax, esi
jmp 0x47c347
mov byte [edi], 0
jmp 0x47c049
xor ecx, ecx
add edi, 2
mov word [edi - 2], cx
and edx, 1
je 0x47c049
jmp 0x47c391
mov eax, dword [esp + 0x10]
mov dword [eax + 8], 0
add esp, 0x5c
xor eax, eax
pop ebx
pop esi
pop edi
pop ebp
ret
sub eax, ebp
jmp 0x47c2c1
xor ebx, ebx
add edi, 2
mov word [edi - 2], bx
sub edx, 2
jmp 0x47c02e
mov byte [eax], 0
add edi, 1
mov dx, 0xff
jmp 0x47c022
movzx edi, byte [esp + 0x47]
not esi
mov dword [esp + 0x1c], esi
mov dword [esp + 0x48], edi
jmp 0x47c306