我对函数CreateRemoteThread遇到了问题。
我只是建立了一个小的控制台窗口,要求退出一个特定的号码(以便只要我想要它就一直保持打开状态)。
在此程序中,有一个函数可以确定我的内存地址。
现在,我想通过CreateRemoteThread在第二个程序中调用此函数,但它始终表示存在访问冲突。两者都以相同的方式编译。
这是我的远程 call 代码:
bool SetPrivileges(){
HANDLE pt; //process token
TOKEN_PRIVILEGES ptp; //process token privileges
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &pt))
{
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &ptp.Privileges[0].Luid);
ptp.PrivilegeCount = 1;
ptp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (AdjustTokenPrivileges(pt, false, &ptp, sizeof(ptp), NULL, NULL))
{
return true;
}
}
return false;}
int _tmain(int argc, _TCHAR* argv[])
{
if (SetPrivileges())
{
cout << "Enabled custom privileges" << endl;
}
else{
cout << "Could not enable custom privileges" << endl << GetLastError() << endl;
}
CodeHelper ch;
DWORD processId = ch.GetProcessId("CallMeConsole.exe");
HANDLE proc = OpenProcess(PROCESS_ALL_ACCESS, false, processId);
DWORD Testaddress = 0x008642D0;
HANDLE thread = CreateRemoteThread(proc, NULL, 0, (LPTHREAD_START_ROUTINE)Testaddress, NULL, 0, NULL);
/*if (thread != 0)
{
WaitForSingleObject(thread, INFINITE);
CloseHandle(thread);
CloseHandle(proc);
cout << "success!" << endl;
}
else{
cout << "error" << endl;
}*/
return 0;}
如果我是对的,如果我想注入(inject)一些代码,我只需要VirtualAllocEx来保留内存空间。但是我只想调用程序的函数。
你们有什么主意吗?
搜索并没有真正帮助我。
谢谢!
最佳答案
对于遇到相同问题的每个人,提供的代码都可以。只是我的示例地址有误。
无论如何,我希望这是一个如何执行所选程序的远程功能的好例子。
谢谢大家。
关于c++ - C++ CreateRemoteThread访问冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30050027/