Привет сообщество stackoverflow,
Недавно я перешел с Windows на Linux, как и все мои приложения и проекты. Я думаю, что это лучший выбор, который я когда-либо делал, но я не уверен, подходит ли он для внедрения Windows DLL в Windows программ, которые работают с Wine.
Я знаю, что .so - это формат общей библиотеки для Linux, но я не могу найти эквивалентный порт этой библиотеки DLL ... Я попытался запустить Extreme Injector, Xenos инжектор, а также мой Я написал собственный с Wine, который работает безупречно в Windows, но это дало мне массу ошибок и даже не запустило эти инжекторы.
Инжектор, который я скомпилировал в Windows:
#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>
DWORD GetProcId(const char* 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 (!_stricmp(procEntry.szExeFile, procName))
{
procId = procEntry.th32ProcessID;
break;
}
} while (Process32Next(hSnap, &procEntry));
}
}
CloseHandle(hSnap);
return procId;
}
int main()
{
const char* dllPath = "mydll.dll";
const char* procName = "program.exe";
DWORD procId = 0;
while (!procId)
{
procId = GetProcId(procName);
Sleep(30);
}
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, 0, procId);
if (hProc && hProc != INVALID_HANDLE_VALUE)
{
void* loc = VirtualAllocEx(hProc, 0, MAX_PATH, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
WriteProcessMemory(hProc, loc, dllPath, strlen(dllPath) + 1, 0);
HANDLE hThread = CreateRemoteThread(hProc, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, loc, 0, 0);
if (hThread)
{
CloseHandle(hThread);
}
}
if (hProc)
{
CloseHandle(hProc);
}
return 0;
}
Почему конкретно мой инжектор не будет работать под Wine (и другими)? Я думаю, что это более сложный вопрос, чем кажется на первый взгляд, но, возможно, кто-то знает ответ на этот вопрос.
Я просто ищу простой метод для внедрения Windows DLL в Windows запущенных приложений на Linux с вином. Есть способ сделать это? Также, если кто-то знает, как изменить простой инжектор в коде Windows, чтобы он работал с Wine, и объяснить, почему эти конкретные изменения должны быть выполнены, чтобы он работал, это было бы очень полезно.
Спасибо за ваше время.
Привет