Function at 0x403710
Capabilities:
Encode data using xor

Disassembly:
sub esp, 0x178
mov eax, dword [0x415c8c]
mov ecx, dword [0x415c90]
mov edx, dword [0x415c94]
mov dword [esp + 4], eax
cmp byte [esp + 4], 0
mov al, byte [0x415c98]
mov byte [esp + 0x10], al
mov dword [esp + 8], ecx
mov dword [esp + 0xc], edx
lea eax, [esp + 4]
je 0x40375b
mov ecx, eax
lea esp, [esp]
xor byte [eax], 0xf
inc ecx
cmp byte [ecx], 0
mov eax, ecx
jne 0x403750
push ebx
mov ebx, dword [sym.imp.KERNEL32.dll_LoadLibraryA]
push ebp
push esi
push edi
lea ecx, [esp + 0x14]
push ecx
call ebx
mov edx, dword [0x415fcc]
mov ecx, dword [0x415fd0]
mov dword [esp + 0x14], edx
cmp byte [esp + 0x14], 0
mov edx, dword [0x415fd4]
mov dword [esp + 0x18], ecx
mov ecx, dword [0x415fd8]
mov dword [esp + 0x1c], edx
mov dl, byte [0x415fdc]
mov dword [esp + 0x20], ecx
mov ebp, 0x20141104
mov dword [esp + 0x10], 0x100
mov byte [esp + 0x24], dl
lea ecx, [esp + 0x14]
je 0x4037c3
mov edx, ecx
xor byte [ecx], 0xf
inc edx
cmp byte [edx], 0
mov ecx, edx
jne 0x4037b8
mov edi, dword [sym.imp.KERNEL32.dll_GetProcAddress]
lea ecx, [esp + 0x14]
push ecx
push eax
call edi
mov edx, dword [0x415fe0]
mov ecx, dword [0x415fe8]
mov esi, eax
mov eax, dword [0x415fe4]
mov dword [esp + 0x14], edx
cmp byte [esp + 0x14], 0
mov dl, byte [0x415fec]
mov dword [esp + 0x18], eax
mov dword [esp + 0x1c], ecx
mov byte [esp + 0x20], dl
lea eax, [esp + 0x14]
je 0x403812
mov ecx, eax
xor byte [eax], 0xf
inc ecx
cmp byte [ecx], 0
mov eax, ecx
jne 0x403807
lea eax, [esp + 0x14]
push eax
call ebx
mov ecx, dword [0x415ff0]
mov edx, dword [0x415ff4]
mov dword [esp + 0x14], ecx
cmp byte [esp + 0x14], 0
mov ecx, dword [0x415ff8]
mov dword [esp + 0x18], edx
mov edx, dword [0x415ffc]
mov dword [esp + 0x1c], ecx
mov dword [esp + 0x20], edx
lea ecx, [esp + 0x14]
je 0x40385b
mov edx, ecx
mov edi, edi
xor byte [ecx], 0xf
inc edx
cmp byte [edx], 0
mov ecx, edx
jne 0x403850
lea ecx, [esp + 0x14]
push ecx
push eax
call edi
mov edi, eax
test esi, esi
je 0x403a11
test edi, edi
je 0x403a11
lea edx, [esp + 0x10]
push edx
lea eax, [esp + 0x8c]
push eax
call esi
push 0x288
mov dword [esp + 0x14], 0x288
call fcn.004066aa
mov esi, eax
add esp, 4
test esi, esi
je 0x403a11
lea ecx, [esp + 0x10]
push ecx
push esi
call edi
mov edx, dword [esp + 0x10]
push edx
push esi
call fcn.00406c0d
mov esi, eax
add esp, 8
lea eax, [esp + 0x10]
push eax
push esi
mov ebx, esi
call edi
test eax, eax
jne 0x403a11
test esi, esi
je 0x4039ac
xor edi, edi
cmp dword [esi + 0x190], edi
jbe 0x403951
nop
lea eax, [esp + 0x88]
lea edx, [eax + 1]
lea ebx, [ebx]
mov cl, byte [eax]
inc eax
test cl, cl
jne 0x4038f0
sub eax, edx
cmp eax, 0xe6
ja 0x403951
lea eax, [esp + 0x88]
lea edx, [eax + 1]
lea ebx, [ebx]
mov cl, byte [eax]
inc eax
test cl, cl
jne 0x403910
movzx ecx, byte [esi + edi + 0x194]
push ecx
sub eax, edx
lea edx, [esp + eax + 0x8c]
push 0x416000
push edx
call fcn.004061fd
mov al, byte [esi + edi + 0x194]
add esp, 0xc
test al, al
je 0x403948
movzx eax, al
imul ebp, eax
inc edi
cmp edi, dword [esi + 0x190]
jb 0x4038e0
lea eax, [esp + 0x88]
lea edx, [eax + 1]
jmp 0x403960
mov cl, byte [eax]
inc eax
test cl, cl
jne 0x403960
sub eax, edx
cmp eax, 0xe6
ja 0x4039ac
lea eax, [esp + 0x88]
lea edx, [eax + 1]
lea ebx, [ebx]
mov cl, byte [eax]
inc eax
test cl, cl
jne 0x403980
lea ecx, [esi + 8]
push ecx
sub eax, edx
lea edx, [esp + eax + 0x8c]
push 0x416008
push edx
call fcn.004061fd
mov esi, dword [esi]
add esp, 0xc
test esi, esi
jne 0x4038d5
push ebx
call fcn.004065cd
lea eax, [esp + 0x8c]
add esp, 4
lea edx, [eax + 1]
nop
mov cl, byte [eax]
inc eax
test cl, cl
jne 0x4039c0
sub eax, edx
mov ecx, eax
lea eax, [esp + 0x78]
push eax
mov eax, ebp
lea edi, [esp + 0x8c]
call fcn.00403680
add esp, 4
lea eax, [esp + 0x78]
call fcn.00401080
xor edi, edi
mov esi, 0x419ff8
movzx ecx, byte [esp + edi + 0x78]
push ecx
push 0x416000
push esi
call fcn.004061fd
add esi, 2
add esp, 0xc
inc edi
cmp esi, 0x41a018
jl 0x4039f1
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x178
ret