Function at 0x478e10
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push edi
mov edi, eax
push esi
push ebx
sub esp, 0x6c
fld xword [ebp + 8]
fld st(0)
fstp xword [ebp - 0x40]
fxam
wait
fnstsw ax
and ax, 0x4500
cmp ax, 0x100
je 0x479355
movzx edx, word [ebp - 0x38]
mov ebx, edx
and ebx, 0x8000
jne 0x478f90
fxam
wait
fnstsw ax
fstp st(0)
and ax, 0x4500
cmp ax, 0x500
je 0x479373
and dx, 0x7fff
je 0x479020
lea esi, [edx - 0x3fff]
mov eax, dword [ebp - 0x40]
mov edx, dword [ebp - 0x3c]
mov ebx, dword [edi + 0xc]
cmp ebx, 0xe
jbe 0x478fa6
mov ecx, edx
or ecx, eax
je 0x479386
lea ecx, [ebp - 0x2a]
mov dword [ebp - 0x5c], ecx
mov dword [ebp - 0x54], ecx
mov dword [ebp - 0x58], edi
jmp 0x478ef6
mov ecx, dword [ebp - 0x58]
mov ecx, dword [ecx + 0xc]
test ecx, ecx
jle 0x478eab
mov ebx, dword [ebp - 0x58]
sub ecx, 1
mov dword [ebx + 0xc], ecx
mov ecx, dword [ebp - 0x54]
shrd eax, edx, 4
shr edx, 4
test edi, edi
mov dword [ebp - 0x50], ecx
je 0x478f68
mov ecx, dword [ebp - 0x50]
add ecx, 1
cmp edi, 9
mov dword [ebp - 0x54], ecx
jle 0x478f87
lea ecx, [edi + 0x37]
mov edi, dword [ebp - 0x58]
mov edi, dword [edi + 4]
mov dword [ebp - 0x60], edi
movzx ebx, byte [ebp - 0x60]
and ebx, 0x20
or ecx, ebx
mov edi, dword [ebp - 0x50]
mov byte [edi], cl
mov edi, edx
or edi, eax
je 0x479056
mov edi, eax
mov ecx, eax
and edi, 0xf
mov ebx, edi
xor ecx, edi
sar ebx, 0x1f
xor ebx, edx
or ebx, ecx
jne 0x478e98
mov ecx, dword [ebp - 0x5c]
cmp dword [ebp - 0x54], ecx
ja 0x478f30
mov ecx, dword [ebp - 0x58]
test byte [ecx + 5], 8
jne 0x478f30
mov ecx, dword [ebp - 0x54]
mov dword [ebp - 0x50], ecx
mov ecx, dword [ebp - 0x58]
mov ebx, dword [ecx + 0xc]
test ebx, ebx
jle 0x478f3c
nop
lea esi, [esi]
mov ecx, dword [ebp - 0x54]
lea ebx, [ecx + 1]
mov dword [ebp - 0x50], ebx
mov byte [ecx], 0x2e
mov ecx, eax
xor ecx, 1
or ecx, edx
je 0x478f5c
lea ecx, [esi - 1]
shrd eax, edx, 1
mov esi, ecx
mov ebx, eax
shr edx, 1
xor ebx, 1
or ebx, edx
lea ecx, [esi - 1]
jne 0x478f48
xor eax, eax
xor edx, edx
test edi, edi
jne 0x478ec0
mov ecx, dword [ebp - 0x5c]
cmp dword [ebp - 0x50], ecx
ja 0x478f7e
mov ecx, dword [ebp - 0x58]
mov ecx, dword [ecx + 0xc]
test ecx, ecx
js 0x479135
mov ecx, dword [ebp - 0x50]
add ecx, 1
mov dword [ebp - 0x54], ecx
lea ecx, [edi + 0x30]
jmp 0x478ee7
or dword [edi + 4], 0x80
jmp 0x478e48
shld edx, eax, 1
add eax, eax
test edx, edx
jns 0x478fa0
mov ecx, 0xe
shrd eax, edx, 1
sub ecx, ebx
shr edx, 1
shl ecx, 2
mov dword [ebp - 0x50], eax
mov eax, 4
mov dword [ebp - 0x4c], edx
xor edx, edx
shld edx, eax, cl
shl eax, cl
test cl, 0x20
je 0x478fd5
mov edx, eax
xor eax, eax
add dword [ebp - 0x50], eax
adc dword [ebp - 0x4c], edx
mov edx, dword [ebp - 0x4c]
mov eax, dword [ebp - 0x50]
test edx, edx
js 0x47934d
shld edx, eax, 1
add eax, eax
mov dword [ebp - 0x50], eax
mov dword [ebp - 0x4c], edx
mov edx, dword [ebp - 0x4c]
mov ecx, 0xf
mov eax, dword [ebp - 0x50]
sub ecx, ebx
shl ecx, 2
shrd eax, edx, cl
shr edx, cl
test cl, 0x20
je 0x478e8a
mov eax, edx
xor edx, edx
jmp 0x478e8a
mov edx, dword [ebp - 0x3c]
mov eax, dword [ebp - 0x40]
mov esi, edx
or esi, eax
je 0x479307
test edx, edx
js 0x4793bc
mov ecx, 0xffffc001
lea esi, [esi]
shld edx, eax, 1
mov ebx, ecx
add eax, eax
sub ecx, 1
test edx, edx
jns 0x479040
mov esi, ebx
jmp 0x478e74
mov eax, dword [ebp - 0x5c]
cmp dword [ebp - 0x54], eax
mov edi, dword [ebp - 0x58]
je 0x4793b7
mov eax, dword [edi + 4]
mov dword [ebp - 0x50], eax
mov eax, dword [edi + 8]
jmp 0x4c1d50
mov edi, dword [ebp - 0x50]
mov dword [ebp - 0x54], edi
jmp 0x478eec
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
ret
xor esi, esi
xor eax, eax
xor edx, edx
jmp 0x478e74
add esi, 1
jmp 0x478ff5
fstp st(0)
mov ecx, edi
mov edx, 0x4a1d34
xor eax, eax
call fcn.00478160
jmp 0x479292
mov ecx, edi
mov edx, 0x4a1d38
mov eax, ebx
call fcn.00478160
jmp 0x479292
lea eax, [ebp - 0x2a]
mov dword [ebp - 0x5c], eax
test ebx, ebx
mov eax, dword [edi + 4]
jle 0x4793c6
mov dword [ebp - 0x50], eax
mov byte [ebp - 0x2a], 0x2e
lea eax, [ebp - 0x29]
lea edx, [eax + 1]
mov dword [ebp - 0x54], edx
mov byte [eax], 0x30
jmp 0x47906b
mov ebx, dword [edi + 0xc]
jmp 0x47938c
mov esi, 0xffffc002
jmp 0x478e74
mov edx, eax
and dh, 8
mov dword [ebp - 0x50], eax
mov eax, dword [ebp - 0x5c]
je 0x47939d
jmp 0x479396