AutoIt3 Memory Verändern/Beeinflussen

03/14/2010 18:24 BlackRide#1
Hallo erstmal.
Heute wollte ich euch zeigen wie man Memory eines anderen Programmes
beeinflussen/verändern kann.
Erstmal muss man die .rar Datei downloaden die ich Angehängt habe. [Only registered and activated users can see links. Click Here To Register...]
In der .rar Datei sind enthalten: NomadMemory.au3(da sind die befehle inhalten die man braucht für die Memory veränderung aber dazu später), NomadMemory Anleitung.txt (Darin steht wo man die NomadMemory.au3 Datei hintuhen soll)

-1.Download
Man downloadet die NomadMemory.rar Datei die ich hier Angehängt.

-2.Entpacken und in AutoIt3 zu includen
Man entpackt die .rar Datei und tut die NomadMemory.au3 Datei in
C:/Programme/AutoIt3/Include/ rein.
Die .txt Datei kann man löschen. Darin steht wo man die .au3 genau
hintuhen soll.

Einfache Benutzung
Beispiel:
PHP Code:
#include <NomadMemory.au3> ;Hier wird die "NomandMemory.au3" eingebunden
#RequireAdmin  ;Für VistaUser. Dieses Programm könnte evtl. Adminrechte benötigen

$Den_gewuenschten_Stand_eingeben InputBox ("Vorlage für Memory Beeinflussen/Verändern","Geben Sie ihre gewünschte Punktemenge an");Hier erscheint die Textbox wo man dann den gewünschten Punktestand(oder anderesreinschreiben kann
$open 
_MemoryOpen (ProcessExists("Beispielprogramm.exe")) ;Hier wird eine Variable entworfen die überprüft ob die "Beispielprogramm.exe" gerade ausgeführt wird
$adresse1 
0x333333 ;Hier ist eine Variable die die adresse (Hexbeinhaltet.(Diese Addresse wird in Zeile 22 verändert)
$adresse2 0x444444 ;(genauso wie in Zeile 18)Dies ist evlt die 2. Adresse die verändert werden muss damit der Punktestand(oder anderesentgültig verändert wird. (Es können auch mehr als nur 2 Addressen geben)


_MemoryWrite $addresse1$open$Den_gewuenschten_Stand_eingeben"dword");Hier wird die $adresse1  verändert.MemoryWrite =(deutschSpeicherschreiben(in dem Fall den Speicher umschreiben). Hier wird auch überprüft ob die "Beispiel.exe" ausgeführt wird"dword" 4Byte (also ein 4byte scan)
_MemoryWrite $addresse2$open$Den_gewuenschten_Stand_eingeben"dword");Alles genauso wie in der vorigen Zeile nur das hier die $adresse2 umgeschrieben/verändert wird

Das war ein Algemeines Beispiel
Jetzt folgt ein Beispiel:

PHP Code:
#include <NomadMemory.au3>
#RequireAdmin

While Not ProcessExists("pinball.exe")
Sleep (500)
MsgBox (0,"PinballHack by BlackRide","Öffnen Sie bitte die pinball.exe")
Exit
WEnd
WinActive 
("pinball.exe")

$input InputBox "PinballHack by BlackRide""Geben Sie den gewünschten Punktestand an (max. 400.000.000 Punkte)")
Switch 
$input
Case 0 To 400000000
Case Else
Sleep (250)
MsgBox (0"PinballHack by BlackRide""Ihre gewünschte Punktzahl ist zu hoch/ Ihre gewünschte Punktezahl beinhaltet Buchstaben oder andere Zeichen")            
    
Sleep (500)
    
MsgBox (0,"PinballHack by BlackRide","!!Dieser Hack wird nun beendet!!")
    
Sleep (100)
    Exit
        EndSwitch
        
$open _memoryopen (ProcessExists ("pinball.exe"))

$address1 = *******
$address2 = *******

_MemoryWrite ($address1$open$input"dword" )
_MemoryWrite ($address2$open$input"dword" )
Sleep (500)
MsgBox (0,"PinballHack by BlackRide","Die Punkte wurden erfolgreich gesetzt"
Kurze Erklärung:

Also max. kann man 400000000 eingeben.
Das hab ich mit Switch und Case gemacht.
Wenn man einen Buchstaben, andere Zeichen oder eine zu große Summe(außer Zahlen) eingibt tritt "CaseElse" ein und es erscheint eine Msgbox und benachricht uns das wir keine (oder zu große)Zahlen eingegeben haben.
Danach werden wir benachrichtigt das das Script geschlossen wird.
Dann wird das Script geschlossen.

Zu den Variablen $address1 und $address2
Da muss man nun z.B. mit CE Pinball auslesen und die Adressen die für die Punkte verantwortlich sind finden.
Dann muss man die Adresse die man gefunden hat in einer Variable abspeichern. Man wird merken das etwas nicht stimmt. :confused:
Das liegt daran das AutoIt diese Art von Hex nicht kennt.
z.B. die Adresse würde so lauten: 00AC3B8C
Dann müsste man die zweite null in ein "x" umschreiben damit das dann so aussieht: 0xAC3B8C
Dann müsste es gehen.
Für den Punktestand können auch 2 oder mehr Adressen verantwortlich sein.
Den Rest hab ich im ersten Beispiel schon erklärt.

Benutzung mit Pointer


Jetzt kommen wir zu den Pointern.
Die gibt es oft in OnlineGames wie z.B. Metin2.
Pointer Tutorial(Cheat Engine) (Bei Problemen, lest euch trotzdem erst einmal alles durch bevor ihr postet, danke)
Als erstes solltet ihr wissen, dass es 2 verschiedene Arten von Memory Adressen gibt, statische-Adressen(sich (so gut wie nie) ändernde memory adressen) und DMA-Adressen(Dynamic Memory Allocations; ändern sich (meist) nach neustart des Spieles)
Pointer(=Eng. Zeiger) sind nichts anders als statische Adressen, die die DMA adressen mit ihren value's(Die werte des memory codes, z.b. bei 100 life 100) versorgen.

Da man meist als erstes DMA adressen findet, lässt sich daraus kein vernünftiges script zusammen stellen, da diese sich nach neustart des spiels ändern und man sie neu suchen muss . Also sucht man die Pointer und arbeitet mit dem .. Wie Nun, es gibt verschiedene Wege einen Pointer zu finden, doch ich erkläre euch die beiden gängigsten wege :

Als erstes braucht ihr schon das nötige Vorwissen über das finden von memory Adressen(kriegt man überall, wo es internet gibt)
Nun braucht ihr eine DMA Adresse dessen Pointer ihr finden wollt , und als nächstes etwas Zeit um euch durch dieses tutorial zu lesen

Ich verwende als Beispiel ein Egoshooter bei dem ich den DMA code der Muntition (30 Patronen) habe.
Der erste Weg den Pointer zu finden:
Wir mache Rechtsklick auf meine Munitions-Adresse und wähle "Find out what writes to this Adress" aus. In dem Fall, dass ein Popup-Fenster kommt, bestätigen wir es mit Ja und erhalten danach ein Neues fenster. Nun drücken wir Alt+Tab, gehen wieder ins spiel, feuern einen Schuss ab (der Wert muss sich auf irgenteine weise verändern) und Alt+Tabbn wieder zu cheat engine zurück. Jetzt müsste Cheat Engine etwas gefunden haben. Wir makieren diese Adresse mit einem einfachem linksklick und klicken dann auf "More Information".

[Only registered and activated users can see links. Click Here To Register...]
Der rote Code(die jämmerlig makierte 2 ) ist übrigens die Stelle an der unser Wert vom Spiel in dem gefundenen Memory Code abgeändert wird.

Doch was wir brauchen ist die mit der ebenfalls jämmerligen 1 makierte Hex von dem Satz "The value of the Pointer needed to find this address is probably". Dies heißt, dass der Wert(Value) unseres gesuchten Pointers die eben genannte hex ist.
Das finden wir natürlich klasse , und suchen mit einem 4Byte scan, Exact value und nem häckchen bei Hex, nach dieser Value. Wir haben nun eine Adresse im suchfenster oder mit pech mehrere 100 (keine Sorge, meist sind es 1-3 )

Diese fügen wir nun der Adressliste hinzu und klicken auf "Add Address manually" . Nun machen wir ein Häckchen bei Pointer und geben den Adresse Code(nicht die Value!) der ersten Memory Adresse von den eben hinzugefügten ein.Nun auch das Offset( Offset , das Offset muss man sich wie einen Wegweiser von DMA adressen zu deren Pointern vorstellen. ) welches sich in dem "More Information" Fenster von vorhin in dem mit der 2 makiertem teil befindet. Dort versteckt es sich in dem Teil der am ende in den klammern steht(pic: [eax+08]) und ist in diesem Falle "08" ohne die " " . (bei unverständlichkeit dieses Teils gebt bitte bescheid)

Klickt nun auf OK und der Pointer sollte sich in eurer Liste befinden, wenn nicht, ist es endweder ein Multilevel Pointer oder es gibt keinen Statischen Pointer und man muss codeinjection mit einbringen.

Der zweite gängige Weg den Pointer zu finden:
Einfach gleich auf die DMA Adresse rechtsklick und "Pointer Scan for this Adresse" auswählen . Danach auf Default und schließlich auf OK drücken(man lässt alles so wie es ist). Nun scanned cheat engine von alleine nach dem Pointer, aber die chance ihn auch zu kriegen ist geringer . Doch hat cheat engine was gefunden, zeigt er das in dem fenster an, man muss nur doppeltklick darauf machen und hat den Pointer in seiner liste .

Habt ihr den Pointer gefunden? Denn ma auf auf an's scripten/hacken, wir sind auf eure Werke gespannt ! Und keine falsche Scheu sie in diesem forum zu posten!

Ich kann nicht garantieren, dass diese beiden Wege euch immer zum ziel bringen, doch tun sie es meistens







Bei unverständlichkeit meiner Erklärungen bitte bei mir melden.

Wenn ich geholfen hab bitte drück den "THX"-Button


MfG BlackRide ;)
03/14/2010 18:27 HardCore.1337#2
Nett geschrieben, wurde hier aber schon sehr oft erklärt.
Bei MemoryWrite muss man am Ende "DWord" nicht angeben, weil es standardmäßig vorhanden ist.

Dann könntest du noch die Funktion von Pointern erklären. Damit werden hier mehr Schwierigkeiten haben
03/14/2010 18:38 BlackRide#3
Quote:
Originally Posted by General Desert View Post
Nett geschrieben, wurde hier aber schon sehr oft erklärt.
Bei MemoryWrite muss man am Ende "DWord" nicht angeben, weil es standardmäßig vorhanden ist.

Dann könntest du noch die Funktion von Pointern erklären. Damit werden hier mehr Schwierigkeiten haben
Erstmal Danke :)
Ja dann werd ich noch die Pointer erklären und werde auch zeigen wie man die mit CE findet.
Dann mal an die Arbeit :D
03/14/2010 19:10 epiTR#4
Es wäre n1, wenn du erklärst wie es in einem richtigen Spiel mit den Pointern + Offsets geht ;-) Wäre dir da echt dankbar!
03/14/2010 19:57 BlackRide#5
Quote:
Originally Posted by dasr2142 View Post
Es wäre n1, wenn du erklärst wie es in einem richtigen Spiel mit den Pointern + Offsets geht ;-) Wäre dir da echt dankbar!
Schon gemacht;)

Wenn ich helfen konnte bitte gebt mir ein THX
(durch drücken des THX Buttons^^)
3 THX sind ja jämmerlich.
03/15/2010 18:25 Banana.Crafts#6
Sry, aber der Teil mit den Pointern ist ein bisschen zu unübersichtlich, finde ich;D
Man weiß halt net genau, welche Adresse man wo angeben soll;D
Mach am besten noch ein Bild rein.
03/15/2010 18:29 HardCore.1337#7
Jetzt noch wie man die Pointer in AutoIt einfügt und dann ist perfekt.
Thx griegste trotzdem schonmal ;)
03/15/2010 19:24 BlackRide#8
Quote:
Originally Posted by KillingBanana View Post
Sry, aber der Teil mit den Pointern ist ein bisschen zu unübersichtlich, finde ich;D
Man weiß halt net genau, welche Adresse man wo angeben soll;D
Mach am besten noch ein Bild rein.
Von wechem Schritt genau soll ich einen Screnn hinzufügen?

Quote:
Originally Posted by General Desert View Post
Jetzt noch wie man die Pointer in AutoIt einfügt und dann ist perfekt.
Thx griegste trotzdem schonmal ;)
Ok dann werd ich auch das noch tun