Function at 0x40e8fe
Capabilities:
Encode data using xor

Disassembly:
mov eax, 0x433f9d
call fcn.00433c08
sub esp, 0x468
mov eax, dword fs:[0x2c]
mov dword [ebp - 0x34], edx
push ebx
mov ebx, ecx
xor ecx, ecx
mov edx, dword [eax]
push esi
push edi
mov dword [ebp - 0x14], ebx
mov eax, dword [edx + 0x2b0]
test al, 1
jne 0x40e964
push 6
pop ecx
mov esi, 0x43d1b0
lea edi, [ebp - 0x4c]
rep movsd dword es:[edi], dword [esi]
or eax, 1
lea edi, [edx + 0x246]
xor ecx, ecx
mov dword [edx + 0x2b0], eax
mov dword [edx + 0x23c], ecx
lea esi, [ebp - 0x42]
mov dword [edx + 0x240], ecx
mov word [edx + 0x244], cx
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
cmp byte [edx + 0x245], 0
jne 0x40e982
mov ebx, ecx
lea eax, [ebx - 0x7f]
xor byte [ebx + edx + 0x246], al
inc ebx
cmp ebx, 0xc
jb 0x40e96f
mov ebx, dword [ebp - 0x14]
lea eax, [edx + 0x246]
mov byte [edx + 0x245], 1
push eax
call dword [sym.imp.KERNEL32.dll_LoadLibraryA]
mov esi, eax
mov dword [ebp - 0x18], esi
test esi, esi
je 0x40ede6
mov eax, dword fs:[0x2c]
mov edx, dword [eax]
mov eax, dword [edx + 0x3cc]
test al, 1
jne 0x40e9f3
and dword [edx + 0x64], 0
lea edi, [ebp - 0x64]
push 6
pop ecx
mov esi, 0x43d098
mov word [edx + 0x6c], 0
rep movsd dword es:[edi], dword [esi]
or eax, 1
lea edi, [edx + 0x6e]
and dword [edx + 0x68], 0
lea esi, [ebp - 0x5a]
movsd dword es:[edi], dword [esi]
mov dword [edx + 0x3cc], eax
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsw word es:[edi], word [esi]
mov esi, dword [ebp - 0x18]
cmp byte [edx + 0x6d], 0
jne 0x40ea11
xor ebx, ebx
lea eax, [ebx - 0x7e]
xor byte [ebx + edx + 0x6e], al
inc ebx
cmp ebx, 0xe
jb 0x40e9fe
mov ebx, dword [ebp - 0x14]
lea eax, [edx + 0x6e]
mov byte [edx + 0x6d], 1
push eax
push esi
call dword [sym.imp.KERNEL32.dll_GetProcAddress]
mov ecx, dword fs:[0x2c]
mov dword [ebp - 0x1c], eax
mov edx, dword [ecx]
mov ecx, dword [edx + 0x28c]
test cl, 1
jne 0x40ea7b
and dword [edx + 0x7c], 0
lea edi, [ebp - 0x68]
or ecx, 1
mov word [edx + 0x84], 0
and dword [edx + 0x80], 0
mov esi, 0x43d058
mov dword [edx + 0x28c], ecx
push 7
pop ecx
rep movsd dword es:[edi], dword [esi]
lea edi, [edx + 0x86]
lea esi, [ebp - 0x5e]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsb byte es:[edi], byte [esi]
mov esi, dword [ebp - 0x18]
cmp byte [edx + 0x85], 0
jne 0x40ea99
xor ebx, ebx
lea eax, [ebx - 0x7e]
xor byte [ebx + edx + 0x86], al
inc ebx
cmp ebx, 0x11
jb 0x40ea86
mov ebx, dword [ebp - 0x14]
lea eax, [edx + 0x86]
mov byte [edx + 0x85], 1
push eax
push esi
call dword [sym.imp.KERNEL32.dll_GetProcAddress]
mov ecx, dword fs:[0x2c]
mov dword [ebp - 0x24], eax
mov edx, dword [ecx]
mov ecx, dword [edx + 0x5c]
test cl, 1
jne 0x40eb03
and dword [edx + 0x32c], 0
lea edi, [ebp - 0x68]
or ecx, 1
mov word [edx + 0x334], 0
and dword [edx + 0x330], 0
mov esi, 0x43d108
mov dword [edx + 0x5c], ecx
push 7
pop ecx
rep movsd dword es:[edi], dword [esi]
lea edi, [edx + 0x336]
lea esi, [ebp - 0x5e]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsb byte es:[edi], byte [esi]
mov esi, dword [ebp - 0x18]
cmp byte [edx + 0x335], 0
jne 0x40eb21
xor ebx, ebx
lea eax, [ebx - 0x7d]
xor byte [ebx + edx + 0x336], al
inc ebx
cmp ebx, 0x11
jb 0x40eb0e
mov ebx, dword [ebp - 0x14]
lea eax, [edx + 0x336]
mov byte [edx + 0x335], 1
push eax
push esi
call dword [sym.imp.KERNEL32.dll_GetProcAddress]
mov ecx, dword fs:[0x2c]
mov edi, eax
mov dword [ebp - 0x28], edi
mov edx, dword [ecx]
mov ecx, dword [edx + 0x1c4]
test cl, 1
jne 0x40eb8f
and dword [edx + 0x34], 0
lea edi, [ebp - 0x6c]
or ecx, 1
mov word [edx + 0x3c], 0
and dword [edx + 0x38], 0
mov esi, 0x43d0e8
mov dword [edx + 0x1c4], ecx
push 8
pop ecx
rep movsd dword es:[edi], dword [esi]
push 5
lea edi, [edx + 0x3e]
pop ecx
lea esi, [ebp - 0x62]
rep movsd dword es:[edi], dword [esi]
mov esi, dword [ebp - 0x18]
mov edi, eax
cmp byte [edx + 0x3d], 0
jne 0x40ebad
xor ebx, ebx
lea eax, [ebx - 0x7d]
xor byte [ebx + edx + 0x3e], al
inc ebx
cmp ebx, 0x14
jb 0x40eb9a
mov ebx, dword [ebp - 0x14]
lea eax, [edx + 0x3e]
mov byte [edx + 0x3d], 1
push eax
push esi
call dword [sym.imp.KERNEL32.dll_GetProcAddress]
cmp dword [ebp - 0x1c], 0
mov dword [ebp - 0x2c], eax
je 0x40eddf
cmp dword [ebp - 0x24], 0
je 0x40eddf
test edi, edi
je 0x40eddf
test eax, eax
je 0x40eddf
mov esi, dword fs:[0x2c]
mov edx, dword [esi]
mov eax, dword [edx + 0xdc]
test al, 1
jne 0x40ec3d
and dword [edx + 0x3b0], 0
lea edi, [ebp - 0x68]
push 7
pop ecx
mov esi, 0x43ce88
mov word [edx + 0x3b8], 0
rep movsd dword es:[edi], dword [esi]
or eax, 1
lea edi, [edx + 0x3ba]
and dword [edx + 0x3b4], 0
lea esi, [ebp - 0x5e]
movsd dword es:[edi], dword [esi]
mov dword [edx + 0xdc], eax
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
mov esi, dword fs:[0x2c]
cmp byte [edx + 0x3b9], 0
jne 0x40ec5b
xor ebx, ebx
lea eax, [ebx - 0x7d]
xor byte [ebx + edx + 0x3ba], al
inc ebx
cmp ebx, 0x10
jb 0x40ec48
mov ebx, dword [ebp - 0x14]
lea eax, [edx + 0x3ba]
mov byte [edx + 0x3b9], 1
mov edx, dword [esi]
mov dword [ebp - 0x30], eax
mov eax, dword [edx + 0x2a8]
test al, 1
jne 0x40ecb2
and dword [edx + 0xc], 0
lea edi, [ebp - 0x6c]
push 8
pop ecx
mov esi, 0x43cf88
mov word [edx + 0x14], 0
rep movsd dword es:[edi], dword [esi]
push 5
or eax, 1
lea edi, [edx + 0x16]
and dword [edx + 0x10], 0
lea esi, [ebp - 0x62]
pop ecx
mov dword [edx + 0x2a8], eax
rep movsd dword es:[edi], dword [esi]
cmp byte [edx + 0x15], 0
jne 0x40ecd0
xor ebx, ebx
lea eax, [ebx - 0x7c]
xor byte [ebx + edx + 0x16], al
inc ebx
cmp ebx, 0x14
jb 0x40ecbd
mov ebx, dword [ebp - 0x14]
push 0
push 0
push 0
push 1
lea eax, [edx + 0x16]
mov byte [edx + 0x15], 1
push eax
call dword [ebp - 0x1c]
mov edx, eax
mov dword [ebp - 0x1c], edx
test edx, edx
jne 0x40ecfa
push dword [ebp - 0x18]
jmp 0x40ede0
xor eax, eax
lea edi, [ebp - 0x4c]
stosd dword es:[edi], eax
stosd dword es:[edi], eax
stosd dword es:[edi], eax
stosd dword es:[edi], eax
xor eax, eax
mov dword [ebp - 0x3c], eax
mov dword [ebp - 0x38], 0xf
mov byte [ebp - 0x4c], al
mov esi, dword [ebp - 0x30]
mov ecx, esi
mov dword [ebp - 4], eax
lea edi, [ecx + 1]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x40ed1d
mov eax, dword [ebp - 0x34]
sub ecx, edi
cmp dword [eax + 0x14], 0xf
jbe 0x40ed31
mov eax, dword [eax]
push 0
push 0x4000000
push ecx
push esi
push eax
push edx
call dword [ebp - 0x24]
mov esi, eax
test esi, esi
jne 0x40ed84
push dword [ebp - 0x1c]
mov esi, dword [ebp - 0x2c]
call esi
push dword [ebp - 0x18]
call dword [sym.imp.KERNEL32.dll_FreeLibrary]
xor eax, eax
mov edi, ebx
push 0xf
pop ecx
stosd dword es:[edi], eax
stosd dword es:[edi], eax
stosd dword es:[edi], eax
stosd dword es:[edi], eax
xor eax, eax
mov dword [ebx + 0x10], eax
mov dword [ebx + 0x14], ecx
mov byte [ebx], al
mov eax, dword [ebp - 0x38]
cmp eax, ecx
jbe 0x40edfc
inc eax
push eax
push dword [ebp - 0x4c]
call fcn.00414388
pop ecx
pop ecx
jmp 0x40edfc
mov edi, dword [ebp - 0x28]
jmp 0x40eda1
cmp dword [ebp - 0x20], 0
je 0x40edb8
push dword [ebp - 0x20]
lea eax, [ebp - 0x474]
push eax
lea ecx, [ebp - 0x4c]
call fcn.004126a8
lea eax, [ebp - 0x20]
push eax
push 0x400
lea eax, [ebp - 0x474]
push eax
push esi
call edi
test eax, eax
jne 0x40ed89
push esi
mov esi, dword [ebp - 0x2c]
call esi
push dword [ebp - 0x1c]
call esi
push dword [ebp - 0x18]
call dword [sym.imp.KERNEL32.dll_FreeLibrary]
lea eax, [ebp - 0x4c]
mov ecx, ebx
push eax
call fcn.00412702
mov eax, dword [ebp - 0x38]
cmp eax, 0xf
jmp 0x40ed70
push esi
call dword [sym.imp.KERNEL32.dll_FreeLibrary]
mov edi, ebx
xor eax, eax
stosd dword es:[edi], eax
stosd dword es:[edi], eax
stosd dword es:[edi], eax
stosd dword es:[edi], eax
xor eax, eax
mov dword [ebx + 0x10], eax
mov dword [ebx + 0x14], 0xf
mov byte [ebx], al
mov ecx, dword [ebp - 0xc]
mov eax, ebx
pop edi
pop esi
mov dword fs:[0], ecx
pop ebx
leave
ret