Function at 0x409890
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x28
mov edi, 1
mov ebx, 2
xor edx, edx
mov eax, dword [esp + 0x3c]
jmp 0x4098b3
inc edi
inc ebx
inc edx
mov ch, byte [eax + edx]
movzx esi, ch
lea ebp, [esi - 9]
cmp ebp, 5
jb 0x4098b0
cmp esi, 0x20
je 0x4098b0
mov byte [esp + 3], ch
add ch, 0xd5
test ch, 0xfd
mov ecx, 0
sete cl
add ecx, eax
mov dword [esp + 8], ecx
xor ecx, ecx
mov esi, 0xffffffff
jmp 0x4098f9
mov ebp, esi
mov ecx, dword [esp + 4]
inc ecx
mov esi, ebp
mov ebp, dword [esp + 8]
mov dword [esp + 4], ecx
add ecx, ebp
movzx eax, byte [edi + ecx - 1]
lea ebp, [eax - 0x30]
cmp ebp, 0xa
jb 0x4098f0
mov dword [esp + 0x18], eax
cmp eax, 0x2e
jne 0x409921
mov ebp, dword [esp + 4]
test esi, esi
js 0x4098f2
mov dword [esp + 0x10], ecx
xor eax, eax
test esi, esi
setns ch
jns 0x409932
mov esi, dword [esp + 4]
add edx, dword [esp + 8]
mov al, ch
mov ecx, dword [esp + 4]
mov ebp, eax
sub ecx, eax
cmp ecx, 0x10
mov eax, dword [esp + 0x3c]
jl 0x409957
add esi, 0xfffffff1
mov ecx, 0xf
mov dword [esp + 0xc], esi
jmp 0x409976
test ecx, ecx
je 0x4099ad
neg ebp
mov eax, dword [esp + 4]
not eax
sub eax, ebp
and eax, esi
add eax, eax
xor esi, ecx
sub eax, esi
mov dword [esp + 0xc], eax
cmp ecx, 9
jle 0x4099ea
mov esi, dword [esp + 8]
lea ebp, [esi + edi]
movzx eax, byte [esi + edi - 1]
cmp al, 0x2e
jne 0x40998d
movzx eax, byte [ebp]
lea ebp, [esi + ebx]
movsx esi, al
add esi, 0xffffffd0
cmp ecx, 0xb
jb 0x409a7b
movzx eax, byte [ebp]
cmp al, 0x2e
jne 0x4099c3
movzx eax, byte [ebp + 1]
add ebp, 2
jmp 0x4099c4
mov edx, dword [esp + 0x40]
test edx, edx
movzx ecx, byte [esp + 3]
je 0x4099bc
mov dword [edx], eax
fldz
jmp 0x409c08
inc ebp
lea esi, [esi + esi*4]
movsx eax, al
lea esi, [eax + esi*2]
add esi, 0xffffffd0
cmp ecx, 0xb
je 0x409a7b
movzx eax, byte [ebp]
cmp al, 0x2e
jne 0x409a05
movzx eax, byte [ebp + 1]
add ebp, 2
jmp 0x409a06
fldz
mov ebp, edx
fld st(0)
test ecx, ecx
mov esi, dword [esp + 0x18]
mov eax, dword [esp + 0x10]
jg 0x409a8a
jmp 0x409af7
inc ebp
lea esi, [esi + esi*4]
movsx eax, al
lea esi, [eax + esi*2]
add esi, 0xffffffd0
cmp ecx, 0xd
jb 0x409a7b
movzx eax, byte [ebp]
cmp al, 0x2e
jne 0x409a28
movzx eax, byte [ebp + 1]
add ebp, 2
jmp 0x409a29
inc ebp
lea esi, [esi + esi*4]
movsx eax, al
lea esi, [eax + esi*2]
add esi, 0xffffffd0
cmp ecx, 0xd
je 0x409a7b
movzx eax, byte [ebp]
cmp al, 0x2e
jne 0x409a4b
movzx eax, byte [ebp + 1]
add ebp, 2
jmp 0x409a4c
inc ebp
lea esi, [esi + esi*4]
movsx eax, al
lea esi, [eax + esi*2]
add esi, 0xffffffd0
cmp ecx, 0xf
jb 0x409a7b
movzx eax, byte [ebp]
cmp al, 0x2e
jne 0x409a6e
movzx eax, byte [ebp + 1]
add ebp, 2
jmp 0x409a6f
inc ebp
lea esi, [esi + esi*4]
movsx eax, al
lea esi, [eax + esi*2]
add esi, 0xffffffd0
mov dword [esp + 0x24], esi
mov ecx, 9
fild dword [esp + 0x24]
fldz
fstp st(0)
inc ecx
xor eax, eax
jmp 0x409adc
mov ch, byte [ebp + 1]
add ebp, 2
mov dword [esp + 0x14], ebp
mov esi, eax
and esi, 0xfffffff5
mov ebp, eax
and ebp, 0xa
or eax, 0xa
imul eax, ebp
xor ebp, 0xa
imul ebp, esi
movsx esi, ch
add eax, ebp
add eax, esi
add eax, 0xffffffd0
mov ecx, dword [esp + 0x1c]
dec ecx
cmp ecx, 1
mov esi, dword [esp + 0x18]
mov ebp, dword [esp + 0x14]
jle 0x409aeb
mov dword [esp + 0x1c], ecx
mov ch, byte [ebp]
cmp ch, 0x2e
je 0x409aa0
inc ebp
jmp 0x409aa6
mov dword [esp + 0x20], eax
fild dword [esp + 0x20]
mov eax, dword [esp + 0x10]
fxch st(1)
fmul dword [str._knN]
faddp st(1)
or esi, 0x20
cmp esi, 0x65
jne 0x409b1c
mov ch, byte [edi + eax]
mov al, ch
add al, 0xd5
test al, 0xfd
je 0x409b24
mov eax, dword [esp + 8]
add eax, edi
jmp 0x409b2a
add edx, dword [esp + 4]
xor ebp, ebp
jmp 0x409b87
mov eax, dword [esp + 8]
add eax, ebx
mov esi, dword [esp + 4]
lea edx, [eax + esi]
movzx ebx, byte [eax + esi]
lea esi, [ebx - 0x30]
xor ebp, ebp
cmp esi, 9
ja 0x409b80
xor ebp, ebp
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov esi, ebp
and esi, 0xfffffff5
mov edi, ebp
and edi, 0xa
or ebp, 0xa
imul ebp, edi
xor edi, 0xa
imul edi, esi
movsx esi, bl
add esi, ebp
lea ebp, [edi + esi]
add ebp, 0xffffffd0
movzx ebx, byte [edx + 1]
inc edx
mov esi, ebx
add esi, 0xffffffd0
cmp esi, 0xa
jb 0x409b50
cmp ch, 0x2d
jne 0x409b87
neg ebp
movzx ecx, byte [esp + 3]
add ebp, dword [esp + 0xc]
mov esi, ebp
sar esi, 0x1f
mov eax, ebp
xor eax, esi
sub eax, esi
cmp eax, 0x200
jl 0x409bb9
mov eax, 0x1ff
mov esi, dword [esp + 0x44]
test esi, esi
je 0x409bb5
mov dword [esi], 0x22
fldz
jmp 0x409bbf
fld1
test ebp, ebp
je 0x409be6
fstp st(0)
fld1
mov esi, 0x43b2d0
jmp 0x409bde
mov ebx, eax
sar ebx, 1
add esi, 8
cmp eax, 2
mov eax, ebx
jb 0x409be6
test al, 1
je 0x409bd0
fmul qword [esi]
jmp 0x409bd0
fld st(1)
fmul st(1)
test ebp, ebp
jns 0x409bfa
fstp st(0)
fdivp st(1)
fldz
fldz
fxch st(1)
fxch st(2)
fstp st(2)
fstp st(0)
mov eax, dword [esp + 0x40]
test eax, eax
je 0x409c08
mov dword [eax], edx
fld st(0)
fchs
cmp cl, 0x2d
je 0x409c17
fstp st(0)
fldz
fxch st(1)
fstp st(1)
add esp, 0x28
pop esi
pop edi
pop ebx
pop ebp
ret