Я написал код DLL и инжектор (скопируйте путь к dll) для удаленного процесса, и все работает нормально. Сейчас попробую перепрошить инжектор. Я копирую содержимое dll в память целевого процесса вместо пути. Удаленный процесс завершается в CreateRemoteThread. В качестве начального адреса я передаю указатель = ddl_base_address + offset_to_my_function. Как я могу запустить функцию dll в удаленном процессе?
Инжектор:
int FullDllLoad(int processId)
{
DWORD dwBytesRead;
DWORD lastErr = GetLastError();
DWORD_PTR offset = GetFunctionOffset(DLL_PATH, MY_FUNC_NAME);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId);
HANDLE hFile = CreateFileW(DLL_PATH.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD dllFileLength = GetFileSize(hFile, NULL);
LPVOID baseAddress = VirtualAllocEx(hProcess, nullptr, dllFileLength, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
LPVOID lpBuffer = HeapAlloc(GetProcessHeap(), 0, dllFileLength);
ReadFile(hFile, lpBuffer, dllFileLength, &dwBytesRead, NULL);
BOOL isSucceeded = WriteProcessMemory(hProcess, baseAddress, lpBuffer, dllFileLength, NULL);
LPTHREAD_START_ROUTINE pRemoteFunc = (LPTHREAD_START_ROUTINE)((ULONG_PTR)baseAddress + offset);
// Remote process crushes here
HANDLE hThread = CreateRemoteThread(hProcess, nullptr, NULL, (LPTHREAD_START_ROUTINE)pRemoteFunc, baseAddress, NULL, nullptr);
WaitForSingleObject(hThread, INFINITE);
VirtualFreeEx(hProcess, baseAddress, 0, MEM_RELEASE);
CloseHandle(hThread);
CloseHandle(hProcess);
return 0;
}
DLL:
#include "pch.h"
#include
#include
#include
#include
#pragma comment(lib, "mscoree.lib")
using namespace std;
extern "C" __declspec(dllexport) HRESULT MyFunc(_In_ LPCTSTR lpCommand)
{
//...
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Подробнее здесь: https://stackoverflow.com/questions/784 ... ss-copying
Как запустить функцию экспорта DLL, внедрив ее в удаленный процесс (копируя содержимое dll, а не путь) ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Вставить игнор в базу данных, копируя старую запись и изменяя 1 поле в новой записи.
Anonymous » » в форуме Php - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Вставить игнор в базу данных, копируя старую запись и изменяя 1 поле в новой записи.
Anonymous » » в форуме Php - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-