Я написал код 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++
Программы на C++. Форум разработчиков
1715715778
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;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78480340/how-to-run-a-dll-export-function-by-injecting-it-into-a-remote-process-copying[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия