【发布时间】:2017-05-19 04:19:24
【问题描述】:
我在我的机器上用 C++ 创建了一个library 注入方法,当我尝试将特定的 dll 注入进程时效果很好。但是,当我在朋友的计算机上运行程序时(未安装 Visual Studio 的可再发行组件),我被警告我需要 MSVCR 等...(可再发行组件)。
所以我在 release 模式下编译,在 Visual Studio 2012 中使用以下设置:Runtime Library : Multi-threaded /MT。现在当我在我朋友的电脑上运行它时
机器我被警告我只需要库MSVCP110D.dll(奇怪,要求调试版本)(没有防病毒软件,并且 UAC 被禁用)。
我在发布路径中手动复制了请求的库,但仍然无法正常工作。
这是我做的注入代码:
int inject(string lpLibraryPath)
{
HANDLE hProc;
LPVOID paramAddr;
HINSTANCE hDll;
hDll = LoadLibrary(L"KERNEL32");
fpLoadLibrary LoadLibraryAddr = (fpLoadLibrary)GetProcAddress(hDll, "LoadLibraryA");
hProc = OpenProcess(PROCESS_ALL_ACCESS, false, id);
paramAddr = VirtualAllocEx(hProc, 0, strlen(lpLibraryPath.c_str()) + 1, MEM_COMMIT, PAGE_READWRITE);
if(WriteProcessMemory(hProc, paramAddr, lpLibraryPath.c_str(), strlen(lpLibraryPath.c_str()) + 1, NULL) == NULL)
{
return 0;
}
CreateRemoteThread(hProc, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibraryAddr, paramAddr, 0, 0);
CloseHandle(hProc);
return 1;
}
};
我在 stackoverflow 上找到了一些参考资料,但没有任何帮助。 喜欢 msvcp110.dll, how do I get around it? 或 Fixing the "MSVCP110D.dll is missing from your computer" issue
【问题讨论】:
-
也许...机器受管理员权限保护..
-
请注意,您并没有检查
OpenProcess是否正确打开进程,(可能会失败),您使用了非常重的访问权限参数PROCESS_ALL_ACCESS,也许可以尝试使用PROCESS_VM_WRITE- @ 987654333@ 试试这个。让您的朋友以管理员权限运行该程序也可能是一个不错的建议。 -
@ViniyoShouta -
PROCESS_VM_WRITE不够用 - 需要PROCESS_VM_OPERATION|PROCESS_VM_WRITE|PROCESS_CREATE_THREAD -
但你必须和 dll 也使用静态 CRT 编译 :)
-
@MarkRansom 这个
MSVCP110D.dll不是MFC,只是CRT的一部分。
标签: c++ windows winapi visual-c++