Function at 0x401640
Capabilities:
Get geographical location
Manipulate console buffer
Read file on windows

Disassembly:
push ebp
mov ebp, esp
sub esp, 0xe0
mov eax, 0x38c
mov word [ebp - 0x60], ax
movsx ecx, word [ebp - 0x60]
cmp ecx, 0x33a
jl 0x401b06
mov byte [ebp - 0x7d], 0x22
lea edx, [ebp - 0x7d]
mov dword [ebp - 0x90], edx
mov ax, word [ebp - 0x60]
mov word [ebp - 0x20], ax
mov cl, byte [ebp + 0xc]
mov byte [ebp - 0x61], cl
mov dl, byte [ebp - 0x7d]
mov byte [ebp - 0xc8], dl
cmp byte [ebp - 0xc8], 0x54
je 0x401691
jmp 0x4016a5
movsx eax, byte [ebp - 0x7d]
and eax, 0x1b
mov ecx, dword [ebp - 0x90]
mov byte [ecx], al
jmp 0x40175e
movsx edx, word [ebp - 0x20]
mov dword [ebp - 0xcc], edx
cmp dword [ebp - 0xcc], 0xb8
je 0x4016c0
jmp 0x40175e
movsx eax, word [ebp - 0x20]
xor eax, 0x528
movsx ecx, word [ebp - 0x60]
cmp eax, ecx
je 0x40175e
mov edx, dword [ebp - 0x7c]
push edx
mov eax, dword [ebp - 0x7c]
push eax
mov ecx, dword [ebp - 0x7c]
push ecx
call fcn.005b4e20
mov dl, byte [ebp - 0x61]
mov byte [ebp + 0xc], dl
mov eax, dword [ebp - 0x7c]
push eax
mov ecx, dword [ebp - 0x7c]
push ecx
mov edx, dword [ebp - 0x7c]
push edx
call fcn.005b4e20
mov eax, dword [ebp - 0x90]
movsx ecx, byte [eax]
shl ecx, 1
mov byte [ebp - 0x7d], cl
lea edx, [ebp - 0x90]
push edx
lea eax, [ebp - 0x90]
push eax
push 0xf1
lea ecx, [ebp - 0x61]
push ecx
push 0xd1
mov edx, dword [ebp - 0x58]
push edx
call sub.WINSPOOL.DRV_EnumFormsA
mov dword [ebp - 0x78], eax
movsx eax, byte [ebp - 0x7d]
or eax, 0x40
mov ecx, dword [ebp - 0x90]
mov byte [ecx], al
mov edx, dword [ebp - 0x90]
movzx eax, byte [edx]
push eax
movzx ecx, byte [ebp - 0x61]
push ecx
push 0xeb
call fcn.005b4a20
add esp, 0xc
mov dword [ebp - 0x18], 0x362f
mov edx, dword [ebp - 0x7c]
mov dword [ebp - 0x38], edx
mov eax, dword [ebp - 0x18]
mov dword [ebp - 0xd0], eax
cmp dword [ebp - 0xd0], 0x53dd
je 0x401782
jmp 0x4017f3
cmp dword [ebp - 0x18], 0x4234
je 0x4017af
mov ecx, dword [ebp - 0x90]
movsx edx, byte [ecx]
movsx ecx, byte [ebp - 0x7d]
sar edx, cl
mov eax, dword [ebp - 0x90]
mov byte [eax], dl
movzx ecx, byte [ebp + 0xc]
movzx edx, byte [ebp + 8]
add ecx, edx
mov byte [ebp - 0x61], cl
push 0x35
lea eax, [ebp - 0xc0]
push eax
mov ecx, dword [ebp - 0xc4]
push ecx
call dword [sym.imp.KERNEL32.dll_FindNextVolumeA]
mov dword [ebp - 0x6c], eax
mov edx, dword [ebp - 0x38]
push edx
mov eax, dword [ebp - 0x7c]
push eax
mov ecx, dword [ebp - 0x38]
push ecx
call fcn.005b4e20
movsx edx, byte [ebp - 0x7d]
sub edx, 0x64
mov eax, dword [ebp - 0x90]
mov byte [eax], dl
mov cl, byte [ebp - 0x61]
mov byte [ebp + 8], cl
jmp 0x4018ce
lea edx, [ebp - 0x7c]
mov dword [ebp - 0x68], edx
mov eax, dword [ebp - 0x38]
mov dword [ebp - 0x10], eax
mov ecx, dword [ebp - 0x18]
mov dword [ebp - 0x8c], ecx
movsx edx, word [ebp - 0x60]
mov dword [ebp - 0xd4], edx
cmp dword [ebp - 0xd4], 0x38c
je 0x401823
jmp 0x4018bf
movzx eax, byte [ebp - 0x61]
movzx ecx, byte [ebp + 8]
and eax, ecx
movzx edx, byte [ebp + 0xc]
cmp eax, edx
jge 0x401857
mov eax, dword [ebp - 0x38]
push eax
mov ecx, dword [ebp - 0x10]
push ecx
mov edx, dword [ebp - 0x68]
mov eax, dword [edx]
push eax
call fcn.005b4e20
movzx ecx, byte [ebp + 8]
movzx edx, byte [ebp + 0xc]
add ecx, edx
mov byte [ebp - 0x61], cl
jmp 0x4018bd
mov eax, dword [ebp - 0x18]
sub eax, 0x70e5
cmp eax, dword [ebp - 0x8c]
jle 0x4018bd
movzx ecx, byte [ebp + 8]
push ecx
push 0x6a
mov edx, dword [ebp - 0x7c]
push edx
movzx eax, byte [ebp - 0x61]
push eax
call fcn.005b4840
mov ecx, dword [ebp - 0x68]
mov edx, dword [ecx]
sub edx, dword [ebp - 0x38]
mov dword [ebp - 0x10], edx
lea eax, [ebp - 4]
push eax
mov ecx, dword [ebp - 0x70]
push ecx
mov edx, dword [ebp - 0xc]
push edx
lea eax, [ebp - 0x18]
push eax
mov ecx, dword [ebp - 0x94]
push ecx
call dword [sym.imp.KERNEL32.dll_WriteConsoleOutputA]
mov dword [ebp - 4], eax
mov edx, dword [ebp - 0x7c]
add edx, dword [ebp - 0x10]
mov eax, dword [ebp - 0x68]
mov dword [eax], edx
mov ecx, dword [ebp - 0x10]
xor ecx, dword [ebp - 0x7c]
mov edx, dword [ebp - 0x68]
mov dword [edx], ecx
jmp 0x4018ce
mov eax, dword [ebp - 0x90]
movsx ecx, byte [eax]
or ecx, 0x14
mov byte [ebp - 0x7d], cl
mov dl, byte [ebp - 0x61]
mov byte [ebp - 0x95], dl
movsx eax, word [ebp - 0x20]
sar eax, 0xb8
movsx ecx, word [ebp - 0x60]
cmp eax, ecx
jl 0x4019c3
movsx edx, word [ebp - 0x20]
mov dword [ebp - 0xd8], edx
cmp dword [ebp - 0xd8], 0x170
je 0x4019b8
cmp dword [ebp - 0xd8], 0x79f
je 0x401915
jmp 0x4019c3
lea eax, [ebp - 0x95]
push eax
push 5
push 0x86
push 0x42
push 0x96
mov ecx, dword [ebp - 0x94]
push ecx
call dword [sym.imp.KERNEL32.dll_LockFileEx]
mov dword [ebp - 0x78], eax
mov edx, dword [ebp - 0x68]
mov eax, dword [edx]
mov ecx, dword [ebp - 0x38]
shl eax, cl
mov ecx, dword [ebp - 0x68]
mov dword [ecx], eax
movzx edx, byte [ebp - 0x61]
movzx eax, byte [ebp + 8]
and edx, eax
movzx ecx, byte [ebp - 0x95]
movzx eax, byte [ebp + 0xc]
add ecx, eax
cmp edx, ecx
jge 0x40199c
mov ecx, dword [ebp - 0x38]
mov dword [ebp - 0x7c], ecx
mov dl, byte [ebp - 0x95]
mov byte [ebp + 0xc], dl
push 0xf0
lea eax, [ebp - 0x34]
push eax
push 0xeb
push 0xb6
call dword [sym.imp.KERNEL32.dll_GetLocaleInfoA]
mov dword [ebp - 0x14], eax
mov ecx, dword [ebp - 0x7c]
sub ecx, dword [ebp - 0x38]
mov edx, dword [ebp - 0x68]
mov dword [edx], ecx
jmp 0x4019b6
movzx eax, word [ebp - 0x20]
push eax
mov ecx, dword [ebp - 0x7c]
push ecx
mov edx, dword [ebp - 0x68]
mov eax, dword [edx]
push eax
mov edx, dword [ebp - 0x60]
mov cl, byte [ebp - 0x7d]
call fcn.00401b70
jmp 0x4019c3
mov ecx, dword [ebp - 0x68]
mov edx, dword [ebp - 0x7c]
add edx, dword [ecx]
mov dword [ebp - 0x10], edx
mov eax, dword [ebp - 0x14]
mov dword [ebp - 0xdc], eax
cmp dword [ebp - 0xdc], 0
je 0x4019e6
cmp dword [ebp - 0xdc], 0x3102
je 0x4019fd
jmp 0x401a78
mov cl, byte [ebp - 0x61]
mov byte [ebp - 0x71], cl
lea edx, [ebp - 0x60]
mov dword [ebp - 0x88], edx
lea eax, [ebp - 0x7d]
mov dword [ebp - 8], eax
jmp 0x401a78
mov ecx, dword [ebp - 0x68]
mov edx, dword [ebp - 0x7c]
add edx, dword [ecx]
mov dword [ebp - 0x10], edx
push str.SxpCunuX_IL
lea eax, [ebp - 0x54]
push eax
call dword [sym.imp.KERNEL32.dll_lstrcpyA]
mov dword [ebp - 0x24], eax
mov cl, byte [ebp + 8]
mov byte [ebp - 0xe0], cl
cmp byte [ebp - 0xe0], 0x2c
je 0x401a6f
cmp byte [ebp - 0xe0], 0xdd
je 0x401a37
jmp 0x401a78
mov edx, dword [ebp - 0x38]
sub edx, dword [ebp - 0x10]
mov eax, dword [ebp - 0x68]
mov dword [eax], edx
mov ecx, dword [ebp - 0x90]
movsx edx, byte [ecx]
or edx, 0x2e
movsx eax, byte [ebp - 0x7d]
cmp edx, eax
je 0x401a6d
movzx ecx, byte [ebp - 0x7d]
push ecx
movzx edx, byte [ebp + 0xc]
push edx
push 0xcf
call fcn.005b4a20
add esp, 0xc
jmp 0x401a78
mov al, byte [ebp - 0x95]
mov byte [ebp + 0xc], al
movzx ecx, byte [ebp - 0x95]
push ecx
push 0x35
mov edx, dword [ebp - 0x7c]
push edx
movzx eax, byte [ebp - 0x95]
push eax
call fcn.005b4840
mov ecx, dword [ebp - 0x68]
mov edx, dword [ecx]
and edx, dword [ebp - 0x38]
mov eax, dword [ebp - 0x68]
mov dword [eax], edx
lea ecx, [ebp - 0x61]
push ecx
lea edx, [ebp - 0x14]
push edx
push 0x9b
lea eax, [ebp - 0x8c]
push eax
mov ecx, dword [ebp - 0x94]
push ecx
call dword [sym.imp.KERNEL32.dll_ReadFileEx]
mov dword [ebp - 0x84], eax
movzx edx, byte [ebp - 0x61]
movzx eax, byte [ebp + 8]
sub edx, eax
mov byte [ebp - 0x95], dl
mov cl, byte [ebp - 0x61]
mov byte [ebp + 0xc], cl
mov edx, dword [ebp - 0x7c]
add edx, dword [ebp - 0x10]
mov eax, dword [ebp - 0x68]
mov dword [eax], edx
mov ecx, dword [ebp - 0x68]
mov edx, dword [ecx]
push edx
mov eax, dword [ebp - 0x68]
mov ecx, dword [eax]
push ecx
movzx edx, word [ebp - 0x20]
push edx
movzx eax, word [ebp - 0x20]
push eax
call fcn.00401c20
add esp, 0x10
movzx ecx, byte [ebp + 0xc]
push ecx
movzx edx, byte [ebp + 0xc]
push edx
call fcn.00401640
add esp, 8
movsx eax, word [ebp - 0x60]
sub eax, 0x2a2
mov word [ebp - 0x60], ax
movzx ecx, byte [ebp + 8]
push ecx
movzx edx, byte [ebp + 0xc]
push edx
call fcn.00401640
add esp, 8
lea eax, [ebp - 0x94]
push eax
push 0x7e
mov ecx, dword [ebp - 0x5c]
push ecx
mov edx, dword [ebp - 0x1c]
push edx
mov eax, dword [ebp - 0x94]
push eax
call sub.WINSPOOL.DRV_EnumPrinterKeyA
mov dword [ebp - 0x7c], eax
movsx ecx, word [ebp - 0x60]
add ecx, 0x266
mov word [ebp - 0x60], cx
mov eax, 0x3e
mov esp, ebp
pop ebp
ret