【发布时间】:2014-03-24 18:34:58
【问题描述】:
我正在尝试解决这种情况。 我有win32程序,等待特定进程启动“Example.exe”,然后程序将“my.dll”注入进程“Example.exe”
它可以正常工作,直到用户在具有特定但允许的字符的文件夹下有程序,例如在我的国家默认文件夹名称是“Nová složka”(新文件夹)
我尝试使用相对路径
"//my.dll"
"/my.dll"
"\\my.dll"
"\my.dll"
不成功...我也尝试了不同的方法将字符串(QString)转换为字符数组。
在 Qt 5.1.1 中开发
这是程序查找.dll路径的代码
QString actualPath(QDir::currentPath() + "/my.dll");
ui->lblDebug->setText(actualPath);
const char* myChar = QString(actualPath.toUtf8()).toStdString().c_str();
QString q = QString::fromStdString(myChar);
ui->lblDebug->setText(q);
这里是注入部分
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PE32.th32ProcessID);
hModule = (LPVOID)VirtualAllocEx(hProcess, NULL, 512, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess, hModule, (LPVOID)myChar, 512, NULL);
CreateRemoteThread(hProcess, NULL, NULL, (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(L"kernel32"), "LoadLibraryA"), hModule, NULL, NULL);
CloseHandle(hProcess);
CloseHandle(hSnapshot);
qDebug() << "INJECT:DONE!";
return true; ExitProcess(0);
break;
你有什么想法,如何将正确的字符传递给函数 WriteProcessMemory 正确的路径?谢谢。
【问题讨论】:
-
错误信息是什么?可能是字符编码问题。
-
没有错误信息,它编译程序没有错误,它也适用于“C:\my.dll”或“D:\Program Files\My files\my.dll”等路径。 dll”,但不使用“C:\Nová složka\my.dll”
-
@AdamKennyŠmíd:这并没有解决 Drew MgGowen 所说的问题。仅仅因为代码编译只意味着代码在语法上是正确的。这并不意味着它会正确运行。暂时忘记 WriteProcessMemory。你能写一个简单的 Windows 程序来访问那个目录吗?也许从那开始,因为这看起来确实像一个编码问题。
-
例如,能否获取这个示例程序来判断路径是否存在? msdn.microsoft.com/en-us/library/windows/desktop/… 如果不是,那么问题出在编码上。要么是代码页问题,要么您需要正确转义字符串以解决这些外来字符。
-
现在我的程序非常大,我有很多功能可以处理文件、文件夹,并将它们上传到 FTP。如果我使用 Qt 函数,它会非常好用,但对于注入,我必须使用 windows 函数。 Project\Editor\Files 保存在 UTF-8 下
标签: c++ qt dll code-injection