Den Wert folgendes Level4-Pointers möchte ich mit einem Autoit-Script hacken:
Base: 1073EF88
Offset1: 1C
Offset2: 10
Offset3: 4
Offset4: DE4
Dazu habe ich dieses Tutorial gefunden, was beschreibt, wie man den Pointer per Array verwendet:
Soweit sogut.
Zuerst einmal habe ich sie als Variablen deklariert (natürlich mit 0x davor wegen Hex):
Diese Funktion wird durch eine Checkbox gestartet:
Code:
While 1
$msg = GUIGetMsg()
Select
Case $msg = $atkspeedon
AdlibRegister("_atkspeedhack", 20)
EndSelect
WEnd
(Ich weiß, dass das Deaktivieren der Checkbox so keinen Erfolg hätte, aber darum geht es erstmal nicht.)
Hier nochmal der ganze für diese Funktion nötige Code:
Leider hat das überhaupt keine Auswirkungen, der Wert wird nicht geändert.
Wenn ich in Scite per Tools->Go starte, gibts keine Fehlermeldung. Tippfehler und falsch benannte Variablen sollte man also ausschließen können. Die Offsets sind auch korrekt, mit CE funktionieren sie.
Ich vermute stark, dass der Fehler irgendwo im Array liegt. Habe vorher nie Arrays benutzt und bloß versucht, das wie im Tutorial zu machen.
Die mit diesem Befehl gefundene Base ist 0. Kannn das sein? Zumindest würde dann ja mein Pointer wieder stimmen, wenn ich 0 addieren muss.
Die Base des Atkspeed Wertes in CE ist jedenfalls 0x1073EF88 (bezeichnet als $pNetwork).
Edit: Habe die Funktion mal auf ein Minimum reduziert, um den Fehler eingrenzen zu können. Dazu hab ich nen Level1 Pointer genommen, und dazu zwei Funktionen gemacht:
Code:
Func _pointerhack()
_MemoryPointerWrite(0x1073EF88, $OPEN, $instantskilloffset, "2") // Der Pointer führt (theoretisch) genau zu der in _adresshack() genutzten Adresse
EndFunc
Func _adresshack()
_MemoryWrite(0x029FAA70, $OPEN, "2") // 0x029FAA70 hier als Beispiel, Adresse natürlich nach jedem Neustart anders, da dynamisch
EndFunc
Bis auf die in beiden Funktionen gleiche Variable $OPEN , habe ich soweit möglich alle Variablen entfernt. Es bleibt einzig der Array $instantskilloffset, den ich (natürlich vor der Funktion) definiert habe wie folgt:
Code:
Dim $instantskilloffset[2] = [0,0x10AA50]
PS: Jetzt habe ich auch 0 an 0ter Stelle des Pointer-Arrays hinzugefügt. Ein anderes Tutorial besagt, das muss man immer machen, und das meintest du wahrscheinlich mit $base.
Ergebnis ist: Rufe ich die Funktion _adreesshack auf per Adlibregister("_adreesshack") auf, funktioniert es, setze ich an selber Stelle _pointerhack ein, funktioniert es nicht. Der Fehler ist also nun mit Sicherheit eingegrenzt auf diesen Teil des Codes:
Die Art des Fehlers ist immernoch: _pointerhack() bewirkt rein gar nichts. Der Pointer (Base: 0x1073EF88 Offset: 0x10AA50 in CE; hier 0 als Offset0 hinzugefügt) ist definitiv richtig, in CE funktioniert er. Nur, ob der Array richtig definiert ist, weiß ich nicht.
Zumindest bin ich jetzt ziemlich ratlos, da Scite keinerlei Fehler anzeigt und ich die Funktion bereits extrem einfach gestaltet habe.
Global $Base = 0x1073EF88
Global $Offset[4] = [0x1C, 0x10, 0x4, 0xDE4]
Global $Pid = ProcessExists ("der Processname") ; Hier kommt der Processname der Anwndung rein. Findest du im TaskManager
$Open = _MemoryOpen($Pid)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
if GUICtrlRead ($Checkbox1) = 1 Then ; Wenn die checkbox aktiviert ist (Bool wert = 1), dann soll er das machen
$Write = _MemoryPointerWrite ($Base, $Open, $Offset, "Deine Value", "Datentyp") ;Der Datentyp ist nicht immer notwendig.
EndIf
Danke erstmal, werde das nachher mal probieren.
Habe in Google mehrere Threads gefunden, die besagen, dass die Funktionen der Nomadmemory unter Windows Vista oder 7 mit 64bit manchmal Probleme machen können.
Genaueres stand da aber nicht. Weiß jemand näheres dazu?
Danke erstmal, werde das nachher mal probieren.
Habe in Google mehrere Threads gefunden, die besagen, dass die Funktionen der Nomadmemory unter Windows Vista oder 7 mit 64bit manchmal Probleme machen können.
Genaueres stand da aber nicht. Weiß jemand näheres dazu?
Liegt daran das Memorygetbaseadress Probleme macht.
Versuche mal mein Script da funktionert die Funktion richtig.
$PID = ProcessExists(""&$prozessname&"")
If $PID > 0 Then
$Handle = _MemoryOpen($PID)
$Address = _MemoryModuleGetBaseAddress(ProcessExists(""&$prozessname&""), ""&$prozessname&"")
$Address = "0x" & Hex($Address + Dec("1073EF88"))
Dim $Offset[5] = [0 ,0x1C, 0x10, 0x4, 0xDE4 ; zuerst das ne 0, anschließend das Offset aus der 2ten Suche, dann das erste Offset
Else
Exit
EndIf
Danke, durch den Teil hab ich jetzt auch verstanden, was Lawliet schon meinte, dass ich $base zu der Base aus CE addieren muss.
Bin dabei das jetzt zu testen, vielleicht ist das ja die Lösung des Problems.
Quote:
Originally Posted by SwarN
Dann mach es doch erstmal Schritt für Schritt und lass dir deine
Adress Werte erstmal ausgeben um zu sehen ob die Adresse noch richtig ist.
Global $Base = 0x1073EF88
Global $Offset[4] = [0x1C, 0x10, 0x4, 0xDE4]
Global $Pid = ProcessExists ("der Processname") ; Hier kommt der Processname der Anwndung rein. Findest du im TaskManager
$Open = _MemoryOpen($Pid)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
if GUICtrlRead ($Checkbox1) = 1 Then ; Wenn die checkbox aktiviert ist (Bool wert = 1), dann soll er das machen
$Write = _MemoryPointerWrite ($Base, $Open, $Offset, "Deine Value", "Datentyp") ;Der Datentyp ist nicht immer notwendig.
EndIf
$Close = _MemoryClose($Open)
WEnd
Auf den ersten Blick scheint das ziemlich ähnlich zu meinem Skript, ich fürchte _MemoryPointerWrite wird hierbei dasselbe Problem machen. Probiere ich auch jetzt mal aus.
Edit:
So, habe jetzt glaube ich alle Ratschläge umgesetzt:
- Die kürzere Variante der Arraydefinition (siehe Lawliets Post)
- im Array als Offset0 0 hinzugefügt
- SetPrivilege("SeDebugPrivilege", 1) hinzugefügt
- Die Pointer.au3 von Logtetsch statt meiner Nomadmemory verwendet
Ergebnis bis jetzt:
Mit der _MemoryModuleGetBaseAddress aus der Pointer.au3 kriege ich die wohl richtige Base raus. Diese habe ich wie von SingularPlex beschrieben zu der Base aus CE addiert und die Summe als Base für _MemoryPointerwrite benutzt.
Mit dem Befehl _MemoryWrite kann ich problemlos den Wert verändern. Mit _MemoryPointerWrite geht es bei gleichen Offsets nicht. Weder in meinem Skript, noch in dem von Logtetsch - vermutlich aus dem selben Grund.
Hier mal der relevante Teil des aktuellen Skripts:
Code:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <Pointer.au3>
#include <Array.au3>
#RequireAdmin
#region ### GUI Section ###
Global $Form1 = GUICreate("Trainer", 300, 400)
Global $hackon = GUICtrlCreateCheckbox("Atkspeed", 8, 10)
GUISetState(@SW_SHOW)
#endregion ### GUI Section ###
#region ### Pointer Definition ###
Global $pnetwork = 0x1073EF88 ; Base aus CE
Global $instantskilloffset = 0x10AA50
Dim $instantskilloffsetarray[2] = [0, 0x10AA50]
#endregion ### Pointer Definition ###
Global $PID = ProcessExists("Nksp.exe")
SetPrivilege("SeDebugPrivilege", 1) ;
Global $OPEN = _MemoryOpen($PID)
Global $base = _MemoryModuleGetBaseAddress($PID,"Nksp.exe")
Global $pnetworkbase = $base + $pnetwork ; Addieren der Bases aus CE und MemoryModuleGetBaseAddress
#region ### Verarbeite Signale des GUI ###
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Exit
Case $hackon
AdlibRegister("_arrayhack") ; hier wechsel ich zwischen beiden Hacks
EndSwitch
WEnd
#endregion ### Verarbeite Signale des GUI ###
Func _arrayhack() ; funktioniert nicht
_MemoryPointerWrite($pNetworkBase, $OPEN, $instantskilloffsetarray, "3", 'dword')
EndFunc ;==>_arrayhack
Func _testhack() ; funktioniert
$pnetworkvalue = _MemoryRead($pnetwork,$OPEN,'dword')
_MemoryWrite($pnetworkvalue+$instantskilloffset,$OPEN,"4")
EndFunc ;==>_testhack
Könnte mal jemand, der Win7 64bit verwendet und eine Nomadmemory.au3 bzw. Pointer.au3 hat, mit der sowohl _MemoryModuleGetBaseAddress als auch _MemoryPointerWrite bei ihm funktionieren, die Datei hochladen.
Dann könnte ich zumindest sichergehen, dass der Fehler tatsächlich in meinem Skript liegt.
Mit Ausnahme von SwarNs Beitrag entheilt jede Antwort bzw. jedes Script etwas falsches.
"_MemoryGetBaseAddress()" ist nicht immer notwendig. Durch die Verwendung dieser Funktion und der vorgeschlagen Vorgehensweise von Lawliet! würde das nie funktionieren, außer man würde den Rückgabewert (was hier entweder "0x00400000" (Nksp.exe) oder "0x11000000" (Engine.dll) wäre) von der Base subtrahieren. Das macht keinen Sinn, unnötiges benutzen der Funktion kostet zudem unnötig Performanz.
Ich spar es mir jetzt einfach mal näher darauf einzugehen.
Das funktioniert bei mir mit dem Skript leider auch nicht.
Falls du Win7 64bit hast, lad mal bitte deine Nomadmemory hoch.
PS: Wozu
Code:
GUIGetMsg() == -3
?
Ist -3 der Parameter für Gui_Event_Close?
Und ist der BitAND Befehl für irgendwas wichtig? Nach meinem Verständnis könnte man an der Stelle genauso gut schreiben:
Die Version hat weder Xtrap noch Antiautoit.
Außerdem funktioniert es ja, wenn ich wie von Swarn beschrieben nur _MemoryRead und _MemoryWrite benutze. Mit den selben Pointern.
Bloß _MemoryPointerWrite geht nicht. Langsam glaube ich echt es liegt an der Nomadmemory. Wär cool wenn jemand mit Win7 64bit mal seine funktionierende hochladen könnte.
Edit: Der Return der _MemoryPointerWrite ist Errorcode 0. Trotzdem funktioniert es nicht.
Das ist übrigens die von mir verwendete Pointer.au3 (von SingularPlex):
Edit2: Hab vermutlich die Ursache gefunden:
Bei euch geht es, da ihr AutoIt schon länger installiert habt, und bei mir nicht, da ich gerade erst die neue Version installiert habe.
Muss mir anscheinend nur Version 3.3.6.1 installieren damit es geht.
Die Version hat weder Xtrap noch Antiautoit.
Außerdem funktioniert es ja, wenn ich wie von Swarn beschrieben nur _MemoryRead und _MemoryWrite benutze. Mit den selben Pointern.
Bloß _MemoryPointerWrite geht nicht. Langsam glaube ich echt es liegt an der Nomadmemory. Wär cool wenn jemand mit Win7 64bit mal seine funktionierende hochladen könnte.
Edit: Der Return der _MemoryPointerWrite ist Errorcode 0. Trotzdem funktioniert es nicht.
Das ist übrigens die von mir verwendete Pointer.au3 (von SingularPlex):
Edit2: Hab vermutlich die Ursache gefunden:
Bei euch geht es, da ihr AutoIt schon länger installiert habt, und bei mir nicht, da ich gerade erst die neue Version installiert habe.
Muss mir anscheinend nur Version 3.3.6.1 installieren damit es geht.
Darauf hätte ich auch selbst kommen können.
Der 2. post von mir (alter Account) brachte die Lösung.
Vllt. auch noch hilfreich für andere.
CE 13* multilevel pointer with some skills... 05/13/2011 - Kal Online - 2 Replies Hi guys, i got a little problem, mby u can help me out.
I used CE and created most of the pointer that able to ( speed, ug, F1 , charcount , setframe (well yeah r11 standart disabled it but anyway ) , Health(useless) , Mana(useless) , Otp(useless), Eva(useless) , Berserk , EmergencyEscape , Commander calls , Commander elastic shield.
Skills are 13x multilevel pointers and also dont know how to get the pointer of skills that u attack monsters... (not like zerk,shields,EE) like...
So das wars mit Hacken/pointer suchen^^ 03/02/2011 - 4Story - 6 Replies CE geht zwar unter 64bit nicht aus aber man kann damit nix mehr finden...
Im Speicher ist nix mehr drin bei der Tclient...
Keine Ahnung was sie wieder gemacht haben^^
Multilevel Pointer 12/03/2010 - General Coding - 3 Replies Heyho ePvpers,
since i'm learning c++, i developed an application with multilevel pointers and a tricky algo.
i wanted to know if somebody could find the static pointer.
btw its a console app
Todo:
Try to find the static pointer of the number and post your solution if you got it.
VirusTotal Scan
[TUT] Video zu CE+Pointer hacken & Skillhack verkürzen [Mit Videos] 10/24/2010 - 4Story - 11 Replies Hallo liebe E*PvPers,
Ich habe gedacht ihr könntet diese How to do Videos gebrauchen deswegen zeige ich euch die mal. Ich möchte euch sagen das ich die Video selbst gemacht habe und die von niemandem kopiert sin.
Hier das Video wie man den Skillhack bei allen möglichen Klassen verkürzen kann.
Also hier das 1. Video :
YouTube - Wie man jeden Skill zum Skill hacken benutzen kann ? Siehst du hier!
Das funzt sowohl auf 4StoryEG Als auch auf dem Offi.
Und ja es funzt auch bei jeder Klasse...
[C] Pointer auf Array 08/26/2009 - General Coding - 3 Replies Hallo,
Ich habe folgendende Pointer deklariert:
char *Menu0 = {"Gerd","Egon","Juergen&q uot;,"Karl","Hans-Dieter",&quo t;Hans-Guenther"};
char *Menu1 = {"Anna","Inge","Franziska ","Lisa","Maria"};
usw..