[AutoIt] Gamehacking

01/12/2010 21:56 Timo264#1
Inspiriert von diesem TuT
[Only registered and activated users can see links. Click Here To Register...]
werd ich hier schreiben, wie man das in AutoIt realisiert.


Was wir brauchen:

-Grundlegende AutoIt Kenntnisse

-Einen Script Editor (ich benutze Scite) [Only registered and activated users can see links. Click Here To Register...]

-Die "NomadMemory.au3" -siehe Anhang

-Solitär - zumindest werde ich es an Solitär erklären, ist aber auch auf jedes andere spiel übertragbar


Was wir machen:

Wir werden den Spielstand in solitär durch eine Änderung in der Memory ändern.

Als erstes suchen wir die Speicheradresse mit unsere CheatEngine, was eigentlich kein Problem darstellen sollte.
Bei mir ist es "077DC9D8".
Wenn wir die Adresse haben können wir mit der Umsetzung in AutoIt starten.


Hack:
Erstellt eine neue .au3 Datei und öffnet sie mit eurem Script Editor

Um auch unter Vista mit der Memory zu arbeiten brauchen wir Administratorrechte, deshalb starten wir mit
PHP Code:
#RequireAdmin ;Unter Vista brauch das Program Administrator rechte! 
um mit den Memory Funktionen arbeiten zu können fügen wir die "NomadMemory.au3" datei in unser Skript ein. (siehe Anhang).
Diese Datei kopiert ihr einfach in den "Includes" Ordner in eurem AutoIt Verzeichnis.
PHP Code:
#include <NomadMemory.au3> ;brauchen wir, um die Memory Funktionen nutzen können.
;(Geht zwar auch per Hand ist aber so viel einfacher.)

SetPrivilege("SeDebugPrivilege"1) ;ist nicht nötigsollte aber verwendet werden 
Damit das Script nur ausgeführt wird, wenn Solitär gestarte ist, erstellen wir eine Schleife, die solange läuft bis AutoIt Solitär findet
PHP Code:
While Not ProcessExists("Solitaire.exe");Läuft so langebist Solitär gestartet ist.

Sleep(200)

WEnd
;Der Quellcodeder nach der While Schleife steht wird erst beachtetwenn Solitär gestarte ist
als nächstes öffnen wir die Memory
PHP Code:
$ProcessID ProcessExists("Solitaire.exe");gibt die PID zurück welche wir für _memoryopen brauchen

$Open 
_memoryopen($ProcessID) ;Sagt AutoIt mit welcher Memory es arbeiten soll 
nun kommen wir zu der eigentlichen veränderung der Memory
PHP Code:
$Adresse 0x077DC9D8 ;um in AutoIt eine Hex angabe zu machen setzt ihr einfach ein 0x davor(Die Adresse kann bei euch anders sein)

$Punkte =InputBox("Punkte","Wieviel Punkte möchten sie?");eine einfache InputBox um die Punkte zu speichern.(ähnlich Cin aus C++)

$write _MemoryWrite($Adresse$Open$Punkte'dword');die Funktion, die die Punkte verändert.
;
am ende der Funktion muss noch der Memory Typ geschrieben werden ('dword' 4Byte
der komplette code sieht dann so aus:
PHP Code:
#RequireAdmin ;Unter Vista brauch das Program Administrator rechte!
#include <NomadMemory.au3> ;brauchen wir, um die Memory Funktionen nutzen können.(Geht zwar auch per Hand ist aber so viel einfacher.)
SetPrivilege("SeDebugPrivilege"1) ;sollte beim arbeiten mit der Memory immer gesetzt werden

While Not ProcessExists("Solitaire.exe");Läuft so langebist Solitär gestartet ist.
Sleep(200)
WEnd
;Der Quellcodeder nach der While Schleife steht wird erst beachtetwenn Solitär gestarte ist.

$ProcessID ProcessExists("Solitaire.exe");gibt die PID zurück welche wir für _memoryopen brauchen
$Open 
_memoryopen($ProcessID) ;Sagt AutoIt mit welcher Memory es arbeiten soll

$Adresse 
0x077DC9D8 ;um in AutoIt eine Hex angabe zu machen setzt ihr einfach ein 0x davor(Die Adresse kann bei euch anders sein)
$Punkte =InputBox("Punkte","Wieviel Punkte möchten sie?");eine einfache InputBox um die Punkte zu speichern.(ähnlich Cin aus C++)
_MemoryWrite($Adresse$Open$Punkte'dword');die Funktion, die die Punkte verändert.am ende muss noch die art
;am ende der Funktion muss noch der Memory Typ geschrieben werden ('dword' 4Byte

MfG
Timo264
01/13/2010 15:16 HardCore.1337#2
_MemoryWrite braucht keine eigene Variable weil es keinen Wert (doch, True oder False) zurückgibt.
In dem Fall prüfst du aber nicht ob er erfolgreich in den RAM geschrieben hat.
Dann vlt. noch lieber PHP Tags nehmen.

mfg
01/16/2010 12:51 Yakiyo#3
Danke, hat mir geholfen =D
01/20/2010 15:32 ninjaprobe#4
#include <NomadMemory.au3>
SetPrivilege("SeDebugPrivilege", 1)
while Not ProcessExists ( "Солитер")
sleep (200)
WEnd
$ProcessID = ProcessExists("Солитер");gibt die PID zuruck welche wir fur _memoryopen brauchen

$Open = _memoryopen($ProcessID) ;Sagt AutoIt mit welcher Memory es arbeiten soll
$Adresse = 0x01007800 ;um in AutoIt eine Hex angabe zu machen setzt ihr einfach ein 0x davor(Die Adresse kann bei euch anders sein)

$Punkte =InputBox("Punkte","Wieviel Punkte mochten sie?");eine einfache InputBox um die Punkte zu speichern.(ahnlich Cin aus C++)

$write = _MemoryWrite($Adresse, $Open, $Punkte, 'dword');die Funktion, die die Punkte verandert.
;am ende der Funktion muss noch der Memory Typ geschrieben werden

hab windowns xp warum geht das nicht ??
01/20/2010 15:34 Kazaaa#5
$Adresse = 0x01007800 ;um in AutoIt eine Hex angabe zu machen setzt ihr einfach ein 0x davor(Die Adresse kann bei euch anders sein)


Villeicht die falsche Adresse ?
01/20/2010 15:52 ninjaprobe#6
nein das ist die richtige und 0x ist schon davor
04/07/2010 19:32 Lukɑs#7
wenn dword = 4byte ist, was sind dann 2 byte?
04/07/2010 23:25 Shadow992#8
Quote:
Originally Posted by Lukɑs View Post
wenn dword = 4byte ist, was sind dann 2 byte?
2 Byte ist Word ,
8 Byte ist QuadWord ,
10 Byte ist TenByte bzw packed BCD .
04/08/2010 00:31 !NOTFALL!#9
Also wenn ich den script ausführ, sagt er mir:

Code:
Line 2 (File "C:\...\...\...\solitär.au3"):
#include<NomadMemory.au3>

Error: Error opening the file.

Habe den file gedownloaded, entpackt und in den include ordner verschoben oO
04/09/2010 11:58 HardCore.1337#10
Also bei mir klappts. Vlt. doch nochmal überprüfen ob die Datei genau so heißt und wirklich im gleichen Pfad ist
04/24/2010 21:59 Chillex#11
Huhu und thx fürs tutorial :D
Hats mir schon wieder ein Stück verständlicher gemacht.
Hatte nur das Problem dass es bei mir "sol.exe" hieß statt "solitaire.exe" und das geschriebene Programm nichts gemacht hat beim start^^.naja habs dann aber doch gemerkt.
06/02/2010 13:01 BestOfElite#12
Hihi hättest vllt mehr erklären können was was bedeutet aber was ist float wenn 4byte dword ist?? PLZ help
06/03/2010 09:23 Jay Niize#13
#Added to List

wenn du es dort nicht haben willst PN!!!

sonst sehr nice :D
06/06/2010 08:21 oO-D&S-Oo#14
PHP Code:
#include <NomadMemory.au3>
SetPrivilege("SeDebugPrivilege"1)

While 
Not ProcessExists("Solitaire.exe")
Sleep(200)
WEnd

$ProcessID 
ProcessExists("Solitaire.exe")
$Open _MemoryOpen($ProcessID)
$Adresse 0x01012F60
$Punkte 
InputBox("Punkte","Wieviel Punkte möchten sie?")
_MemoryWrite($Adresse$Open$Punkte'dword'
habs etwas abgespeckt.... es funzt bei mir nicht.... selbst wenn ich es 1 zu 1 übernehme und die adresse ändere.....
06/06/2010 08:25 oO-D&S-Oo#15
Quote:
Originally Posted by BestOfElite View Post
Hihi hättest vllt mehr erklären können was was bedeutet aber was ist float wenn 4byte dword ist?? PLZ help
Quote:
Der Datentyp float läßt Werte aus einem diskontinuierlichen Teilbereich der reellen Zahlen zu.
[Only registered and activated users can see links. Click Here To Register...]