Ir para conteúdo

CreateRemoteThread não retorna erro mas não funciona


bornman

Posts Recomendados

Olá, estou aprendendo sobre injeção em processos e estou tentando criar um injetor de dll em C++, utilizando WriteProcessMemory e CreateRemoteThread, as funções não retornam erros porém a dll não é injetada.

Segue o código:

#include "pch.h"
#include <iostream>
#include "Injections.h"

int main(int argc, char *argv[])
{
	const char *dllPath = "example.dll";
	DWORD processId = getProcID(L"process.exe");
	HANDLE procHandle = getProcHandle(processId);
	bool inj = injectDll(procHandle, dllPath);
	CloseHandle(procHandle);
	getchar();
	return 0;
}
#include "pch.h"
#include "Injections.h"
#include <iostream>

DWORD getProcID(const wchar_t* procName) {
	DWORD procId = 0;
	HANDLE hSnap = (CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0));
	if (hSnap != INVALID_HANDLE_VALUE) {
		PROCESSENTRY32 procEntry;
		procEntry.dwSize = sizeof(procEntry);

		if (Process32First(hSnap, &procEntry)) {
			do {
				if (!_wcsicmp(procEntry.szExeFile, procName)) {
					procId = procEntry.th32ProcessID;
					break;
				}
			} while (Process32Next(hSnap, &procEntry));
		}
	}
	CloseHandle(hSnap);
	return procId;
}

HANDLE getProcHandle(DWORD pid) {
	HANDLE h = OpenProcess(PROCESS_CREATE_THREAD | 
						   PROCESS_QUERY_INFORMATION | 
						   PROCESS_VM_READ | 
						   PROCESS_VM_WRITE | 
						   PROCESS_VM_OPERATION, FALSE, pid);

	if (h == NULL) {
		std::cout << "Can't get process handle!" << std::endl;
		exit(-1);
	}

	return h;
}

bool injectDll(HANDLE procHandle, const char *dllPath) {
	LPVOID loadPath = (LPVOID)VirtualAllocEx(procHandle, 0, strlen(dllPath)+1, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);

	if (loadPath == NULL) {
		std::cout << "Can't allocate memory!" << std::endl;
		exit(-1);
	}

	int n = WriteProcessMemory(procHandle, loadPath, dllPath, strlen(dllPath)+1, NULL);

	if (n == 0) {
		std::cout << "Couldn't write memory!" << std::endl;
	}

	HANDLE thread = CreateRemoteThread(procHandle, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, loadPath, 0, NULL);

	if (thread != NULL) {
		std::cout << "Injection Sucessfull!" << std::endl;
		return true;
	}

	exit(-1);
}

 

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...