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

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;
}
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;
}
Code:
long MainWindow::onUpdHandleOutput (FXObject *, FXSelector, void *) {
FXchar adressString[100];
sprintf((char*) adressString, "%X", hproc);
FXString actualstring=adressString;
m_phprocLabel->setText(actualstring);
}
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: