Function at 0x401000
Capabilities:
Create process on windows
Create process suspended
Create thread
Get common file path
Hide graphical window
Read .ini file
Read file on windows
Resume thread
Set registry value

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0xf84
mov eax, dword [section..data]
xor eax, esp
mov dword [esp + 0xf80], eax
mov eax, dword [ebp + 8]
push ebx
push esi
push edi
xor ebx, ebx
push 0x40
lea ecx, [esp + 0x68]
push ebx
push ecx
mov dword [esp + 0x48], eax
mov dword [esp + 0x6c], ebx
call sub.MSVCR100.dll_memset
add esp, 0xc
push 0x104
lea edx, [esp + 0x86c]
xor eax, eax
push edx
push ebx
mov dword [esp + 0x28], ebx
mov dword [esp + 0x2c], eax
mov dword [esp + 0x30], eax
mov dword [esp + 0x34], eax
xor esi, esi
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameA]
lea eax, [esp + 0x868]
push eax
lea ecx, [esp + 0x2d4]
push 0x104
push ecx
call dword [sym.imp.MSVCR100.dll_strcpy_s]
lea eax, [esp + 0x2dc]
add esp, 0xc
xor ecx, ecx
lea edi, [eax + 1]
lea esp, [esp]
mov dl, byte [eax]
inc eax
test dl, dl
jne 0x401090
sub eax, edi
je 0x4010b1
jmp 0x4010a0
cmp byte [esp + ecx + 0x2d0], 0x5c
jne 0x4010ac
mov esi, ecx
inc ecx
cmp ecx, eax
jb 0x4010a0
push 0x404380
push 0x104
lea edx, [esp + 0x668]
push edx
push ebx
push str.Target
mov byte [esp + esi + 0x2e4], bl
mov esi, dword [sym.imp.KERNEL32.dll_GetPrivateProfileStringW]
push 0x4031ec
call esi
push 0x404380
push 0x104
lea eax, [esp + 0xb80]
push eax
push ebx
push str.CommandLine
push 0x4031ec
call esi
push 0x404380
push 0x104
lea ecx, [esp + 0x3e0]
push ecx
push ebx
push 0x403218
push 0x4031ec
call esi
mov edi, dword [sym.imp.KERNEL32.dll_GetPrivateProfileStringA]
push 0x404588
push 0x104
lea edx, [esp + 0x978]
push edx
push ebx
push str.SteamClientPath
push str.Launcher
call edi
mov esi, dword [sym.imp.KERNEL32.dll_GetPrivateProfileIntW]
push 0x404380
push ebx
push str.Persist
push 0x4031ec
call esi
push 0x404380
push ebx
push str.AppendAppIdToProcess
cmp eax, 1
push 0x4031ec
setae byte [esp + 0x1f]
call esi
push 0x404380
push ebx
push str.AppId
cmp eax, 1
push 0x40328c
setae byte [esp + 0x1e]
call esi
push 0x404588
push 0x100
mov ebx, eax
lea eax, [esp + 0xa80]
push eax
push 0x4032a8
push str.PersonaName
push str.SmartSteamEmu
mov dword [esp + 0x30], ebx
call edi
test ebx, ebx
jne 0x4012bf
push 0x404588
push 0x104
lea ecx, [esp + 0x1d0]
push ecx
push ebx
push str.StartIn
push str.Launcher
call edi
mov esi, dword [sym.imp.MSVCR100.dll_strcat_s]
test eax, eax
je 0x40121a
lea eax, [esp + 0x1c8]
lea edx, [eax + 1]
mov cl, byte [eax]
inc eax
test cl, cl
jne 0x4011f0
sub eax, edx
cmp byte [esp + eax + 0x1c8], 0x5c
je 0x40121a
push 0x4032d0
lea edx, [esp + 0x1cc]
push 0x104
push edx
call esi
add esp, 0xc
push str.steam_appid.txt
lea eax, [esp + 0x1cc]
push 0x104
push eax
call esi
push 0x4032e4
lea ecx, [esp + 0x1d8]
push ecx
lea edx, [esp + 0x24]
push edx
call dword [sym.imp.MSVCR100.dll_fopen_s]
add esp, 0x18
test eax, eax
jne 0x40128a
mov eax, dword [esp + 0x10]
push eax
push 1
lea ecx, [esp + 0xc0]
push 0x10
push ecx
call dword [sym.imp.MSVCR100.dll_fread]
mov edx, dword [esp + 0x20]
push edx
call dword [sym.imp.MSVCR100.dll_fclose]
lea eax, [esp + 0xcc]
push eax
call dword [sym.imp.MSVCR100.dll_atoi]
add esp, 0x18
mov dword [esp + 0x18], eax
mov ebx, eax
test eax, eax
jne 0x4012bf
push 4
push 0x40328c
push 0x4032e8
push 0
call dword [sym.imp.USER32.dll_MessageBoxW]
cmp eax, 7
jne 0x4012bf
mov eax, 1
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0xf80]
xor ecx, esp
call fcn.0040198c
mov esp, ebp
pop ebp
ret 0x10
push ebx
push str.SteamAppId_u
lea edx, [esp + 0xd0]
call fcn.00401970
mov esi, dword [sym.imp.MSVCR100.dll__putenv]
lea ecx, [esp + 0xd0]
push ecx
call esi
push ebx
push str.SteamGameId_u
lea edx, [esp + 0xdc]
call fcn.00401970
lea edx, [esp + 0xdc]
push edx
call esi
push str.SteamAppVersionId0
call esi
lea eax, [esp + 0xa94]
push eax
push str.SteamUser_s
lea edx, [esp + 0xec]
call fcn.00401970
lea ecx, [esp + 0xec]
push ecx
call esi
lea edx, [esp + 0xaa0]
push edx
push str.SteamAppUser_s
lea edx, [esp + 0xf8]
call fcn.00401970
lea eax, [esp + 0xf8]
push eax
call esi
lea ecx, [esp + 0x304]
push ecx
push str.SteamPath_s
lea edx, [esp + 0x104]
call fcn.00401970
lea edx, [esp + 0x104]
push edx
call esi
add esp, 0x40
lea eax, [esp + 0x868]
push eax
push str.ValvePlatformMutex_s
lea edx, [esp + 0xd0]
call fcn.00401970
lea ecx, [esp + 0xd0]
push ecx
call esi
add esp, 0xc
cmp word [esp + 0x3d8], 0
jne 0x401435
push 0x104
lea edx, [esp + 0x3dc]
push 0
push edx
call sub.MSVCR100.dll_memset
lea eax, [esp + 0x66c]
add esp, 0xc
xor ebx, ebx
xor edi, edi
xor ecx, ecx
lea esi, [eax + 2]
lea esp, [esp]
mov dx, word [eax]
add eax, 2
test dx, dx
jne 0x4013d0
sub eax, esi
sar eax, 1
je 0x401422
movzx edx, word [esp + ecx*2 + 0x660]
cmp edx, 0x3a
jne 0x4013f3
lea edi, [edx - 0x39]
jmp 0x4013f7
test edi, edi
je 0x4013fe
cmp edx, 0x5c
jne 0x4013fe
mov ebx, ecx
inc ecx
cmp ecx, eax
jb 0x4013e1
test ebx, ebx
je 0x401422
push ebx
lea eax, [esp + 0x664]
push eax
lea ecx, [esp + 0x3e0]
push ecx
call sub.MSVCR100.dll_memcpy
add esp, 0xc
jmp 0x401435
lea edx, [esp + 0x3d8]
push edx
push 0x104
call dword [sym.imp.KERNEL32.dll_GetCurrentDirectoryW]
lea eax, [esp + 0x14]
push eax
push 6
push 0
push str.SoftwareValveSteamActiveProcess
push 0x80000001
mov dword [esp + 0x28], 0
call dword [sym.imp.ADVAPI32.dll_RegOpenKeyExA]
test eax, eax
je 0x40147e
lea ecx, [esp + 0x40]
push ecx
lea edx, [esp + 0x18]
push edx
push 0
push 6
push 0
push 0
push 0
push str.SoftwareValveSteamActiveProcess
push 0x80000001
call dword [sym.imp.ADVAPI32.dll_RegCreateKeyExA]
cmp dword [esp + 0x14], 0
je 0x4014e4
call dword [sym.imp.KERNEL32.dll_GetCurrentProcessId]
mov ecx, dword [esp + 0x14]
mov esi, dword [sym.imp.ADVAPI32.dll_RegSetValueExA]
push 4
mov dword [esp + 0x14], eax
lea eax, [esp + 0x14]
push eax
push 4
push 0
push 0x4034c4
push ecx
call esi
lea eax, [esp + 0x970]
lea edx, [eax + 1]
mov cl, byte [eax]
inc eax
test cl, cl
jne 0x4014b6
sub eax, edx
inc eax
push eax
mov eax, dword [esp + 0x18]
lea edx, [esp + 0x974]
push edx
push 1
push 0
push str.SteamClientDll
push eax
call esi
mov ecx, dword [esp + 0x14]
push ecx
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
push 0
push 0
push 0
push 0x4018d0
push 0
push 0
call dword [sym.imp.KERNEL32.dll_CreateThread]
push str.LocalSteamStart_SharedMemFile
push 0x400
push 0
push 4
push 0
push 0xffffffffffffffff
mov dword [esp + 0x28], 0
call dword [sym.imp.KERNEL32.dll_CreateFileMappingA]
mov ebx, dword [sym.imp.KERNEL32.dll_CloseHandle]
mov edi, eax
mov dword [esp + 0x38], edi
cmp edi, 0xffffffff
je 0x40157b
push 0
push 0
push 0
push 0xf001f
push edi
call dword [sym.imp.KERNEL32.dll_MapViewOfFile]
mov esi, eax
mov dword [esp + 0x10], esi
test esi, esi
je 0x401556
push 0x400
push 0
push esi
call sub.MSVCR100.dll_memset
add esp, 0xc
push str.LocalSteamStart_SharedMemLock
push 0
push 0
push 0
call dword [sym.imp.KERNEL32.dll_CreateEventA]
cmp eax, 0xffffffff
je 0x401575
push eax
call dword [sym.imp.KERNEL32.dll_SetEvent]
jmp 0x40157b
push edi
call ebx
push esi
call ebx
push str.LocalSteam3Master_SharedMemLock
push 0
push 0
push 0
call dword [sym.imp.KERNEL32.dll_CreateEventA]
mov dword [esp + 0x34], eax
cmp eax, 0xffffffff
je 0x40159c
push eax
call dword [sym.imp.KERNEL32.dll_SetEvent]
mov esi, dword [sym.imp.KERNEL32.dll_CreateSemaphoreW]
push str.STEAM_DIPC_CONSUME
push 0x200
push 0
push 0
call esi
push str.STEAM_DIPC_PRODUCE
push 0x200
push 0
push 0
mov dword [esp + 0x3c], eax
call esi
cmp byte [esp + 0xe], 0
mov dword [esp + 0x30], eax
je 0x401606
mov eax, dword [esp + 0x18]
lea edx, [esp + 0xb78]
push edx
push eax
lea ecx, [esp + 0x668]
push ecx
lea edx, [esp + 0x3e4]
push edx
lea eax, [esp + 0xd90]
push str.__s_s___AppId__u__s
push eax
call dword [sym.imp.USER32.dll_wsprintfW]
add esp, 0x18
jmp 0x401634
lea ecx, [esp + 0xb78]
push ecx
lea edx, [esp + 0x664]
push edx
lea eax, [esp + 0x3e0]
push eax
lea ecx, [esp + 0xd8c]
push str.__s_s___s
push ecx
call dword [sym.imp.USER32.dll_wsprintfW]
add esp, 0x14
mov esi, dword [sym.imp.KERNEL32.dll_CreateProcessW]
lea edx, [esp + 0x1c]
push edx
lea eax, [esp + 0x64]
push eax
lea ecx, [esp + 0x3e0]
push ecx
push 0
push 4
push 1
push 0
push 0
lea edx, [esp + 0xda0]
push edx
push 0
call esi
test eax, eax
jne 0x4016ef
cmp byte [esp + 0xe], al
je 0x4016a6
mov eax, dword [esp + 0x18]
push eax
lea ecx, [esp + 0x5e4]
push str.__AppId__u
push ecx
call dword [sym.imp.MSVCR100.dll_wprintf_s]
lea edx, [esp + 0x5ec]
push edx
lea eax, [esp + 0xb88]
push 0x104
push eax
call dword [sym.imp.MSVCR100.dll_wcscat_s]
add esp, 0x18
lea ecx, [esp + 0x1c]
push ecx
lea edx, [esp + 0x64]
push edx
lea eax, [esp + 0x3e0]
push eax
push 0
push 4
push 1
push 0
push 0
lea ecx, [esp + 0xb98]
push ecx
lea edx, [esp + 0x684]
push edx
call esi
test eax, eax
jne 0x4016ef
push eax
push str.SmartSteamLoader
push str.Failed_to_create_process
push eax
call dword [sym.imp.USER32.dll_MessageBoxW]
jmp 0x401844
mov eax, dword [esp + 0x20]
push eax
call dword [sym.imp.KERNEL32.dll_ResumeThread]
mov ecx, dword [esp + 0x1c]
push 0xffffffffffffffff
push ecx
call dword [sym.imp.KERNEL32.dll_WaitForSingleObject]
cmp byte [esp + 0xf], 0
je 0x401813
mov edx, dword [esp + 0x3c]
push 0
push 0x401860
push 0
push 0x81
push edx
call dword [sym.imp.USER32.dll_CreateDialogParamW]
mov edi, dword [sym.imp.USER32.dll_GetWindowRect]
mov esi, eax
lea eax, [esp + 0xa8]
push eax
push esi
call edi
lea ecx, [esp + 0xb8]
push ecx
call dword [sym.imp.USER32.dll_GetDesktopWindow]
push eax
call edi
mov ecx, dword [esp + 0xb4]
mov edx, dword [esp + 0xac]
mov edi, dword [esp + 0xb0]
push 0
mov eax, ecx
sub eax, edx
push eax
mov eax, edi
sub eax, dword [esp + 0xb0]
push eax
mov eax, dword [esp + 0xd0]
sub eax, dword [esp + 0xc8]
sub eax, ecx
add eax, edx
cdq
sub eax, edx
sar eax, 1
push eax
mov eax, dword [esp + 0xd0]
sub eax, dword [esp + 0xc8]
sub eax, edi
add eax, dword [esp + 0xb8]
cdq
sub eax, edx
sar eax, 1
push eax
push esi
call dword [sym.imp.USER32.dll_MoveWindow]
mov ecx, dword [ebp + 0x14]
push ecx
push esi
call dword [sym.imp.USER32.dll_ShowWindow]
mov edi, dword [sym.imp.USER32.dll_GetMessageW]
push 0
push 0
push 0
lea edx, [esp + 0x50]
push edx
call edi
test eax, eax
je 0x40180f
cmp eax, 0xffffffff
je 0x40180f
lea eax, [esp + 0x44]
push eax
push esi
call dword [sym.imp.USER32.dll_IsDialogMessageW]
test eax, eax
jne 0x4017fe
lea ecx, [esp + 0x44]
push ecx
call dword [sym.imp.USER32.dll_TranslateMessage]
lea edx, [esp + 0x44]
push edx
call dword [sym.imp.USER32.dll_DispatchMessageW]
push 0
push 0
push 0
lea eax, [esp + 0x50]
push eax
call edi
test eax, eax
jne 0x4017d3
mov edi, dword [esp + 0x38]
mov ecx, dword [esp + 0x10]
push ecx
call dword [sym.imp.KERNEL32.dll_UnmapViewOfFile]
push edi
call ebx
mov edx, dword [esp + 0x20]
push edx
call ebx
mov eax, dword [esp + 0x1c]
push eax
call ebx
mov ecx, dword [esp + 0x2c]
push ecx
call ebx
mov edx, dword [esp + 0x30]
push edx
call ebx
mov eax, dword [esp + 0x34]
push eax
call ebx
mov ecx, dword [esp + 0xf8c]
pop edi
pop esi
pop ebx
xor ecx, esp
xor eax, eax
call fcn.0040198c
mov esp, ebp
pop ebp
ret 0x10