Function at 0x401f20
Capabilities:
Accept command line arguments
Get common file path
Read file via mapping

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x124
push ebx
push esi
push edi
mov esi, 0x40ab30
lea edi, [ebp - 4]
movsw word es:[edi], word [esi]
movsb byte es:[edi], byte [esi]
xor edi, edi
call fcn.00401bd4
mov dword [0x40ba74], eax
mov dword [0x40ba6c], edi
push 0x7f00
mov dword [0x40bc58], edi
push edi
mov esi, 0x104
mov dword [0x40ba04], 0x60
mov dword [0x40b73c], edi
call dword [sym.imp.USER32.dll_LoadCursorA]
push esi
mov dword [0x40bbf8], eax
lea eax, [ebp - 0x124]
push eax
push edi
mov edi, 0x40bc60
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameA]
lea eax, [ebp - 0x124]
push eax
push edi
call dword [sym.imp.KERNEL32.dll_lstrcpyA]
call dword [sym.imp.KERNEL32.dll_GetCommandLineA]
push eax
call dword [sym.imp.USER32.dll_CharUpperA]
push eax
mov ebx, eax
call dword [sym.imp.KERNEL32.dll_lstrlenA]
cmp byte [ebx + eax - 1], 0x46
jne 0x401fc8
push edi
push esi
call dword [sym.imp.KERNEL32.dll_GetTempPathA]
call fcn.00401999
xor eax, eax
jmp 0x402300
push str.VK_4.0__C_Tuan
mov esi, 0x40ba50
push esi
xor edi, edi
call dword [sym.imp.KERNEL32.dll_lstrcpyA]
push edi
push esi
call dword [sym.imp.USER32.dll_FindWindowA]
mov dword [0x40b720], eax
cmp eax, edi
je 0x402011
push eax
call dword [sym.imp.USER32.dll_SetForegroundWindow]
push edi
mov eax, dword [0x40b720]
push 0xbbc
push 0x111
push eax
call dword [sym.imp.USER32.dll_PostMessageA]
xor eax, eax
jmp 0x402300
mov esi, 0x40bc60
push esi
call fcn.004066f0
add esp, 4
push 0x40ab1c
push esi
call fcn.00406720
add esp, 8
push esi
call dword [sym.imp.KERNEL32.dll_lstrlenA]
add eax, 0x40bc61
push eax
push esi
call dword [sym.imp.KERNEL32.dll_lstrcpyA]
push esi
call dword [sym.imp.KERNEL32.dll_lstrlenA]
cmp byte [eax + 0x40bc5f], 0x22
jne 0x40205f
push esi
call dword [sym.imp.KERNEL32.dll_lstrlenA]
mov byte [eax + 0x40bc5f], 0
mov edi, 0x40bc60
push edi
call fcn.004066f0
add esp, 4
mov ebx, dword [sym.imp.KERNEL32.dll_lstrcatA]
mov esi, 0x40b5e0
push 0x40ab1c
push edi
call ebx
push edi
push esi
call dword [sym.imp.KERNEL32.dll_lstrcpyA]
push edi
mov edi, 0x40ba80
push edi
call dword [sym.imp.KERNEL32.dll_lstrcpyA]
push str.vknt.cfg
push edi
call ebx
push str.vknt.tmp
push esi
call ebx
call fcn.00401999
push 1
call fcn.00401a6b
add esp, 4
mov dword [0x40b5d4], eax
push 0
call fcn.00401a6b
add esp, 4
mov dword [0x40ba70], eax
push 2
call fcn.00401a6b
add esp, 4
mov dword [0x40bbc0], eax
mov eax, dword [ebp + 8]
push edi
mov dword [0x40bbd0], eax
call fcn.00401cf2
add esp, 4
test eax, eax
jne 0x4020f3
call fcn.00402ec1
jmp 0x4020f8
call fcn.00402f4d
xor esi, esi
push esi
push pe_nt_image_headers32
push 2
push esi
push 3
mov edi, 0x800
push 0xc0000000
push 0x40b5e0
call dword [sym.imp.KERNEL32.dll_CreateFileA]
push 0x40aaf0
mov dword [0x40bbdc], eax
push edi
push esi
push 4
push esi
push eax
call dword [sym.imp.KERNEL32.dll_CreateFileMappingA]
push edi
mov dword [0x40b710], eax
push esi
push esi
push 0xf001f
push eax
call dword [sym.imp.KERNEL32.dll_MapViewOfFile]
mov dword [0x40bbc4], eax
mov dword [0x40b714], eax
call fcn.00402cff
mov dword [0x409050], esi
call fcn.00401ddc
call fcn.00402d18
call fcn.00404d6c
call fcn.00402309
call dword [sym.imp.USER32.dll_GetForegroundWindow]
mov dword [0x40b720], eax
cmp dword [ebp + 0xc], esi
jne 0x4022fd
call fcn.00406046
cmp eax, 0xffffffff
je 0x402300
xor esi, esi
mov eax, dword [0x40bbd0]
push esi
push eax
push esi
push esi
push 0x14a
push 0x172
push 0x5a
push 0x96
push 0x2080000
push str.VIETKEY_4.0
push 0x40ba50
push esi
call dword [sym.imp.USER32.dll_CreateWindowExA]
mov dword [0x40b70c], eax
cmp eax, esi
jne 0x4021d4
mov eax, 2
jmp 0x402300
xor esi, esi
mov eax, dword [0x40b70c]
push esi
push eax
push 1
call dword [0x40b6e8]
push 0x50
mov eax, dword [0x40b70c]
push 6
mov edi, dword [sym.imp.USER32.dll_RegisterHotKey]
push 1
push eax
call edi
push 0x70
push 6
push 0xb
push dword [0x40b70c]
call edi
push 0x71
mov eax, dword [0x40b70c]
push 6
push 0xc
push eax
call edi
push 0x72
mov eax, dword [0x40b70c]
push 6
push 0xd
push eax
call edi
mov dword [0x40b708], esi
push 0
mov eax, dword [0x40b708]
add ax, 0x47e
push 0x10
movzx ecx, ax
push 0x10
push 1
push ecx
push dword [0x40bbd0]
call dword [sym.imp.USER32.dll_LoadImageA]
mov ecx, dword [0x40b708]
inc dword [0x40b708]
mov dword [ecx*4 + 0x40bbe0], eax
cmp dword [0x40b708], 5
jl 0x402229
cmp dword [0x4092f0], 0
je 0x4022a2
movzx eax, byte [0x40b704]
cmp eax, 1
je 0x402284
push 0
cmp eax, 2
je 0x402298
jmp 0x4022a4
push 0
mov eax, dword [0x40b70c]
push 0x405a68
push eax
push 0x92
jmp 0x4022b4
call fcn.0040236f
add esp, 4
jmp 0x4022c0
push 0
push 0x4049c2
mov eax, dword [0x40b70c]
push eax
push 0x8f
push dword [0x40bbd0]
call dword [sym.imp.USER32.dll_DialogBoxParamA]
xor esi, esi
lea eax, [ebp - 0x20]
push esi
push esi
push esi
push eax
call dword [sym.imp.USER32.dll_GetMessageA]
test eax, eax
je 0x4022f8
lea eax, [ebp - 0x20]
push eax
call dword [sym.imp.USER32.dll_TranslateMessage]
lea eax, [ebp - 0x20]
push eax
call dword [sym.imp.USER32.dll_DispatchMessageA]
push esi
lea eax, [ebp - 0x20]
push esi
push esi
push eax
call dword [sym.imp.USER32.dll_GetMessageA]
test eax, eax
jne 0x4022d3
call fcn.004060c5
mov eax, dword [ebp - 0x18]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10