[Win32] Speichermanipulation, Problem mit Prozess-Handle

Die_Backe

Grünschnabel

Hiho,
also ich bastle grade mithilfe einiger Tutorials, an einem Programm, welches dazu da ist den Speicher von anderen Programmen zu durchleuchten und zu verändern. Der Sinn des ganzen ist es, in Spielen zu schummeln ;) (natürlich nur zum Spaß, nichts ernstes übers Internet oder so). Es gibt schon ein solches Programm, das ist aber nicht für XP geeignet, und ist kostenpflichtig... Deshalb hab ich mich halt selbst rangesetzt.
mein Problem ist jetzt, dass wenn ich einen Prozess öffne, und einen Handle zurückgeben lasse, dieser Handle komsicherweise immer 0x80 ist. Als grafisches Interface benutze ich FOX, aber ich denke nicht dass ich da groß was falsch gemacht hab, bei der Schnittstelle. Da immer nur ein Prozess gleichzeitig geöffnet sein kann, hab ich eine globale Vari namens hproc, die den Handle auf den prozess enthält. ist der Handle 0, ist kein Prozess geöffnet. Hier meine Funktion zum öffnen des Handles:
Code:
HANDLE OpenProcessFromName(char* WindowTitle) {
    HWND hWnd = FindWindow(0,WindowTitle);
    if(!hWnd) return 0;
    DWORD procid;
    GetWindowThreadProcessId(hWnd, &procid);
    if(!procid) return 0;
    HANDLE hproc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procid);
    if(!hproc) return 0;
    return hproc;
}
Aufgerufen wird die Funktion sobald ein Two-State-Button betätigt wird, also ein Button der an oder aus ist, und bei Klick den Zustand wechselt.
Code:
long MainWindow::onToggleHack(FXObject *, FXSelector, void *p)
{
    HackActive=m_pToggleHack->getState(); //globale Variable setzen, die allen Funktionen anzeigt ob es einen geöffneten Prozess geben SOLL.
    return 1; //zeigen dass sich etwas geändert hat und Update auslösen
}

long MainWindow::onUpdHack(FXObject *, FXSelector, void *) {
    FXString tempstr=m_pWindowTitleInput->getText(); //Aus dem Eingabefeld den Titel des zu hackenden Fensters holen
    if (!hproc && HackActive) {
        hproc = OpenProcessFromName((char*) (tempstr.text()));
        return 1;
    }
    if (!HackActive) {
        onCmdCloseHApp(NULL, 0, NULL); //wenn der Prozess geschlossen sein soll, wird die Funktion aufgerufen, die guckt ob der Prozess noch offen ist. Wenn ja, wird er geschlossen und der Handle auf 0 gesetzt.
        return 1;
    }
    return 0;
}
Die erste Funktion wird ausgeführt, wenn der Button geklickt wird. Die zweite wird dauernd aufgerufen. Mit unter dadurch, dass sich etwas ändert, ein Button gedrückt wird etc. Die Ausgabe des Handle erfolgt über ein anderes Textfeld:
Code:
long MainWindow::onUpdHandleOutput (FXObject *, FXSelector, void *) {
    FXchar adressString[100];
    sprintf((char*) adressString, "%X", hproc);
    FXString actualstring=adressString;
    m_phprocLabel->setText(actualstring);
}
auch das ist eine Update-Funktion, und wird oft aufgerufen (immer wenn notwendig um den Wert korrekt anzuzeigen).
Wenn ich einen Prozess öffne, dann springt das Ausgabe-Textfeld auf 80. Wenn ich ihn wieder schließe, dann springt es wieder auf 0. Das kann ich sooft machen wie ich will, und mit so vielen verschiedenen Prozessen wie ich will. Ich hab sogar das Programm 2 Mal gestartet, und unterschiedliche Prozesse geöffnet, der Handle ist immer 0x80. Hab ich da was falsch gemacht? Wenn ja, was?
mfg Backe

Edit: Ich hab mitlerweile einmal rebootet, und nochmal getestet. jetzt ist der Handle immer 0x4C. Vllt hilft das weiter.

Edit: ich merk grade ich hab etwas mist gebaut was das Topic angeht, aber ich hab ja instinktiv einiges Richtig gemacht ;)
-Es geht um C++
-Ich benutze Windows XP
-mein Interface ist mit FOX gemacht
-meine IDE ist Dev-C++

Letztes Edit für heute: Ich hab noch nicht versucht auf den Speicher des Prozesses von dem ich da einen Handle zu haben scheine zuzugreifen, weil für mich ersichtlich ist, dass da was schief gelaufen ist, deshalb hab ich mich nicht getraut ^^
achja, und ich hab das Interface noch nicht so weit fertig als das das gehen würde *hust* :)

Wieder mal Edit: Dass es jetzt 0x4C ist, nichtmehr 0x80, liegt daran, dass ich neu kompiliert hab, nicht am rebooten. Wenn ich zB mit -o kompilieren lasse, dann ist der Wert schon wieder anders. (0x7B0 oder so, aber der genaue Wert spielt ja eh keine Rolle.)
 
Zuletzt bearbeitet:
moin


Ich hab mir jetzt nicht alles durchgelesen, hab Kopfschmerzen...
Aber ich hab schonmal Beispiele gepostet wie man sowas macht.


mfg
umbrasaxum
 
hi,
Danke für die Antwort, ich hab eben mal die Suchfunktion benutzt, um deine Beiträge darüber zu finden. Hab nix gefunden, was direkt mit Speichermanipulation zu tun hat :( Macht aber eigentlich eh nix, weil der Wert sowieso richtig ist. Ich habs bereits geschafft über mein Interface Werte auszugeben, die zu meinem pseudo-falschem Handle gehören. In sofern muss der Prozesshandle ja stimmen. Mich hat nur gewundert dass der Prozess Handle offenbar nicht dynamisch von Windows vergeben wird, sondern in irgendeiner Weise statisch zu sein. Deshalb dachte ich es wäre irgendwas falsch... :suspekt:
mfg Backe :D
 

Neue Beiträge

Zurück