Function at 0x409850
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x10c
cmp dword [ecx + 0x20], 0
je 0x409cb3
mov esi, ecx
lea eax, [ecx + 0x10]
push eax
call fcn.00405f20
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 + 0xc], edx
lea eax, [edx + 0x400]
push eax
call fcn.004080f0
add esp, 4
mov dword [esp + 4], eax
mov dword [esp + 0x70], 0xede1d0ee
mov byte [esp + 0x74], 0x4a
mov eax, 0xf6
nop
movzx edx, byte [esp + eax - 0x86]
mov ebx, eax
and ebx, edx
mov edi, ebx
and edi, 2
mov ebp, ebx
or ebp, 0xfffffffd
inc ebp
mov ecx, ebx
and ecx, 0xfffffffd
imul ecx, ebp
or ebx, 2
imul ebx, edi
add ecx, edx
sub ecx, ebx
add ecx, eax
add ecx, 0xbe958f06
mov edx, ecx
and edx, 0x49
xor ecx, 0x49
lea ecx, [ecx + edx*2]
inc cl
mov byte [esp + eax - 0x86], cl
inc eax
cmp eax, 0xfb
jne 0x4098d0
lea ebx, [esp + 0x70]
mov ecx, esi
push 0x449164
push ebx
mov edi, dword [esp + 0xc]
push edi
call fcn.00409150
mov dword [esp + 0x70], 0x13767860
xor eax, eax
nop
nop
nop
mov ecx, eax
and cl, 0x6f
or cl, 0x10
xor byte [esp + eax + 0x70], cl
lea ecx, [eax + 1]
mov eax, ecx
cmp ecx, 4
jne 0x409940
lea eax, [esp + 2]
mov ecx, esi
push eax
push ebx
push edi
call fcn.00409150
mov eax, dword [str.MeHdy4__pl4vs9]
mov dword [esp + 0x70], 0x5336383c
mov ecx, 0xd0
mov ebp, 0x2f
nop
nop
nop
nop
nop
movzx edi, byte [esp + ecx - 0x60]
mov edx, ebp
xor edx, ecx
and edx, edi
xor edx, ecx
add dl, 0x80
mov byte [esp + ecx - 0x60], dl
inc ecx
dec ebp
cmp ecx, 0xd4
jne 0x409980
mov ecx, esi
push eax
push ebx
mov ebp, dword [esp + 0xc]
push ebp
call fcn.00409150
mov dword [esp + 0x70], 0xf9f2fe89
mov dword [esp + 0x74], 0x92e5f2e1
mov dword [esp + 0x78], 0xe0e3e291
mov byte [esp + 0x7c], 6
xor eax, eax
nop
nop
nop
nop
nop
mov ecx, eax
and ecx, 8
mov edx, eax
and edx, 2
mov edi, edx
xor edi, 2
imul edi, ecx
or ecx, 2
imul ecx, edx
mov edx, eax
xor edx, 0x4a
add edx, edi
add edx, ecx
xor dl, byte [esp + eax + 0x70]
add dl, 0xb0
mov byte [esp + eax + 0x70], dl
inc eax
cmp eax, 0xd
jne 0x4099d0
mov dword [esp + 0x16], 0x57e2f6f5
mov eax, 0x74b036f4
mov ecx, 0x8b4fc90c
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx edi, byte [esp + eax - 0x74b036de]
mov edx, eax
and edx, edi
add edx, edx
sub edx, edi
add edx, ecx
lea edi, [edx + edx]
and edi, 0x42
xor edx, 0x5e
sub edx, edi
add dl, 2
mov byte [esp + eax - 0x74b036de], dl
inc eax
dec ecx
cmp eax, 0x74b036f8
jne 0x409a20
lea eax, [esp + 0x16]
mov dword [esp + 0x10], esi
mov ecx, esi
push ebx
push eax
push ebp
call fcn.00409150
mov dword [esp + 0x70], 0x6f555171
mov byte [esp + 0x74], 0xcb
mov esi, 0x41493baf
mov ecx, 0xbeb6c451
nop
nop
nop
nop
nop
nop
nop
movzx ebp, byte [esp + esi - 0x41493b3f]
mov edx, ebp
and edx, 0xffffff9e
xor edx, 0xb29faa9e
mov edi, ebp
xor edi, 0xb29faa9e
or ebp, 0x61
and ebp, edi
mov edi, esi
or edi, 0xb29faa9e
add edi, ecx
mov eax, esi
and eax, 0x41401121
or eax, edi
add edx, ebp
and ebp, 0xffffff9e
sub edx, ebp
mov edi, edx
and edi, eax
add edx, eax
add edi, edi
sub edx, edi
mov eax, edx
and eax, 7
xor edx, 0x87
lea eax, [edx + eax*2]
inc al
mov byte [esp + esi - 0x41493b3f], al
inc esi
dec ecx
cmp esi, 0x41493bb4
jne 0x409a80
mov esi, dword [esp + 0x10]
mov ecx, esi
push dword [esp + 0xc]
push dword [esp + 0xc]
push ebx
mov edi, dword [esp + 0x10]
push edi
call fcn.004093d0
mov dword [esp + 0x16], 0x1fb11ddf
mov dword [esp + 0x1a], 0xe356e14e
mov dword [esp + 0x1e], 0xe748e541
mov dword [esp + 0x22], 0xeb07e95c
mov dword [esp + 0x26], 0xef57ed38
mov dword [esp + 0x2a], 0xf357f140
mov dword [esp + 0x2e], 0xf716f50e
mov dword [esp + 0x32], 0xfb4ff955
mov dword [esp + 0x36], 0xff4afd50
mov dword [esp + 0x3a], 0xc372c169
mov dword [esp + 0x3e], 0xc774c565
mov dword [esp + 0x42], 0xcb25c97c
mov dword [esp + 0x46], 0xcf61cd6a
mov dword [esp + 0x4a], 0xd37fd162
mov dword [esp + 0x4e], 0xd772d539
mov dword [esp + 0x52], 0xdb6ed979
mov dword [esp + 0x56], 0xdf25dd7d
mov dword [esp + 0x5a], 0xa300a140
mov dword [esp + 0x5e], 0xa713a50b
mov dword [esp + 0x62], 0xab0ea906
mov dword [esp + 0x66], 0xaf1cad0d
mov dword [esp + 0x6a], 0xb34fb109
mov word [esp + 0x6e], 0xb5b4
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov ecx, eax
add cl, 0xfc
xor cl, byte [esp + eax + 0x16]
add cl, 0x20
mov byte [esp + eax + 0x16], cl
inc eax
cmp eax, 0x5a
jne 0x409bc0
movzx eax, word [esp + 0x16]
test ax, ax
je 0x409c01
lea ebx, [esp + 0x70]
lea ecx, [esp + 0x18]
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 0x409bf0
mov word [ebx], 0
movzx ecx, byte [esi + 0x60]
test cl, cl
je 0x409c31
lea eax, [esi + 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 0x409c20
mov dword [ebx], 0xa000d
mov word [ebx + 4], 0
mov eax, dword [esi + 0x80]
mov dword [esp + 0x16], 0xd432d2ee
mov dword [esp + 0x1a], 0xe82ed625
mov word [esp + 0x1e], 0xeae9
xor ecx, ecx
nop
nop
nop
nop
mov edx, ecx
add dl, 0x19
xor dl, byte [esp + ecx + 0x16]
add dl, 0x38
mov byte [esp + ecx + 0x16], dl
inc ecx
cmp ecx, 0xa
jne 0x409c60
lea ecx, [esp + 0x70]
push 0x493e0
push eax
push edi
push 0
push 0
push ecx
lea eax, [esp + 0x2e]
push eax
call fcn.0040c120
add esp, 0x1c
mov ebx, eax
push edi
call fcn.00408100
add esp, 4
mov eax, dword [esi + 0x80]
add dword [esi + 4], eax
mov dword [esi + 0x80], 0
jmp 0x409cb5
mov bl, 1
mov eax, ebx
add esp, 0x10c
pop esi
pop edi
pop ebx
pop ebp
ret