你好stackoverflow社区
最近我从Windows切换到Linux,我所有的应用程序和项目也是如此。我认为这是我做过的最好的选择,但我不确定是否也可以将Windows DLL注入到运行Wine的Windows程序中。
我知道.so是Linux的共享库格式,但我找不到该dll的等效端口。我试过运行极端注射器,Xenos注射器,也是我自己写的一个与葡萄酒,在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注入到在Linux上运行的Windows应用程序中。有办法做到吗?另外,如果有人知道如何修改Windows代码下的简单注入器,使其与Wine一起工作,并解释为什么这些特定的修改必须到位,使其工作,这将是非常感激的。
谢谢你的时间。
欢迎光临
1条答案
按热度按时间ccrfmcuu1#
DLL注入应该与wine一起工作,前提是注入器和目标程序都在相同的wine前缀中运行。
You can use mingw to compile DLLs on Linux.
但是要注意大小写敏感性,导入
Windows.h
不起作用,导入windows.h
就可以了。以下是可用于测试的示例DLL的代码:正如上面链接的文章中所写的,链接时需要添加
-shared -Wl,--subsystem,windows
。