Function at 0x412685
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff8
sub esp, 0x140
mov dword [esp + 0x50], 0x49af
mov byte [esp + 0x54], 0
mov dword [esp + 8], 0
mov eax, dword [esp + 8]
cmp eax, 4
ja 0x412461
nop
nop
nop
mov eax, dword [esp + 8]
mov ecx, dword [esp + 8]
movzx ecx, byte [esp + ecx + 0x50]
mov edx, eax
xor edx, 0x24c60a92
and eax, 0x24c60a92
lea edx, [edx + eax*2]
lea eax, [edx + ecx]
mov esi, ecx
not esi
or esi, edx
lea edx, [ecx + esi]
add ecx, esi
inc ecx
mov esi, eax
not esi
and esi, ecx
not ecx
and ecx, eax
lea eax, [esi + edx]
inc eax
sub ecx, eax
mov dword [esp + 0xb8], ecx
mov eax, dword [esp + 0xb8]
add al, 0x26
mov ecx, dword [esp + 8]
mov byte [esp + ecx + 0x50], al
inc dword [esp + 8]
mov eax, dword [esp + 8]
cmp eax, 5
jb 0x412400
lea eax, [esp + 0x50]
push eax
push dword [ebp + 8]
call fcn.004046a0
add esp, 8
mov esi, eax
xor ecx, ecx
test eax, eax
sete cl
xor edi, edi
xor eax, eax
jmp dword [ecx*4 + 0x448624]
mov dword [esp + 0x30], esi
jmp 0x4124a8
mov edi, dword [esp + 0x128]
inc edi
push esi
call fcn.004048b0
add esp, 4
xor ecx, ecx
cmp edi, eax
setb cl
mov al, 1
jmp dword [ecx*4 + 0x44862c]
mov dword [esp + 0x128], edi
push edi
push esi
call fcn.004048c0
add esp, 8
mov ebx, eax
mov word [esp + 0x50], 0x3f48
mov dword [esp + 0x52], 0
mov byte [esp + 0x56], 0
mov dword [esp + 8], 0
mov eax, dword [esp + 8]
cmp eax, 6
ja 0x412551
nop
nop
nop
nop
nop
nop
nop
mov eax, dword [esp + 8]
mov ecx, dword [esp + 8]
movzx ecx, byte [esp + ecx + 0x50]
mov edx, eax
xor edx, 0x1f44bbb5
and eax, 0x1f44bbb5
lea eax, [edx + eax*2]
xor eax, ecx
mov dword [esp + 0xb8], eax
mov eax, dword [esp + 0xb8]
mov ecx, eax
xor ecx, 0x89
and eax, 0x76
add eax, eax
sub eax, ecx
mov ecx, dword [esp + 8]
mov byte [esp + ecx + 0x50], al
inc dword [esp + 8]
mov eax, dword [esp + 8]
cmp eax, 7
jb 0x412500
push 3
lea eax, [esp + 0x54]
push eax
push ebx
call fcn.00404850
add esp, 0xc
xor ecx, ecx
test eax, eax
sete cl
jmp dword [ecx*4 + 0x448634]
mov word [esp + 0x50], 0x9f08
lea eax, [esp + 0x52]
mov byte [eax + 2], 0
mov word [eax], 0
mov dword [esp + 8], 0
mov eax, dword [esp + 8]
cmp eax, 4
ja 0x412602
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov eax, dword [esp + 8]
mov ecx, dword [esp + 8]
movzx ecx, byte [esp + ecx + 0x50]
mov edx, eax
not edx
or edx, 0x7069e625
add edx, eax
xor eax, 0xf069e625
lea esi, [eax + edx*2]
lea eax, [eax + edx*2]
add eax, 2
lea edx, [ecx + esi]
add edx, 2
and eax, ecx
mov ecx, edx
not ecx
and ecx, eax
add ecx, eax
not eax
and eax, edx
sub eax, ecx
mov dword [esp + 0xb8], eax
mov eax, dword [esp + 0xb8]
add al, 0x47
mov ecx, dword [esp + 8]
mov byte [esp + ecx + 0x50], al
inc dword [esp + 8]
mov eax, dword [esp + 8]
cmp eax, 5
jb 0x4125a0
lea eax, [esp + 0x50]
push eax
push ebx
call fcn.00404630
add esp, 8
jmp dword [0x448640]
fnstcw word [esp + 0x4e]
movzx eax, word [esp + 0x4e]
or eax, 0xc00
mov word [esp + 0x106], ax
fldcw word [esp + 0x106]
fist dword [esp + 0x118]
fldcw word [esp + 0x4e]
mov eax, dword [esp + 0x118]
jmp dword [0x448648]
fnstcw word [esp + 0x4e]
movzx eax, word [esp + 0x4e]
or eax, 0xc00
mov word [esp + 0x106], ax
fldcw word [esp + 0x106]
fist dword [esp + 0x118]
fldcw word [esp + 0x4e]
mov eax, dword [esp + 0x118]
jmp dword [0x448648]
fstp st(0)
xor ecx, ecx
cmp eax, 2
setl cl
jmp dword [ecx*4 + 0x44864c]
xor ecx, ecx
cmp eax, 3
setl cl
jmp dword [ecx*4 + 0x448654]
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret