2016-10-10 3 views
-4

Ich bin ziemlich neu in C++, also meine Frage ist: Gibt es eine Alternative zu OpenProcess()? Das Spiel lässt mich nicht darauf zugreifen, Ich habe versucht, nach einem kleineren Zugriff als PROCESS_ACCESS_ALL zu fragen, da dies eine riesige rote Flagge sein könnte. Aber hier ist mein Quellcode:C++ Alternative zu OpenProcess() (Programm will mir keine Erlaubnis geben)

#include "stdafx.h" 
#include <iostream> 
#include <string.h> 
#include <Windows.h> 



int main() 
{ 
    HWND hWnd = FindWindow(NULL, "Growtopia"); 
    if (hWnd == NULL) 
    { 
     std::cout << "ERROR: Unable to find window process" << std::endl; 
     Sleep(2500); 
     exit(-1); 
    } 
    DWORD pID; 
    GetWindowThreadProcessId(hWnd, &pID); 
    HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, false, pID); 
    if (!hProc) 
    { 
     std::cout << "Error: Unable to gain access to window" << std::endl; 
     Sleep(2500); 
     exit(-1); 
    } 



     return 0; 
} 

PS: Das Spiel Ich versuche, Zugang zu erhalten zu Growtopia ist, wenn Sie es nicht von der Findwindow herausfinden konnten,() Funktion :)

Vielen Dank im Voraus .

Edit: Mein purpouse des Programms ist es, einen Wert einer Adresse zu bearbeiten

+0

haben Sie versucht, Ihr Programm als Administrator ausgeführt wird? –

+0

Wenn Sie möchten, dass sich jemand Ihren Code ansieht, fügen Sie ihn bitte in die Frage ein. –

+0

@ Jean-FrançoisFabre Ich nehme an, den Build VS sollte automatisch als Administrator ausführen? Sollte aber nicht das Problem sein, weil ich OpenProcess() auf anderen Fenstern ausprobiert habe und es funktioniert gut. Ich nehme an, sie haben eine Art von Anticheat, die es verhindert. – Albzter

Antwort

2

Mein purpouse des Programms ist es, einen Wert einer Adresse

, dass die Verwendung von WriteProcessMemory() erfordert zu bearbeiten , die erfordert PROCESS_VM_WRITE und PROCESS_VM_OPERATION Berechtigungen für den Zielprozess:

HANDLE hProc = OpenProcess(PROCESS_VM_WRITE | PROCESS_VM_OPERATION, false, pID); 

zu Wenn Sie einen Prozess mit diesen Berechtigungen öffnen, muss der aufrufende Thread die Berechtigung "SeDebugPrivilege" aktiviert haben. Dies bedeutet, dass er als Benutzer ausgeführt werden muss, der Debug-Berechtigungen erhalten kann, z. B. ein Administrator.

Führen Sie Ihre App als Debug-Benutzer (oder dynamisch imitieren einen solchen Benutzer), dann OpenThreadToken() verwenden des anrufenden Thread des aktuellen Zugriffstoken zu öffnen und stellen Sie ihn mit AdjustTokenPrivileges() um sicherzustellen, dass das "SeDebugPrivilege" Privileg aktiv ist, bevor dann OpenProcess() Aufruf:

Changing Privileges in a Token

How to obtain a handle to any process with SeDebugPrivilege