Function at 0x407af0
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push edi
mov edi, eax
push esi
push ebx
and esp, 0xfffffff0
sub esp, 0x60
fld xword [ebp + 8]
fld st(0)
fstp xword [esp + 0x38]
fxam
wait
fnstsw ax
and ax, 0x4500
cmp ax, 0x100
je 0x407ea8
fld st(0)
fstp xword [esp + 0x20]
movzx edx, word [esp + 0x28]
test dx, dx
js 0x407d70
fxam
wait
fnstsw ax
fstp st(0)
and ax, 0x4500
cmp ax, 0x500
je 0x408008
and dx, 0x7fff
mov ebx, dword [esp + 0x38]
mov esi, dword [esp + 0x3c]
mov word [esp + 0x14], dx
jne 0x407d80
mov eax, esi
or eax, ebx
jne 0x407ec0
mov eax, dword [edi + 0xc]
mov dword [esp + 0x1c], eax
cmp eax, 0xe
jbe 0x407da8
mov eax, dword [edi + 4]
mov dword [esp + 0x10], eax
lea eax, [esp + 0x48]
mov dword [esp + 0x1c], eax
mov edx, dword [edi + 0xc]
test edx, edx
jle 0x4080a8
mov byte [esp + 0x48], 0x2e
lea eax, [esp + 0x49]
lea esi, [eax + 1]
mov byte [eax], 0x30
mov eax, dword [edi + 8]
mov dword [esp + 0xc], esi
mov dword [esp + 8], eax
test eax, eax
jle 0x407fcb
mov edx, dword [edi + 0xc]
mov eax, dword [esp + 0xc]
sub eax, dword [esp + 0x1c]
movsx ebx, word [esp + 0x14]
lea ecx, [eax + edx]
test edx, edx
cmovg eax, ecx
xor edx, edx
mov ecx, 0x66666667
mov dword [esp + 0x14], ebx
test dword [esp + 0x10], 0x1c0
setne dl
lea esi, [eax + edx + 5]
mov eax, ebx
imul ecx
mov eax, ebx
mov dword [esp + 0x18], esi
sar eax, 0x1f
mov ecx, edx
sar ecx, 2
sub ecx, eax
je 0x4080c0
lea esi, [esi]
mov eax, 0x66666667
add esi, 1
imul ecx
sar ecx, 0x1f
lea ebx, [esi + 2]
sub bx, word [esp + 0x18]
sar edx, 2
sub edx, ecx
mov ecx, edx
jne 0x407c00
movsx ebx, bx
mov eax, dword [esp + 8]
cmp eax, esi
jle 0x407ff8
sub eax, esi
test dword [esp + 0x10], 0x600
je 0x408058
mov dword [edi + 8], eax
test byte [esp + 0x10], 0x80
jne 0x407fe4
test dword [esp + 0x10], 0x100
jne 0x408028
test byte [esp + 0x10], 0x40
jne 0x408040
mov edx, edi
mov eax, 0x30
call fcn.00406650
mov eax, dword [edi + 4]
mov edx, edi
and eax, 0x20
or eax, 0x58
call fcn.00406650
mov eax, dword [edi + 8]
test eax, eax
jle 0x407cb1
test byte [edi + 5], 2
je 0x407cb1
sub eax, 1
mov dword [edi + 8], eax
lea esi, [esi]
nop
mov edx, edi
mov eax, 0x30
call fcn.00406650
mov eax, dword [edi + 8]
lea edx, [eax - 1]
mov dword [edi + 8], edx
test eax, eax
jg 0x407c98
mov esi, dword [esp + 0x1c]
cmp dword [esp + 0xc], esi
jbe 0x407d2c
mov eax, edi
mov esi, dword [esp + 0xc]
mov edi, ebx
mov ebx, eax
jmp 0x407ce8
movzx eax, word [ebx + 0x1c]
mov word [esp + 0x36], ax
test ax, ax
jne 0x407f90
cmp esi, dword [esp + 0x1c]
je 0x407d0a
movsx eax, byte [esi - 1]
sub esi, 1
cmp eax, 0x2e
je 0x407f10
cmp eax, 0x2c
je 0x407cd0
mov edx, ebx
call fcn.00406650
cmp esi, dword [esp + 0x1c]
jne 0x407ce8
mov eax, ebx
mov ebx, edi
mov edi, eax
mov eax, dword [edi + 0xc]
lea edx, [eax - 1]
mov dword [edi + 0xc], edx
test eax, eax
jle 0x407d39
lea esi, [esi]
mov edx, edi
mov eax, 0x30
call fcn.00406650
mov eax, dword [edi + 0xc]
lea edx, [eax - 1]
mov dword [edi + 0xc], edx
test eax, eax
jg 0x407d20
mov eax, dword [edi + 4]
mov edx, edi
and eax, 0x20
or eax, 0x50
call fcn.00406650
add dword [edi + 8], ebx
mov eax, dword [esp + 0x14]
mov ecx, edi
or dword [edi + 4], 0x1c0
cdq
call fcn.00406f30
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
ret
or dword [edi + 4], 0x80
jmp 0x407b2e
mov eax, dword [edi + 0xc]
sub word [esp + 0x14], 0x3fff
mov dword [esp + 0x1c], eax
cmp eax, 0xe
jbe 0x407dae
mov eax, dword [edi + 4]
mov dword [esp + 0x10], eax
mov eax, esi
or eax, ebx
jne 0x407e12
jmp 0x407b7c
shld esi, ebx, 1
add ebx, ebx
test esi, esi
jns 0x407da8
mov ecx, 0xe
sub ecx, dword [esp + 0x1c]
mov eax, 4
xor edx, edx
shl ecx, 2
shld edx, eax, cl
shl eax, cl
test cl, 0x20
je 0x407dd3
mov edx, eax
xor eax, eax
shrd ebx, esi, 1
shr esi, 1
add eax, ebx
adc edx, esi
test edx, edx
js 0x407f00
shld edx, eax, 1
add eax, eax
mov ecx, 0xf
sub ecx, dword [esp + 0x1c]
xor ebx, ebx
shl ecx, 2
shrd eax, edx, cl
shr edx, cl
test cl, 0x20
cmovne eax, edx
cmovne edx, ebx
mov ebx, eax
mov eax, dword [edi + 4]
mov esi, edx
mov dword [esp + 0x10], eax
mov ecx, dword [esp + 0x10]
lea eax, [esp + 0x48]
mov dword [esp + 0x18], edi
mov dword [esp + 0x1c], eax
mov edx, ecx
and ecx, 0x20
and edx, 0x800
mov byte [esp + 0xc], cl
mov dword [esp + 4], edx
jmp 0x407e65
xor ecx, ecx
cmp eax, dword [esp + 0x1c]
ja 0x407e53
mov edx, dword [esp + 0x18]
mov edi, dword [edx + 0xc]
test edi, edi
js 0x407e5b
lea edx, [ecx + 0x30]
mov byte [eax], dl
add eax, 1
mov edi, esi
or edi, ebx
je 0x407fa8
mov edi, ebx
mov edx, ebx
and edi, 0xfffffff0
and edx, 0xf
or edi, esi
je 0x407f20
mov edi, dword [esp + 0x18]
shrd ebx, esi, 4
shr esi, 4
mov ecx, dword [edi + 0xc]
test ecx, ecx
jle 0x407e8f
sub ecx, 1
mov dword [edi + 0xc], ecx
test edx, edx
je 0x407e40
mov ecx, edx
cmp edx, 9
jbe 0x407e53
add edx, 0x37
or dl, byte [esp + 0xc]
jmp 0x407e56
fstp st(0)
mov ecx, edi
mov edx, 0x40ec87
xor eax, eax
call fcn.00406900
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
ret
test esi, esi
js 0x4080d0
mov eax, 0xffffc001
lea esi, [esi]
shld esi, ebx, 1
mov edx, eax
add ebx, ebx
sub eax, 1
test esi, esi
jns 0x407ed0
mov word [esp + 0x14], dx
mov eax, dword [edi + 0xc]
mov dword [esp + 0x1c], eax
cmp eax, 0xe
jbe 0x407db2
mov eax, dword [edi + 4]
mov dword [esp + 0x10], eax
jmp 0x407e12
add word [esp + 0x14], 1
jmp 0x407deb
mov eax, ebx
call fcn.004069a0
jmp 0x407ce2
cmp eax, dword [esp + 0x1c]
ja 0x407f40
mov edi, dword [esp + 4]
test edi, edi
jne 0x407f40
mov ecx, dword [esp + 0x18]
mov ecx, dword [ecx + 0xc]
test ecx, ecx
jle 0x407f46
lea esi, [esi]
mov byte [eax], 0x2e
add eax, 1
movzx ecx, word [esp + 0x14]
mov edi, ebx
xor edi, 1
sub ecx, 1
or edi, esi
je 0x408098
mov dword [esp + 8], edx
mov edi, eax
lea esi, [esi]
shrd ebx, esi, 1
shr esi, 1
mov edx, ecx
mov eax, ebx
lea ecx, [edx - 1]
xor eax, 1
or eax, esi
jne 0x407f68
mov word [esp + 0x14], dx
mov eax, edi
mov edx, dword [esp + 8]
xor ebx, ebx
xor esi, esi
jmp 0x407e8f
mov ecx, ebx
mov edx, 1
lea eax, [esp + 0x36]
call fcn.004066b0
jmp 0x407ce2
mov esi, dword [esp + 0x1c]
mov edi, dword [esp + 0x18]
mov dword [esp + 0xc], eax
cmp eax, esi
je 0x407b84
mov eax, dword [edi + 8]
mov dword [esp + 8], eax
test eax, eax
jg 0x407bb1
movsx eax, word [esp + 0x14]
mov ebx, 2
mov dword [esp + 0x14], eax
test byte [esp + 0x10], 0x80
je 0x407c4b
mov edx, edi
mov eax, 0x2d
call fcn.00406650
jmp 0x407c64
mov dword [edi + 8], 0xffffffff
jmp 0x407c40
mov eax, edx
mov ecx, edi
mov edx, 0x40ec8b
and eax, 0x8000
call fcn.00406900
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
ret
mov edx, edi
mov eax, 0x2b
call fcn.00406650
jmp 0x407c64
mov edx, edi
mov eax, 0x20
call fcn.00406650
jmp 0x407c64
lea edx, [eax - 1]
mov dword [edi + 8], edx
test eax, eax
jle 0x407c40
lea esi, [esi]
lea esi, [esi]
mov edx, edi
mov eax, 0x20
call fcn.00406650
mov eax, dword [edi + 8]
lea edx, [eax - 1]
mov dword [edi + 8], edx
test eax, eax
jg 0x408070
mov eax, dword [edi + 4]
mov dword [esp + 0x10], eax
jmp 0x407c40
xor ebx, ebx
xor esi, esi
jmp 0x407e8f
mov eax, dword [esp + 0x1c]
test dword [esp + 0x10], 0x800
je 0x407b98
jmp 0x407b8f
mov esi, dword [esp + 0x18]
mov ebx, 2
jmp 0x407c21
mov eax, 0xffffc002
mov word [esp + 0x14], ax
jmp 0x407ee4