Function at 0x412a30
Capabilities:
Encode data using xor
Get disk information
Read .ini file

Disassembly:
sub esp, 0x668
push ebx
mov ebx, dword [sym.imp.KERNEL32.dll_lstrcpyW]
lea eax, [esp + 0x54]
push ebp
push esi
push edi
push 0x4330a0
push eax
call ebx
mov cl, byte [esp + 0x60]
or edx, 0xffffffff
or esi, 0xffffffff
xor eax, eax
test cl, cl
je 0x412a79
lea esp, [esp]
test edx, edx
je 0x412a75
cmp cl, 0x2e
jne 0x412a6b
mov esi, eax
mov cl, byte [esp + eax*2 + 0x62]
inc eax
dec edx
test cl, cl
jne 0x412a60
test esi, esi
jns 0x412a7c
lea esi, [eax - 1]
lea eax, [esp + 0x62]
push 0x416c74
lea eax, [eax + esi*2]
push eax
call ebx
mov eax, dword [0x433098]
lea ecx, [esp + 0x60]
mov ebx, dword [sym.imp.KERNEL32.dll_GetPrivateProfileIntW]
or eax, 2
push ecx
push eax
push str.LogMode
push str.Parameters
call ebx
mov edi, dword [sym.imp.USER32.dll_wsprintfW]
mov esi, eax
push esi
lea eax, [esp + 0x26c]
push 0x416df8
push eax
call edi
mov ebp, dword [sym.imp.KERNEL32.dll_WritePrivateProfileStringW]
lea eax, [esp + 0x6c]
add esp, 0xc
push eax
lea eax, [esp + 0x26c]
push eax
push str.LogMode
push str.Parameters
call ebp
movzx eax, byte [0x430f39]
lea ecx, [esp + 0x60]
push ecx
push eax
push str.NormDllPaths
push str.Parameters
mov dword [0x433098], esi
call ebx
mov esi, eax
lea eax, [esp + 0x268]
push esi
push 0x416df8
push eax
call edi
add esp, 0xc
lea eax, [esp + 0x60]
push eax
lea eax, [esp + 0x26c]
push eax
push str.NormDllPaths
push str.Parameters
call ebp
movzx eax, byte [0x4462c0]
lea ecx, [esp + 0x60]
push ecx
push eax
push str.ForceTgtCon
test esi, esi
push str.Parameters
setne byte [0x430f39]
call ebx
mov esi, eax
lea eax, [esp + 0x268]
push esi
push 0x416df8
push eax
call edi
add esp, 0xc
lea eax, [esp + 0x60]
push eax
lea eax, [esp + 0x26c]
push eax
push str.ForceTgtCon
push str.Parameters
call ebp
movzx eax, byte [0x430f38]
lea ecx, [esp + 0x60]
test esi, esi
push ecx
setne byte [0x4462c0]
push eax
push str.ReceiveDbgLog
push str.Parameters
call ebx
mov esi, eax
lea eax, [esp + 0x268]
push esi
push 0x416df8
push eax
call edi
add esp, 0xc
lea eax, [esp + 0x60]
push eax
lea eax, [esp + 0x26c]
push eax
push str.ReceiveDbgLog
push str.Parameters
call ebp
movzx eax, byte [0x4462c1]
lea ecx, [esp + 0x60]
push ecx
push eax
push str.UseMainThread
test esi, esi
push str.Parameters
setne byte [0x430f38]
call ebx
mov esi, eax
lea eax, [esp + 0x268]
push esi
push 0x416df8
push eax
call edi
add esp, 0xc
lea eax, [esp + 0x60]
push eax
lea eax, [esp + 0x26c]
push eax
push str.UseMainThread
push str.Parameters
call ebp
movzx eax, byte [0x430f3a]
lea ecx, [esp + 0x60]
push ecx
push eax
push str.DirectInject
test esi, esi
push str.Parameters
setne byte [0x4462c1]
call ebx
mov esi, eax
lea eax, [esp + 0x268]
push esi
push 0x416df8
push eax
call edi
add esp, 0xc
lea eax, [esp + 0x60]
push eax
lea eax, [esp + 0x26c]
push eax
push str.DirectInject
push str.Parameters
call ebp
lea eax, [esp + 0x60]
test esi, esi
push eax
push dword [0x4462c4]
setne byte [0x430f3a]
push str.InjectType
push str.Parameters
call ebx
mov esi, eax
lea eax, [esp + 0x268]
push esi
push 0x416df8
push eax
call edi
add esp, 0xc
lea eax, [esp + 0x60]
push eax
lea eax, [esp + 0x26c]
push eax
push str.InjectType
push str.Parameters
call ebp
lea eax, [esp + 0x60]
mov dword [0x4462c4], esi
push eax
push dword [0x4462c8]
push str.DrvTimeout
push str.Parameters
call ebx
mov esi, eax
lea eax, [esp + 0x268]
push esi
push 0x416df8
push eax
call edi
add esp, 0xc
lea eax, [esp + 0x60]
push eax
lea eax, [esp + 0x26c]
push eax
push str.DrvTimeout
push str.Parameters
call ebp
lea eax, [esp + 0x60]
mov dword [0x4462c8], esi
push eax
push dword [0x430f3c]
push str.DrvAltitude
push str.Parameters
call ebx
mov esi, eax
lea eax, [esp + 0x268]
push esi
push 0x416df8
push eax
call edi
add esp, 0xc
lea eax, [esp + 0x60]
push eax
lea eax, [esp + 0x26c]
push eax
push str.DrvAltitude
push str.Parameters
call ebp
lea eax, [esp + 0x60]
mov dword [0x430f3c], esi
mov esi, dword [sym.imp.KERNEL32.dll_GetPrivateProfileStringW]
push eax
push 0x80
push 0x4462d0
push 0x416d74
push str.DrvName
push str.Parameters
call esi
lea eax, [esp + 0x60]
push eax
push 0x4462d0
push str.DrvName
push str.Parameters
call ebp
lea eax, [esp + 0x60]
push eax
push 0x80
push 0x4463d0
push 0x416d74
push str.SrvName
push str.Parameters
call esi
lea eax, [esp + 0x60]
push eax
push 0x4463d0
push str.SrvName
push str.Parameters
call ebp
lea eax, [esp + 0x60]
push eax
push 0x80
push 0x4464d0
push 0x416d74
push str.MtxName
push str.Parameters
call esi
lea eax, [esp + 0x60]
push eax
push 0x4464d0
push str.MtxName
push str.Parameters
call ebp
mov dword [esp + 0x1c], 0x597e96c4
xor edx, edx
mov dword [esp + 0x20], 0x582497d0
mov dword [esp + 0x24], 0x58a0953c
mov dword [esp + 0x28], 0x5ff0936c
mov dword [esp + 0x2c], 0x57009a3c
mov dword [esp + 0x30], 0x43e08adc
mov dword [esp + 0x34], 0x6520ac5c
mov dword [esp + 0x38], 0x14a0b65c
mov dword [esp + 0x3c], 0xb1a0445c
mov dword [esp + 0x40], 0xc5a1325d
mov dword [esp + 0x44], 0xf9a39e5f
mov dword [esp + 0x48], 0xa9a6065a
mov dword [esp + 0x4c], 0x59ad5658
mov dword [esp + 0x50], 0x19b45645
mov dword [esp + 0x54], 0x59999667
mov dword [esp + 0x58], 0x59c39635
mov dword [esp + 0x5c], 0x59a09696
mov edi, edi
mov eax, dword [esp + edx*4 + 0x1c]
lea ecx, [edx + 1]
and ecx, 0xf
xor eax, 0x59a0965c
ror eax, cl
mov dword [esp + edx*4 + 0x1c], eax
inc edx
cmp edx, 0x11
jb 0x412e90
lea eax, [esp + 0x60]
push eax
push 0x80
push 0x4465d0
lea eax, [esp + 0x28]
push eax
push str.SrvDesc
push str.Parameters
call esi
lea eax, [esp + 0x60]
push eax
push 0x4465d0
push str.SrvDesc
push str.Parameters
call ebp
mov edi, 0x430ffc
mov ebx, dword [edi - 8]
test ebx, ebx
je 0x412f17
lea eax, [esp + 0x60]
push eax
push 0x10
push edi
push edi
push ebx
push str.NameMarkers
call esi
mov esi, eax
lea eax, [esp + 0x60]
push eax
push edi
push ebx
push str.NameMarkers
call ebp
mov dword [edi - 4], esi
mov esi, dword [sym.imp.KERNEL32.dll_GetPrivateProfileStringW]
add edi, 0x2c
cmp edi, 0x4310d8
jl 0x412ee6
mov edi, str._ldr
mov ebx, dword [edi - 8]
test ebx, ebx
je 0x412f52
lea eax, [esp + 0x60]
push eax
push 0x10
push edi
push edi
push ebx
push str.NameMarkers
call esi
mov esi, eax
lea eax, [esp + 0x60]
push eax
push edi
push ebx
push str.NameMarkers
call ebp
mov dword [edi - 4], esi
mov esi, dword [sym.imp.KERNEL32.dll_GetPrivateProfileStringW]
add edi, 0x2c
cmp edi, 0x430ffc
jl 0x412f27
lea eax, [esp + 0x60]
push eax
push 0x104
push 0x446fc8
push str.DllGlobal
push str.DirGlobal
push str.NameMarkers
call esi
mov esi, eax
lea eax, [esp + 0x60]
push eax
push 0x446fc8
push str.DirGlobal
push str.NameMarkers
call ebp
mov ebp, dword [sym.imp.KERNEL32.dll_lstrlenW]
mov ebx, dword [sym.imp.KERNEL32.dll_lstrcatW]
mov dword [0x4467d8], esi
test esi, esi
je 0x4130cd
cmp word [0x446fca], 0x3a
je 0x41302e
mov cx, word [esp + 0x470]
lea eax, [esp + 0x470]
mov dword [esp + 0x10], eax
cmp cx, 0x5c
je 0x412fde
cmp cx, 0x2f
jne 0x412fe9
lea eax, [esp + 0x472]
mov dword [esp + 0x10], eax
lea ecx, [eax + esi*2]
movzx eax, word [ecx - 2]
cmp eax, 0x5c
je 0x412ffa
cmp eax, 0x2f
jne 0x413000
xor eax, eax
mov word [ecx - 2], ax
mov edi, dword [sym.imp.KERNEL32.dll_lstrcpyW]
lea eax, [esp + 0x470]
push 0x446fc8
push eax
call edi
push 0x446dc0
push 0x446fc8
call edi
push dword [esp + 0x10]
push 0x446fc8
call ebx
jmp 0x413050
movzx eax, word [esi*2 + 0x446fc6]
cmp eax, 0x5c
je 0x413040
cmp eax, 0x2f
jne 0x41304a
xor eax, eax
mov word [esi*2 + 0x446fc6], ax
mov edi, dword [sym.imp.KERNEL32.dll_lstrcpyW]
mov ax, word [0x446fc8]
mov word [esp + 0x14], ax
mov eax, 0x3a
mov word [esp + 0x16], ax
lea eax, [esp + 0x268]
push 0x104
push eax
lea eax, [esp + 0x1c]
mov dword [esp + 0x20], 0
push eax
call dword [sym.imp.KERNEL32.dll_QueryDosDeviceW]
test eax, eax
je 0x4130d3
push 0x446fcc
lea eax, [esp + 0x26c]
push eax
call ebx
mov eax, 0x3f
mov dword [esp + 0x270], 0x3f005c
mov word [esp + 0x274], ax
lea eax, [esp + 0x270]
push eax
push 0x446fc8
call edi
push 0x446fc8
call ebp
mov dword [0x4467d8], eax
jmp 0x4130d3
mov edi, dword [sym.imp.KERNEL32.dll_lstrcpyW]
cmp word [0x4462d0], 0
jne 0x41315a
movzx ecx, word [esp + 0x60]
or edx, 0xffffffff
or esi, 0xffffffff
xor eax, eax
test ecx, ecx
je 0x413110
test edx, edx
je 0x413110
movzx ecx, cx
cmp ecx, 0x5c
je 0x413103
cmp ecx, 0x2f
jne 0x413105
mov esi, eax
movzx ecx, word [esp + eax*2 + 0x62]
inc eax
dec edx
test ecx, ecx
jne 0x4130f2
lea eax, [esp + 0x62]
lea eax, [eax + esi*2]
push eax
push 0x4462d0
call edi
mov cl, byte [0x4462d0]
or edx, 0xffffffff
or esi, 0xffffffff
xor eax, eax
test cl, cl
je 0x41314d
test edx, edx
je 0x413149
cmp cl, 0x2e
jne 0x41313c
mov esi, eax
mov cl, byte [eax*2 + 0x4462d2]
inc eax
dec edx
test cl, cl
jne 0x413131
test esi, esi
jns 0x413150
lea esi, [eax - 1]
xor eax, eax
mov word [esi*2 + 0x4462d0], ax
cmp word [0x4463d0], 0
jne 0x4131e9
movzx ecx, word [esp + 0x60]
or edx, 0xffffffff
or esi, 0xffffffff
xor eax, eax
test ecx, ecx
je 0x41319e
lea esp, [esp]
test edx, edx
je 0x41319e
movzx ecx, cx
cmp ecx, 0x5c
je 0x413191
cmp ecx, 0x2f
jne 0x413193
mov esi, eax
movzx ecx, word [esp + eax*2 + 0x62]
inc eax
dec edx
test ecx, ecx
jne 0x413180
lea eax, [esp + 0x62]
lea eax, [eax + esi*2]
push eax
push 0x4463d0
call edi
mov cl, byte [0x4463d0]
or edx, 0xffffffff
or esi, 0xffffffff
xor eax, eax
test cl, cl
je 0x4131dc
nop
test edx, edx
je 0x4131d8
cmp cl, 0x2e
jne 0x4131cb
mov esi, eax
mov cl, byte [eax*2 + 0x4463d2]
inc eax
dec edx
test cl, cl
jne 0x4131c0
test esi, esi
jns 0x4131df
lea esi, [eax - 1]
xor eax, eax
mov word [esi*2 + 0x4463d0], ax
cmp word [0x4464d0], 0
jne 0x41326c
movzx ecx, word [esp + 0x60]
or edx, 0xffffffff
or esi, 0xffffffff
xor eax, eax
test ecx, ecx
je 0x413222
test edx, edx
je 0x413222
movzx ecx, cx
cmp ecx, 0x5c
je 0x413215
cmp ecx, 0x2f
jne 0x413217
mov esi, eax
movzx ecx, word [esp + eax*2 + 0x62]
inc eax
dec edx
test ecx, ecx
jne 0x413204
lea eax, [esp + 0x62]
lea eax, [eax + esi*2]
push eax
push 0x4464d0
call edi
mov cl, byte [0x4464d0]
or edx, 0xffffffff
or esi, 0xffffffff
xor eax, eax
test cl, cl
je 0x41325f
test edx, edx
je 0x41325b
cmp cl, 0x2e
jne 0x41324e
mov esi, eax
mov cl, byte [eax*2 + 0x4464d2]
inc eax
dec edx
test cl, cl
jne 0x413243
test esi, esi
jns 0x413262
lea esi, [eax - 1]
xor eax, eax
mov word [esi*2 + 0x4464d0], ax
movzx ecx, word [esp + 0x60]
or edx, 0xffffffff
or esi, 0xffffffff
xor eax, eax
test ecx, ecx
je 0x41329e
lea ecx, [ecx]
test edx, edx
je 0x41329e
movzx ecx, cx
cmp ecx, 0x5c
je 0x413291
cmp ecx, 0x2f
jne 0x413293
mov esi, eax
movzx ecx, word [esp + eax*2 + 0x62]
inc eax
dec edx
test ecx, ecx
jne 0x413280
lea eax, [esp + 0x62]
lea eax, [eax + esi*2]
push eax
push 0x4466d0
call edi
mov cl, byte [0x4466d0]
or edx, 0xffffffff
or esi, 0xffffffff
xor eax, eax
test cl, cl
je 0x4132dc
nop
test edx, edx
je 0x4132d8
cmp cl, 0x2e
jne 0x4132cb
mov esi, eax
mov cl, byte [eax*2 + 0x4466d2]
inc eax
dec edx
test cl, cl
jne 0x4132c0
test esi, esi
jns 0x4132df
lea esi, [eax - 1]
push str._ldr
xor eax, eax
push 0x446a10
mov word [esi*2 + 0x4466d0], ax
call ebx
push 0x430f78
push 0x446a10
call ebx
movzx eax, word [0x430f6c]
push 0x446a10
mov word [0x446a08], ax
call ebp
push str._ldr
push 0x446a58
mov dword [0x446a0c], eax
call ebx
push 0x430fa4
push 0x446a58
call ebx
movzx eax, word [0x430f98]
push 0x446a58
mov word [0x446a50], ax
call ebp
mov dword [0x446a54], eax
xor ebp, ebp
mov esi, 0x446aa0
mov eax, ebp
mov dword [esi], 0x2e
and eax, 1
imul ebx, eax, 0x2c
mov eax, ebp
sar eax, 1
and eax, 1
imul edi, eax, 0x2c
add ebx, 0x431048
add edi, 0x430ff0
lea eax, [edi + 0xc]
push eax
push esi
call dword [sym.imp.KERNEL32.dll_lstrcatW]
lea eax, [ebx + 0xc]
push eax
push esi
call dword [sym.imp.KERNEL32.dll_lstrcatW]
mov ax, word [edi]
or ax, word [ebx]
push esi
mov word [esi - 8], ax
call dword [sym.imp.KERNEL32.dll_lstrlenW]
mov dword [esi - 4], eax
inc ebp
add esi, 0x48
cmp esi, 0x446bc0
jl 0x413352
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x668
ret