Function at 0x4016d0
Capabilities:
Create process on windows
Download url
Get common file path
Print debug messages
Receive data

Disassembly:
push ebp
mov ebp, esp
mov eax, 0x4bb8
call fcn.0041b730
mov eax, dword [0x426030]
xor eax, ebp
mov dword [ebp - 8], eax
push esi
push edi
push 0x4232ac
push 0
push 0x1f0001
call dword [sym.imp.KERNEL32.dll_OpenMutexW]
test eax, eax
je 0x401708
xor eax, eax
jmp 0x401ca0
push str.GFUpdate
push 1
push 0
call dword [sym.imp.KERNEL32.dll_CreateMutexW]
push str.IGP_Object
push 0
push 0x1f0001
call dword [sym.imp.KERNEL32.dll_OpenMutexW]
test eax, eax
je 0x401734
xor eax, eax
jmp 0x401ca0
xor eax, eax
mov word [ebp - 0x1008], ax
push 0xffe
push 0
lea ecx, [ebp - 0x1006]
push ecx
call fcn.004104c0
add esp, 0xc
mov byte [ebp - 0x2b68], 0
push 0x7ff
push 0
lea edx, [ebp - 0x2b67]
push edx
call fcn.004104c0
add esp, 0xc
mov byte [ebp - 0x1b08], 0
push 0x7ff
push 0
lea eax, [ebp - 0x1b07]
push eax
call fcn.004104c0
add esp, 0xc
lea ecx, [ebp - 0x1008]
push ecx
push 0x800
call dword [sym.imp.KERNEL32.dll_GetCurrentDirectoryW]
lea edx, [ebp - 0x2b68]
push edx
push 0x800
call dword [sym.imp.KERNEL32.dll_GetCurrentDirectoryA]
lea eax, [ebp - 0x2b68]
push eax
push str._sConfig.dat
lea ecx, [ebp - 0x1b08]
push ecx
call fcn.0040f27a
add esp, 0xc
lea edx, [ebp - 0x1008]
add edx, 0xfffffffe
mov dword [ebp - 0x4bac], edx
mov eax, dword [ebp - 0x4bac]
mov cx, word [eax + 2]
mov word [ebp - 0x4bae], cx
add dword [ebp - 0x4bac], 2
cmp word [ebp - 0x4bae], 0
jne 0x4017db
mov edi, dword [ebp - 0x4bac]
mov ecx, 7
mov esi, 0x4232fc
rep movsd dword es:[edi], dword [esi]
lea edx, [ebp - 0x2b68]
add edx, 0xffffffff
mov dword [ebp - 0x4bb4], edx
mov eax, dword [ebp - 0x4bb4]
mov cl, byte [eax + 1]
mov byte [ebp - 0x4bb5], cl
add dword [ebp - 0x4bb4], 1
cmp byte [ebp - 0x4bb5], 0
jne 0x40181e
mov edi, dword [ebp - 0x4bb4]
mov edx, dword [str.GFConfig.dat]
mov dword [edi], edx
mov eax, dword [0x42331c]
mov dword [edi + 4], eax
mov ecx, dword [0x423320]
mov dword [edi + 8], ecx
mov dx, word [0x423324]
mov word [edi + 0xc], dx
lea ecx, [ebp - 0x11d8]
call fcn.00401e20
lea ecx, [ebp - 0x1b68]
call fcn.00401e20
lea ecx, [ebp - 0x1068]
call fcn.00401e20
lea ecx, [ebp - 0x11b0]
call fcn.00404600
lea eax, [ebp - 0x1008]
push eax
lea ecx, [ebp - 0x11b0]
call fcn.00404650
test eax, eax
jne 0x4018f7
push str.gf_main_cfg_error_
call dword [sym.imp.KERNEL32.dll_OutputDebugStringA]
mov dword [ebp - 0x4ba4], 0
lea ecx, [ebp - 0x11b0]
call fcn.00404630
lea ecx, [ebp - 0x1068]
call fcn.00401e90
lea ecx, [ebp - 0x1b68]
call fcn.00401e90
lea ecx, [ebp - 0x11d8]
call fcn.00401e90
mov eax, dword [ebp - 0x4ba4]
jmp 0x401ca0
lea ecx, [ebp - 0x11b0]
call fcn.004013f0
push eax
lea ecx, [ebp - 0x11d8]
push ecx
call fcn.00401520
add esp, 8
lea ecx, [ebp - 0x11b0]
call fcn.00404750
mov dword [ebp - 4], eax
cmp dword [ebp - 4], 0
je 0x401967
lea ecx, [ebp - 0x4b90]
call fcn.00403940
push str.version.ini
mov edx, dword [ebp - 4]
push edx
lea ecx, [ebp - 0x4b90]
call fcn.00403a30
movzx eax, al
test eax, eax
je 0x40195c
push 0x401410
lea ecx, [ebp - 0x4b90]
call fcn.00403be0
lea ecx, [ebp - 0x4b90]
call fcn.00403a10
lea ecx, [ebp - 0x1308]
call fcn.00404600
lea ecx, [ebp - 0x11b0]
call fcn.00404790
mov dword [ebp - 0x1070], eax
cmp dword [ebp - 0x1070], 0
je 0x4019da
push 0
push 0
lea ecx, [ebp - 0x2b68]
push ecx
mov edx, dword [ebp - 0x1070]
push edx
push 0
call sub.urlmon.dll_URLDownloadToFileA
test eax, eax
jne 0x4019da
lea eax, [ebp - 0x1008]
push eax
lea ecx, [ebp - 0x1308]
call fcn.00404650
test eax, eax
je 0x4019da
lea ecx, [ebp - 0x1308]
call fcn.004013f0
push eax
lea ecx, [ebp - 0x1b68]
push ecx
call fcn.00401520
add esp, 8
mov ecx, 0xc
mov esi, str.http:__www.igfriend.com_GFClient_GFTool_Config.dat
lea edi, [ebp - 0x2368]
rep movsd dword es:[edi], dword [esi]
movsw word es:[edi], word [esi]
movsb byte es:[edi], byte [esi]
push 0x7cd
push 0
lea edx, [ebp - 0x2335]
push edx
call fcn.004104c0
add esp, 0xc
push 0
push 0
lea eax, [ebp - 0x1b08]
push eax
lea ecx, [ebp - 0x2368]
push ecx
push 0
call sub.urlmon.dll_URLDownloadToFileA
lea ecx, [ebp - 0x1308]
call fcn.004047d0
mov dword [ebp - 0x106c], eax
cmp dword [ebp - 0x106c], 0
je 0x401b92
mov dword [ebp - 0x4b94], 0
jmp 0x401a57
mov edx, dword [ebp - 0x4b94]
add edx, 1
mov dword [ebp - 0x4b94], edx
lea ecx, [ebp - 0x1b68]
call fcn.00401eb0
cmp dword [ebp - 0x4b94], eax
jae 0x401b3d
mov dword [ebp - 0x4b98], 1
mov dword [ebp - 0x4b9c], 0
jmp 0x401a93
mov eax, dword [ebp - 0x4b9c]
add eax, 1
mov dword [ebp - 0x4b9c], eax
lea ecx, [ebp - 0x11d8]
call fcn.00401eb0
cmp dword [ebp - 0x4b9c], eax
jae 0x401b11
mov ecx, dword [ebp - 0x4b94]
push ecx
lea ecx, [ebp - 0x1b68]
call fcn.00401ed0
mov esi, eax
mov edx, dword [ebp - 0x4b94]
push edx
lea ecx, [ebp - 0x11d8]
call fcn.00401ed0
mov ecx, dword [esi]
cmp ecx, dword [eax]
jne 0x401b0c
mov edx, dword [ebp - 0x4b94]
push edx
lea ecx, [ebp - 0x1b68]
call fcn.00401ed0
mov esi, eax
mov eax, dword [ebp - 0x4b94]
push eax
lea ecx, [ebp - 0x11d8]
call fcn.00401ed0
mov ecx, dword [esi + 4]
cmp ecx, dword [eax + 4]
jne 0x401b0a
mov dword [ebp - 0x4b98], 0
jmp 0x401b11
jmp 0x401a84
cmp dword [ebp - 0x4b98], 0
je 0x401b38
mov edx, dword [ebp - 0x4b94]
push edx
lea ecx, [ebp - 0x1b68]
call fcn.00401ed0
push eax
lea ecx, [ebp - 0x1068]
call fcn.00401f00
jmp 0x401a48
mov dword [ebp - 0x4ba0], 0
jmp 0x401b58
mov eax, dword [ebp - 0x4ba0]
add eax, 1
mov dword [ebp - 0x4ba0], eax
lea ecx, [ebp - 0x1068]
call fcn.00401eb0
cmp dword [ebp - 0x4ba0], eax
jae 0x401b92
mov ecx, dword [ebp - 0x4ba0]
push ecx
lea ecx, [ebp - 0x1068]
call fcn.00401ed0
mov edx, dword [eax + 4]
push edx
mov eax, dword [ebp - 0x106c]
push eax
call fcn.00401430
add esp, 8
jmp 0x401b49
mov dword [ebp - 0x1b50], 0x44
push 0x40
push 0
lea ecx, [ebp - 0x1b4c]
push ecx
call fcn.004104c0
add esp, 0xc
mov dword [ebp - 0x11c0], 0
xor edx, edx
mov dword [ebp - 0x11bc], edx
mov dword [ebp - 0x11b8], edx
mov dword [ebp - 0x11b4], edx
lea eax, [ebp - 0x11c0]
push eax
lea ecx, [ebp - 0x1b50]
push ecx
push 0
push 0
push 0
push 0
push 0
push 0
push str.__hide
push str.GFClient.dat
call dword [sym.imp.KERNEL32.dll_CreateProcessW]
mov dword [ebp - 0x1050], 0x44
push 0x40
push 0
lea edx, [ebp - 0x104c]
push edx
call fcn.004104c0
add esp, 0xc
mov dword [ebp - 0x1080], 0
xor eax, eax
mov dword [ebp - 0x107c], eax
mov dword [ebp - 0x1078], eax
mov dword [ebp - 0x1074], eax
lea ecx, [ebp - 0x1080]
push ecx
lea edx, [ebp - 0x1050]
push edx
push 0
push 0
push 0
push 0
push 0
push 0
push 0
push str.GFTool.exe
call dword [sym.imp.KERNEL32.dll_CreateProcessW]
mov dword [ebp - 0x4ba8], 0
lea ecx, [ebp - 0x1308]
call fcn.00404630
lea ecx, [ebp - 0x11b0]
call fcn.00404630
lea ecx, [ebp - 0x1068]
call fcn.00401e90
lea ecx, [ebp - 0x1b68]
call fcn.00401e90
lea ecx, [ebp - 0x11d8]
call fcn.00401e90
mov eax, dword [ebp - 0x4ba8]
pop edi
pop esi
mov ecx, dword [ebp - 8]
xor ecx, ebp
call fcn.0040ee26
mov esp, ebp
pop ebp
ret 0x10