Как запустить функцию экспорта DLL, внедрив ее в удаленный процесс (копируя содержимое dll, а не путь)C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как запустить функцию экспорта DLL, внедрив ее в удаленный процесс (копируя содержимое dll, а не путь)

Сообщение Anonymous »

Я написал код 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»