【问题标题】:C++ CreateRemoteThread access violationC++ CreateRemoteThread 访问冲突
【发布时间】:2015-05-05 10:07:07
【问题描述】:

我遇到了函数 CreateRemoteThread 的问题。

我刚刚建立了一个小控制台窗口,要求退出特定的数字(这样只要我想要它就保持打开状态)。 在这个程序里面有一个函数,我找出了内存地址。

现在我想通过 CreateRemoteThread 用第二个程序调用这个函数,但它总是说存在访问冲突。两者的编译方式相同。

这是我远程调用的代码:

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;}

如果我是对的,如果我想注入一些代码,我只需要 VirtualAllocEx 来保留内存空间。但是我只想调用一个程序的函数。

你们有什么想法吗?

搜索并没有真正帮助我。 谢谢!

【问题讨论】:

  • 你从哪里得到的 0x008642D0?
  • Axalo 我使用反汇编程序来获取该地址。查了好几遍,地址应该是对的。这是我的函数的地址。
  • 为什么不使用 GetProcAddress()?
  • 是的,我可能会这样做,但这不是我现在的问题。您认为地址可能有误吗?
  • 你从哪里得到那个缩进“风格”?

标签: c++ createremotethread


【解决方案1】:

对于遇到相同问题的每个人,提供的代码都很好。只是我的示例地址出错了。

无论如何,我希望这是一个关于如何执行所选程序的远程功能的半好例子。

谢谢大家。

【讨论】:

    猜你喜欢
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    相关资源
    最近更新 更多