Function at 0x414070
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 0x414428
fld st(0)
fstp xword [esp + 0x20]
movzx edx, word [esp + 0x28]
test dx, dx
js 0x4142f0
fxam
wait
fnstsw ax
fstp st(0)
and ax, 0x4500
cmp ax, 0x500
je 0x414588
and dx, 0x7fff
mov ebx, dword [esp + 0x38]
mov esi, dword [esp + 0x3c]
mov word [esp + 0x14], dx
jne 0x414300
mov eax, esi
or eax, ebx
jne 0x414440
mov eax, dword [edi + 0xc]
mov dword [esp + 0x1c], eax
cmp eax, 0xe
jbe 0x414328
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 0x414628
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 0x41454b
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 0x414640
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 0x414180
movsx ebx, bx
mov eax, dword [esp + 8]
cmp eax, esi
jle 0x414578
sub eax, esi
test dword [esp + 0x10], 0x600
je 0x4145d8
mov dword [edi + 8], eax
test byte [esp + 0x10], 0x80
jne 0x414564
test dword [esp + 0x10], 0x100
jne 0x4145a8
test byte [esp + 0x10], 0x40
jne 0x4145c0
mov edx, edi
mov eax, 0x30
call fcn.00412bd0
mov eax, dword [edi + 4]
mov edx, edi
and eax, 0x20
or eax, 0x58
call fcn.00412bd0
mov eax, dword [edi + 8]
test eax, eax
jle 0x414231
test byte [edi + 5], 2
je 0x414231
sub eax, 1
mov dword [edi + 8], eax
lea esi, [esi]
nop
mov edx, edi
mov eax, 0x30
call fcn.00412bd0
mov eax, dword [edi + 8]
lea edx, [eax - 1]
mov dword [edi + 8], edx
test eax, eax
jg 0x414218
mov esi, dword [esp + 0x1c]
cmp dword [esp + 0xc], esi
jbe 0x4142ac
mov eax, edi
mov esi, dword [esp + 0xc]
mov edi, ebx
mov ebx, eax
jmp 0x414268
movzx eax, word [ebx + 0x1c]
mov word [esp + 0x36], ax
test ax, ax
jne 0x414510
cmp esi, dword [esp + 0x1c]
je 0x41428a
movsx eax, byte [esi - 1]
sub esi, 1
cmp eax, 0x2e
je 0x414490
cmp eax, 0x2c
je 0x414250
mov edx, ebx
call fcn.00412bd0
cmp esi, dword [esp + 0x1c]
jne 0x414268
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 0x4142b9
lea esi, [esi]
mov edx, edi
mov eax, 0x30
call fcn.00412bd0
mov eax, dword [edi + 0xc]
lea edx, [eax - 1]
mov dword [edi + 0xc], edx
test eax, eax
jg 0x4142a0
mov eax, dword [edi + 4]
mov edx, edi
and eax, 0x20
or eax, 0x50
call fcn.00412bd0
add dword [edi + 8], ebx
mov eax, dword [esp + 0x14]
mov ecx, edi
or dword [edi + 4], 0x1c0
cdq
call fcn.004134b0
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
ret
or dword [edi + 4], 0x80
jmp 0x4140ae
mov eax, dword [edi + 0xc]
sub word [esp + 0x14], 0x3fff
mov dword [esp + 0x1c], eax
cmp eax, 0xe
jbe 0x41432e
mov eax, dword [edi + 4]
mov dword [esp + 0x10], eax
mov eax, esi
or eax, ebx
jne 0x414392
jmp 0x4140fc
shld esi, ebx, 1
add ebx, ebx
test esi, esi
jns 0x414328
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 0x414353
mov edx, eax
xor eax, eax
shrd ebx, esi, 1
shr esi, 1
add eax, ebx
adc edx, esi
test edx, edx
js 0x414480
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 0x4143e5
xor ecx, ecx
cmp eax, dword [esp + 0x1c]
ja 0x4143d3
mov edx, dword [esp + 0x18]
mov edi, dword [edx + 0xc]
test edi, edi
js 0x4143db
lea edx, [ecx + 0x30]
mov byte [eax], dl
add eax, 1
mov edi, esi
or edi, ebx
je 0x414528
mov edi, ebx
mov edx, ebx
and edi, 0xfffffff0
and edx, 0xf
or edi, esi
je 0x4144a0
mov edi, dword [esp + 0x18]
shrd ebx, esi, 4
shr esi, 4
mov ecx, dword [edi + 0xc]
test ecx, ecx
jle 0x41440f
sub ecx, 1
mov dword [edi + 0xc], ecx
test edx, edx
je 0x4143c0
mov ecx, edx
cmp edx, 9
jbe 0x4143d3
add edx, 0x37
or dl, byte [esp + 0xc]
jmp 0x4143d6
fstp st(0)
mov ecx, edi
mov edx, 0x4f7747
xor eax, eax
call fcn.00412e80
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
ret
test esi, esi
js 0x414650
mov eax, 0xffffc001
lea esi, [esi]
shld esi, ebx, 1
mov edx, eax
add ebx, ebx
sub eax, 1
test esi, esi
jns 0x414450
mov word [esp + 0x14], dx
mov eax, dword [edi + 0xc]
mov dword [esp + 0x1c], eax
cmp eax, 0xe
jbe 0x414332
mov eax, dword [edi + 4]
mov dword [esp + 0x10], eax
jmp 0x414392
add word [esp + 0x14], 1
jmp 0x41436b
mov eax, ebx
call fcn.00412f20
jmp 0x414262
cmp eax, dword [esp + 0x1c]
ja 0x4144c0
mov edi, dword [esp + 4]
test edi, edi
jne 0x4144c0
mov ecx, dword [esp + 0x18]
mov ecx, dword [ecx + 0xc]
test ecx, ecx
jle 0x4144c6
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 0x414618
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 0x4144e8
mov word [esp + 0x14], dx
mov eax, edi
mov edx, dword [esp + 8]
xor ebx, ebx
xor esi, esi
jmp 0x41440f
mov ecx, ebx
mov edx, 1
lea eax, [esp + 0x36]
call fcn.00412c30
jmp 0x414262
mov esi, dword [esp + 0x1c]
mov edi, dword [esp + 0x18]
mov dword [esp + 0xc], eax
cmp eax, esi
je 0x414104
mov eax, dword [edi + 8]
mov dword [esp + 8], eax
test eax, eax
jg 0x414131
movsx eax, word [esp + 0x14]
mov ebx, 2
mov dword [esp + 0x14], eax
test byte [esp + 0x10], 0x80
je 0x4141cb
mov edx, edi
mov eax, 0x2d
call fcn.00412bd0
jmp 0x4141e4
mov dword [edi + 8], 0xffffffff
jmp 0x4141c0
mov eax, edx
mov ecx, edi
mov edx, 0x4f774b
and eax, 0x8000
call fcn.00412e80
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
ret
mov edx, edi
mov eax, 0x2b
call fcn.00412bd0
jmp 0x4141e4
mov edx, edi
mov eax, 0x20
call fcn.00412bd0
jmp 0x4141e4
lea edx, [eax - 1]
mov dword [edi + 8], edx
test eax, eax
jle 0x4141c0
lea esi, [esi]
lea esi, [esi]
mov edx, edi
mov eax, 0x20
call fcn.00412bd0
mov eax, dword [edi + 8]
lea edx, [eax - 1]
mov dword [edi + 8], edx
test eax, eax
jg 0x4145f0
mov eax, dword [edi + 4]
mov dword [esp + 0x10], eax
jmp 0x4141c0
xor ebx, ebx
xor esi, esi
jmp 0x41440f
mov eax, dword [esp + 0x1c]
test dword [esp + 0x10], 0x800
je 0x414118
jmp 0x41410f
mov esi, dword [esp + 0x18]
mov ebx, 2
jmp 0x4141a1
mov eax, 0xffffc002
mov word [esp + 0x14], ax
jmp 0x414464