Re-implementation of CCob's C# ThreadlessInject technique in Golang.
ThreadlessInject technique patches the first bytes of a Windows function in a remote process to call our shellcode loader. When the remote function is called, the loader patches back the function and runs our shellcode.
This technique allows shellcode injection without the need for an execution trigger primitive thus obfuscating the usual 3-step "Alloc-Write-Exec" injection timeline. Similar techniques already existed and were known as "function stomping" (as described in great blogpost by KlezVirus), however CCob's loader subtlely saves+recovers the registers and stack state so that 1) the hooked function still works properly and 2) only "one-time" hook meaning that further calls to the remote function do not run the shellcode anymore.
export GOOS=windows && go build -o tinject.exe threadlessinject.go
# Example usage
.\tinject.exe -pid 1234 -fct NtOpenFile -dll ntdll.dll