Also ich habe deinen Code mal bei mir in die Funktion reinkopiert und er funktioniert Wunderbar.
Bist du sicher, dass Solitär bei dir auch wirklich Solitär heißt? Vielleicht hast du es umbenannt.
Und führst du den Hack als Administrator aus?
Vom Programmiercode her ist alles richtig, anders könnte ich mir das nicht erklären. Du brauchst wohl Admin rechte weil du den Speicher ja ausliest und schreibst.
Ich führe den Hack definitiv als Admin aus, aber du hast mich auf ne verdammt gute Idee gebracht! Meine Firewall hat das als Angriff erkannt und dementsprechend geblockt. Generell gut, aber im Moment nich zu gebrauchen. Ich hab die Firewall dann mal vorrübergehend außer Kraft gesetzt, die Adressen ändern sich schonmal. 78a40a04 vor dem Hinzufügen des Offsets und danach 78a40a34.
Immernoch nicht korrekt, aber sieht besser aus. Es könnte sein, dass die Firewall im ausgeschalteten Zustand immernoch was im System hinterlässt, deswegen deinstallier ich sie eben schnell, teste es erneut und schreib dann nochmal ob das geklappt hat.
Keine Firewall? Du bist aber mutig^^ Ich war schockiert als ich gesehen hab welche Komponenten wohin telefonieren...
@offtopic: Nur zu empfehlen: gibt weder mir noch sonst jemandem die Chance, Codeinjektionen auszuführen.
Naja, hat leider nichts gebracht. Die Adressen bleiben komischerweise die selben, aber der Wert hat sich geändert: 1244812. Schreiben funzt nich, lesen funzt nich. Zu schade
Nein Funktioniert bei mir nicht. Das Problem wird am Handle liegen. Du hast nicht den Prozess als Ziel. Merkst du daran, wenn du Solitär zu machst, kommt zwar eine Fehlermeldung, dass Solitär nicht gefunden wurde, aber die Messageboxen zeigen die gleichen Adresse, wie als es offen war.
Dein Fehler wird irgendwo bei der Übergabe vom Handle / holen der procid liegen.
Mach dir dort am besten auch debug ausgaben.
Von pWnd, hWnd, procid, hproc.
pWnd ist dann das handle von solitär, in hWnd sollte dann das gleiche stehen, weil der ja da rein kopiert. Im Taskmanager solltest du dann auch die procid sehen und kannst vergleichen ob alles gleich ist.
hat hat mal ein DICKES *THANKS verdient ich als anfänger hab alles verstanden und kann jetzt durch deine hilfe solitär hacken.... (jetzt kann mich niemand in solitär schlagen xDD)
hat hat mal ein DICKES *THANKS verdient ich als anfänger hab alles verstanden und kann jetzt durch deine hilfe solitär hacken.... (jetzt kann mich niemand in solitär schlagen xDD)
Es sollte klar sein, dass Solitär hier nur ein Platzhalter für jedes belibige Spiel ist. Ich habe nur Solitär genommen, weil es jeder auf dem Rechner hat und um die Basics zu zeigen. Die Methoden nach Adressen suchen, Pointer finden, verändern, Hack schreiben etc. kannst du alles auch auf andere Spiele anwenden. Bei Onlinespielen geht das natürlich nur teilweise.
Resultat:ccccccfc, procID wurde mir garnicht erst angezeigt.
Da mir procID nicht angezeigt wurde, muss ja etwas falsch bei hWnd usw sein.
Code:
if (pWnd = CWnd::FindWindowExW(NULL,NULL,NULL,_T("Solitaire"))) {
hWnd = HWND(pWnd->GetSafeHwnd());
}else{
AfxMessageBox(_T("Fenster nicht gefunden!"));
}
Einen Fehler finde ich hier nicht.
Die Adressen scheinen auch OK zu sein, hab auch mit CheatEngine überprüft ob sie auch stimmen, ja, das tun sie.
Code:
unsigned long address1 = 0x01007170;
unsigned long offset = 0x30;
unsigned long address2 ;
Bin gerade echt etwas verwirrt. Ich weiß net weshalb es nicht funktioniert..
btw, ich benütze Win XP Prof. (Englische Version, deshalb auch "Solitaire")
Character Set ist auf Unicode eingestellt.
void CCEtrainerDlg::m_lesen(void)
{
if (pWnd = CWnd::FindWindowExW(NULL,NULL,NULL,_T("Solitär")))
{
hWnd = HWND(pWnd->GetSafeHwnd());
}
else
{
AfxMessageBox(_T("Fenster nicht gefunden!"));
}
UpdateData(true);
unsigned long address1 = 0x006660f4;
unsigned long offset = 0x2C;
unsigned long offset2 = 0x10;
unsigned long address2 ;
unsigned long address3 ;
int value ;
DWORD numBytesRead;
HANDLE hProc;
DWORD procID;
if (pWnd = CWnd::FindWindowExW(NULL,NULL,NULL,_T("Solitär"))) {
hWnd = HWND(pWnd->GetSafeHwnd());
}else{
AfxMessageBox(_T("Fenster nicht gefunden!"));
}
UpdateData(true);
unsigned long address1 = 0x006660f4;
unsigned long offset = 0x2C;
unsigned long offset2 = 0x10;
unsigned long address2 ;
unsigned long address3 ;
int value ;
DWORD numBytesRead;
HANDLE hProc;
DWORD procID;
value = _wtoi (m_Value);
WriteProcessMemory(hProc,(LPVOID)address3,&value,sizeof(value),NULL);
UpdateData(false);
CloseHandle(hProc);
}
hm ich habe ein ähnliches problem wie das genannte auf der letzten seite =/
wenn ich auslese kommt ein wert wie 2213313 raus, wenn ich 3 schreibe, dann steht beim nächsten lesen wirklich 3 dort, also scheint er ja die 3 wirklich auf die richtige adresse zu schreiben.....und sie ist auch die richtige denn wenn ich das selbe via CE mache klappts
vielleicht liegts echt am Handle aber komischerweise schreibt er es ja auf die richtige adresse dann müsste es doch eigentlich auch im spiel zu sehen sein oder nicht?