Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 03:56

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Multilevel Pointer hacken per Array [Fehlersuche]

Discussion on Multilevel Pointer hacken per Array [Fehlersuche] within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1
 
-STORM-'s Avatar
 
elite*gold: 124
Join Date: Dec 2009
Posts: 2,114
Received Thanks: 3,142
Multilevel Pointer hacken per Array [Fehlersuche]

Hi

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):
Code:
$pNetwork = 0x1073EF88
$Offset1 = 0x1C
$Offset2 = 0x10
$Offset3 = 0x4
$atkspeedoffset = 0xDE4
Und anschließend den Array auf die entsprechenden Offsets bezogen:
Code:
Dim $atkspeedhack[4]
$atkspeedhack[0]=$Offset1
$atkspeedhack[1]=$Offset2
$atkspeedhack[2]=$Offset3
$atkspeedhack[3]=$atkspeedoffset
Um überhaupt Memoryhacks nutzen zu können, erstmal auf den Prozess des Spiels (Nksp.exe) bezogen:
Code:
$PID = ProcessExists("Nksp.exe")
$OPEN = _MemoryOpen($PID)
Daraus folgende Funktion, die den Befehl _MemoryPointerWrite() benutzt:
Code:
Func _atkspeedhack()	
_MemoryPointerWrite($pNetwork,$OPEN,$atkspeedhack,$atkspeedvalue)
EndFunc
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.
-STORM- is offline  
Old 05/02/2012, 13:26   #2


 
Lawliet's Avatar
 
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
Ein Array kannst du auch so füllen:
Code:
Dim Array[5] = ["offset1", "offset2", "Offset3",  "offset4", "offset5"]
Außerdem musst du noch die Baseadress des Prozesses herausfinden.
Code:
$base = _MemoryGetBaseAddress ($handlevonMemoryOpen)
Dann musst du $base mit dem Offset des Pointers addieren, und den Wert mit der Pointer Funktion auslesen.
Lawliet is offline  
Thanks
1 User
Old 05/03/2012, 12:00   #3
 
-STORM-'s Avatar
 
elite*gold: 124
Join Date: Dec 2009
Posts: 2,114
Received Thanks: 3,142
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:
Code:
Dim $instantskilloffset[2] = [0,0x10AA50]

Func _pointerhack()
		_MemoryPointerWrite(0x1073EF88, $OPEN, $instantskilloffset, "2")
EndFunc
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.
-STORM- is offline  
Old 05/03/2012, 13:09   #4
 
elite*gold: 5
Join Date: Mar 2008
Posts: 460
Received Thanks: 436
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.

Code:
Global	$pNetwork = 0x1073EF88
Global	$Offset1 = 0x1C
Global	$Offset2 = 0x10
Global  $Offset3 = 0x4
Global	$atkspeedoffset = 0xDE4

Func _pointerhack()

	$Adress=_MemoryRead($pNetwork, $OPEN, 'dword')
	ConsoleWrite("Adresse: " & Hex($Adress) & @CRLF)

	$Adress=_MemoryRead($Adress  + $Offset1, $OPEN, 'dword')
	ConsoleWrite("Adresse: " & Hex($Adress) & @CRLF)

	$Adress=_MemoryRead($Adress  + $Offset2, $OPEN, 'dword')
	ConsoleWrite("Adresse: " & Hex($Adress) & @CRLF)

	$Adress=_MemoryRead($Adress  + $Offset3, $OPEN, 'dword')
	ConsoleWrite("Adresse: " & Hex($Adress) & @CRLF)

	$Adress=_MemoryRead($Adress  + $atkspeedoffset, $OPEN, 'dword')
	ConsoleWrite("Adresse: " & Hex($Adress) & @CRLF)

	_MemoryWrite($Adress,$OPEN,"2")
EndFunc
So kannst du sehen wo dein Problem ist. Vielleicht hilft es dir auch bisl zu verstehen was überhaupt die Funktion "_MemoryPointerWrite" macht.
SwarN is offline  
Thanks
1 User
Old 05/03/2012, 14:16   #5
 
Logtetsch's Avatar
 
elite*gold: 192
Join Date: May 2009
Posts: 2,227
Received Thanks: 3,262
Hab mir jetzt nicht die Zeit genommen, um die Posts der anderen anzugucken.

Ich gib dir mal eine "Vorlage", die du auch später im Anhang finden wirst!

PHP Code:
#RequireAdmin

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <NomadMemory.au3>
#Region ### START Koda GUI section ### Form=
$Form1 GUICreate("Vorlage"16636192124)
$Checkbox1 GUICtrlCreateCheckbox("Funktion"889717)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###


Global $Base 0x1073EF88
Global $Offset[4] = [0x1C0x100x40xDE4]


Global 
$Pid ProcessExists ("der Processname") ; Hier kommt der Processname der Anwndung reinFindest 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 
Attached Files
File Type: rar Vorlage.rar (659 Bytes, 1 views)
Logtetsch is offline  
Thanks
1 User
Old 05/03/2012, 16:50   #6
 
-STORM-'s Avatar
 
elite*gold: 124
Join Date: Dec 2009
Posts: 2,114
Received Thanks: 3,142
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?
-STORM- is offline  
Old 05/03/2012, 18:36   #7
 
elite*gold: 2
Join Date: Nov 2011
Posts: 318
Received Thanks: 273
Quote:
Originally Posted by -STORM- View Post
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.
PHP Code:
#RequireAdmin
#include <Pointer.au3>
$prozessname "Hier Prozess eit"

$PID ProcessExists(""&$prozessname&"")
If 
$PID 0 Then
$Handle 
_MemoryOpen($PID)
$Address _MemoryModuleGetBaseAddress(ProcessExists(""&$prozessname&""), ""&$prozessname&"")
$Address "0x" Hex($Address Dec("1073EF88"))
Dim $Offset[5] = [,0x1C0x100x40xDE4  zuerst das ne 0anschließend das Offset aus der 2ten Suchedann das erste Offset
Else
Exit
EndIf

$Read _MemoryPointerRead($Address$Handle$Offset"byte")
MsgBox(0""$Read[1]) 
Wobei ich sagen muss, das du ne lange Baseadress hast o.ô.
Hier mal die UDF fürs Script oben.
Attached Files
File Type: rar Pointer.rar (4.3 KB, 6 views)
SingularPlex is offline  
Thanks
1 User
Old 05/03/2012, 20:12   #8
 
-STORM-'s Avatar
 
elite*gold: 124
Join Date: Dec 2009
Posts: 2,114
Received Thanks: 3,142
Quote:
Originally Posted by SingularPlex View Post
PHP Code:
$Address _MemoryModuleGetBaseAddress(ProcessExists(""&$prozessname&""), ""&$prozessname&"")
$Address "0x" Hex($Address Dec("1073EF88"))

$Read _MemoryPointerRead($Address$Handle$Offset"byte"
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 View Post
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.
Danke, das funktioniert soweit schonmal.
Mit dem Pointer im Array wäre es zwar kürzer, aber erstmal besser etwas länger als gar nicht.


Quote:
Originally Posted by Logtetsch View Post
Hab mir jetzt nicht die Zeit genommen, um die Posts der anderen anzugucken.

Ich gib dir mal eine "Vorlage", die du auch später im Anhang finden wirst!
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.
-STORM- is offline  
Old 05/04/2012, 18:23   #9
 
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
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.

Hier noch ein funktionierendes Beispiel:
KDeluxe is offline  
Thanks
1 User
Old 05/04/2012, 19:49   #10
 
-STORM-'s Avatar
 
elite*gold: 124
Join Date: Dec 2009
Posts: 2,114
Received Thanks: 3,142
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:
Code:
If GUICtrlRead($Checkbox_Angriffstempo)=1
-STORM- is offline  
Old 05/04/2012, 20:00   #11
 
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
Was dann entweder am Pointer oder XTrap liegt, das Script selbst würde funktionieren.

Quote:
Originally Posted by GUIConstantsEx.au3
Global Const $GUI_EVENT_CLOSE = -3
KDeluxe is offline  
Thanks
1 User
Old 05/06/2012, 14:07   #12
 
-STORM-'s Avatar
 
elite*gold: 124
Join Date: Dec 2009
Posts: 2,114
Received Thanks: 3,142
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.
-STORM- is offline  
Old 05/06/2012, 16:43   #13
 
elite*gold: 2
Join Date: Nov 2011
Posts: 318
Received Thanks: 273
Quote:
Originally Posted by -STORM- View Post
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.
SingularPlex is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
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..



All times are GMT +1. The time now is 03:56.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.