Function at 0x40de80
Capabilities:
Encode data using xor
Resolve function by parsing pe exports

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x114
cmp dword [ecx + 0x20], 0
je 0x40e387
mov esi, ecx
lea eax, [ecx + 0x10]
push eax
call fcn.0040ab40
add esp, 4
mov eax, dword [esi + 0x10]
mov dword [esp + 8], eax
mov eax, dword [esi + 0x58]
mov eax, dword [eax + 0x48]
mov dword [esp + 0xc], eax
mov dword [esp + 0x78], 0xa0202724
mov word [esp + 0x7c], 0
mov byte [esp + 0x7e], 0
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
mov ecx, eax
add cl, 0x49
xor cl, byte [esp + eax + 0x78]
add cl, 0x93
mov byte [esp + eax + 0x78], cl
mov ecx, eax
and ecx, 1
xor eax, 1
lea eax, [eax + ecx*2]
cmp eax, 7
jb 0x40ded0
mov eax, dword [esp + 0x78]
push dword [eax + 0x14]
call fcn.0040d3d0
add esp, 4
call fcn.0040d3e0
mov ebx, eax
mov dword [esp + 0x14], eax
and ebx, 0xf
mov edi, 0xfffffff0
mov ebp, 0x38e38e39
nop
nop
nop
nop
nop
nop
nop
nop
nop
call fcn.0040d3e0
mov ecx, eax
imul ebp
mov eax, edx
shr eax, 0x1f
sar edx, 3
add edx, eax
shl edx, 2
lea eax, [edx + edx*8]
neg eax
movzx eax, byte [ecx + eax + str.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ]
mov byte [esi + edi + 0x70], al
inc edi
cmp ebx, edi
jne 0x40df20
mov dword [esp + 0x10], ebx
mov byte [esi + edi + 0x70], 0
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 eax, dword [esp + 8]
add eax, 0x400
push eax
call fcn.0040cc80
add esp, 4
mov dword [esp + 0x78], 0x353d0234
mov byte [esp + 0x7c], 0x88
mov dword [esp + 0x7d], 0
mov word [esp + 0x81], 0
mov edi, 0x63
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx ecx, byte [esp + edi + 0x15]
mov edx, ecx
and edx, edi
add dl, dl
sub cl, dl
movzx ecx, cl
add ecx, edi
add cl, 0x11
mov byte [esp + edi + 0x15], cl
inc edi
cmp edi, 0x6e
jne 0x40dfc0
lea edi, [esp + 0x78]
mov ecx, esi
push 0x449cbc
push edi
mov dword [esp + 0xc], eax
push eax
call fcn.0040d790
mov dword [esp + 0x78], 0x137e7880
mov byte [esp + 0x7c], 0
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx ecx, byte [esp + eax + 0x78]
mov ebp, eax
and ebp, 3
xor ebp, 0xad7fc0f3
mov edx, eax
and edx, 4
sub edx, ebp
add edx, 0xca91f6f7
mov ebp, ecx
and ebp, edx
add ebp, ebp
sub edx, ebp
add dl, cl
add dl, 0xec
mov byte [esp + eax + 0x78], dl
inc eax
cmp eax, 5
jne 0x40e010
lea eax, [esp + 2]
mov ecx, esi
push eax
push edi
push dword [esp + 0xc]
call fcn.0040d790
mov ebx, dword [str.HpOoIh___topgcr]
mov dword [esp + 0x78], 0x335e5844
mov word [esp + 0x7c], 0
xor eax, eax
xor ebp, ebp
nop
nop
mov ecx, eax
and ecx, 0x98
mov edx, ebp
xor edx, 0x33
sub edx, ecx
inc dl
xor dl, byte [edi]
add dl, 0xfc
mov byte [edi], dl
inc edi
dec ebp
add eax, 0xfffffffe
cmp ebp, 0xfffffffa
jne 0x40e070
lea edi, [esp + 0x78]
mov ecx, esi
push ebx
push edi
push dword [esp + 0xc]
call fcn.0040d790
mov dword [esp + 0x78], 0xafa4aca3
mov dword [esp + 0x7c], 0xbcb3b88b
mov dword [esp + 0x80], 0xb6b588bb
mov byte [esp + 0x84], 0x24
mov dword [esp + 0x85], 0
mov word [esp + 0x89], 0
mov eax, 0xf9dd830c
movzx ecx, byte [esp + eax + 0x6227d6c]
mov edx, eax
and edx, ecx
add edx, edx
sub ecx, edx
add ecx, eax
mov edx, ecx
not edx
and edx, 0x3d
and ecx, 0xc2
sub ecx, edx
inc cl
mov byte [esp + eax + 0x6227d6c], cl
inc eax
cmp eax, 0xf9dd831f
jne 0x40e0e0
mov dword [esp + 0x18], 0x9feafef9
mov byte [esp + 0x1c], 0
xor ebx, ebx
xor ecx, ecx
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx ebp, byte [esp + ecx + 0x18]
mov eax, ebx
and eax, 4
mov edx, ecx
xor edx, 0x9139aa1a
add edx, eax
mov eax, edx
and eax, ebp
add eax, eax
sub edx, eax
add edx, ebp
mov eax, edx
not eax
and eax, 0x83
and edx, 0x7c
sub edx, eax
inc dl
mov byte [esp + ecx + 0x18], dl
inc ecx
add ebx, 2
cmp ecx, 5
jne 0x40e130
lea eax, [esp + 0x18]
mov ecx, esi
push edi
push eax
mov ebp, dword [esp + 0xc]
push ebp
call fcn.0040d790
mov dword [esp + 0x78], 0x9e929c9a
mov byte [esp + 0x7c], 0x20
mov dword [esp + 0x7d], 0
mov dword [esp + 0x80], 0
mov eax, 9
mov ecx, 0xf6
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx edx, byte [esp + eax + 0x6f]
mov ebx, edx
not ebx
or ebx, ecx
or edx, eax
and edx, ebx
add dl, 0xd3
mov byte [esp + eax + 0x6f], dl
inc eax
dec ecx
cmp eax, 0x15
jne 0x40e1b0
mov ecx, esi
push dword [esp + 8]
push dword [esp + 0x10]
push edi
push ebp
call fcn.0040da20
mov dword [esp + 0x18], 0x3fad397f
mov dword [esp + 0x1c], 0x23b63dae
mov dword [esp + 0x20], 0x27b42185
mov dword [esp + 0x24], 0x2b4725b0
mov dword [esp + 0x28], 0x2fb7299c
mov dword [esp + 0x2c], 0x13b72dbc
mov dword [esp + 0x30], 0x1776114e
mov dword [esp + 0x34], 0x1b8f15b9
mov dword [esp + 0x38], 0x1f8a19b4
mov dword [esp + 0x3c], 0x3921db5
mov dword [esp + 0x40], 0x79001a1
mov dword [esp + 0x44], 0xb590590
mov dword [esp + 0x48], 0xf9d09a2
mov dword [esp + 0x4c], 0x73df0d9a
mov dword [esp + 0x50], 0x77d2711d
mov dword [esp + 0x54], 0x7bee75d5
mov dword [esp + 0x58], 0x7f2179d9
mov dword [esp + 0x5c], 0x63c47d1c
mov dword [esp + 0x60], 0x67f361f3
mov dword [esp + 0x64], 0x6bce65f6
mov dword [esp + 0x68], 0x6ff869c9
mov dword [esp + 0x6c], 0x530f6df5
mov word [esp + 0x70], 0x5150
mov byte [esp + 0x76], 0
mov dword [esp + 0x72], 0
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov ecx, eax
add cl, 0x8a
xor cl, byte [esp + eax + 0x18]
add cl, 0x4e
mov byte [esp + eax + 0x18], cl
inc eax
cmp eax, 0x5f
jne 0x40e2b0
movzx eax, word [esp + 0x18]
test ax, ax
mov edx, dword [esp + 0x14]
mov ebx, dword [esp + 0x10]
je 0x40e2f1
lea edi, [esp + 0x78]
lea ecx, [esp + 0x1a]
mov word [edi], ax
add edi, 2
movzx eax, word [ecx]
add ecx, 2
test ax, ax
jne 0x40e2e0
mov word [edi], 0
and edx, 7
mov ebp, edx
sub ebx, edx
lea edx, [ebx*2 + 0x20]
xor eax, eax
xor ecx, ecx
nop
nop
nop
nop
nop
nop
nop
nop
movsx ebx, byte [esi + ecx + 0x60]
mov word [edi + eax], bx
movsx ebx, byte [esi + ecx + 0x61]
mov word [edi + eax + 2], bx
movsx ebx, byte [esi + ecx + 0x62]
mov word [edi + eax + 4], bx
movsx ebx, byte [esi + ecx + 0x63]
mov word [edi + eax + 6], bx
movsx ebx, byte [esi + ecx + 0x64]
mov word [edi + eax + 8], bx
movsx ebx, byte [esi + ecx + 0x65]
mov word [edi + eax + 0xa], bx
movsx ebx, byte [esi + ecx + 0x66]
mov word [edi + eax + 0xc], bx
movsx ebx, byte [esi + ecx + 0x67]
mov word [edi + eax + 0xe], bx
add ecx, 8
add eax, 0x10
cmp edx, eax
jne 0x40e310
test ebp, ebp
je 0x40e38e
neg eax
nop
movsx edx, byte [esi + ecx + 0x60]
mov word [edi + ecx*2], dx
inc ecx
add eax, 0xfffffffe
dec ebp
jne 0x40e370
sub edi, eax
lea ecx, [edi - 2]
jmp 0x40e396
mov bl, 1
jmp 0x40e442
lea ecx, [edi + eax]
add ecx, 0xfffffffe
add edi, eax
mov word [edi], 0xd
mov dword [ecx + 4], 0xa
mov eax, dword [esi + 0x80]
mov dword [esp + 0x18], 0x19b51bed
mov dword [esp + 0x1c], 0xe551e7a8
mov word [esp + 0x20], 0xe3e4
mov dword [esp + 0x22], 0
xor ecx, ecx
mov ebp, dword [esp + 4]
nop
nop
nop
movzx edx, byte [esp + ecx + 0x18]
mov edi, ecx
and edi, 0xb
mov ebx, ecx
or ebx, 0x349fb27b
add ebx, edi
mov edi, edx
and edi, ebx
add edi, edi
sub ebx, edi
add bl, dl
add bl, 0x99
mov byte [esp + ecx + 0x18], bl
inc ecx
cmp ecx, 0xe
jne 0x40e3d0
lea ecx, [esp + 0x78]
push 0x493e0
push eax
push ebp
push 0
push 0
push ecx
lea eax, [esp + 0x30]
push eax
call fcn.00410490
add esp, 0x1c
mov ebx, eax
push ebp
call fcn.0040cc90
add esp, 4
mov eax, dword [esi + 4]
mov ecx, dword [esi + 0x80]
mov edx, eax
and edx, ecx
xor eax, ecx
lea eax, [eax + edx*2]
mov dword [esi + 4], eax
mov dword [esi + 0x80], 0
mov eax, ebx
add esp, 0x114
pop esi
pop edi
pop ebx
pop ebp
ret