[C#] Gamehacking

06/07/2010 14:45 scenebase#1
In diesem Tutorial werde ich euch zeigen wie man mit C# Memory werte auslesen kann. Ich werde hier mit World of Warcraft arbeiten, es geht aber auch mit jedem andern Spiel.

Dazu benötigt ihr :
- [Only registered and activated users can see links. Click Here To Register...]
- [Only registered and activated users can see links. Click Here To Register...]

Nun gut, ihr habt alles soweit runter geladen und entpackt bzw. Installiert? Dann kann es ja jetzt los gehen.

Los geht's:
Als erstes Startet ihr Microsoft Visual C# 2008. In meinem Fall 2010, da ich unter Win7 Arbeite.

Schritt 1:
[Only registered and activated users can see links. Click Here To Register...]
Ihr klickt auf Datei -> Neues Projekt und wählt dort "Konsolenanwendung" aus. Ich nenn es einfach mal "Tut-epvp".

Schritt 2:
Nun seht ihr, euer "Code" Fenster. Sieht zwar noch ganz schön leer aus aber das ändert sich noch. Dann geht ihr oben auf Projekt -> Verweis hinzufügen und seht nun dieses Fenster vor euch:
[Only registered and activated users can see links. Click Here To Register...]

Schritt 3:
Wir verbleiben im Verweise hinzufügen Fenster und suchen nun unsere am Anfang heruntergeladene Blackmagic.dll + fasmdll_managed.dll, wählen diese aus und klicken auf "Ok".

Schritt 4:
Jetzt speichert ihr erstmal euer Projekt ab.
Für win7 bzw. Visual Studio 10 Benutzer hier noch ein kleiner extra Schritt:
Ihr geht auf Projekt -> EuerProjektname Eigenschaften und seht nun :
[Only registered and activated users can see links. Click Here To Register...]
Unter Zielframenetwork stellt ihr bitte: .NetFrameWork 3.0 oder 3.5 ein.

Schritt 5:
Jetzt können wir endlich anfange zu Coden.
Am Anfang eueres Programmes, wo "using System;" etc. steht, fügt ihr noch
Code:
using Magic;
hinzu.

Schritt 6:
Jetzt geht ihr in
Code:
static void Main(string[] args)
        {

        }
und schreibt dort :
Code:
Blackmagic wow = new Blackmagic(); //Erstellt neue Funktion zum Öffnen von WoW

wow.OpenProcessAndThread(SProcess.GetProcessFromWindowTitle("World of Warcraft")); //Das Öffnet WoW
Schritt 7:
Jetzt wollen wir na klar auch sachen wie HP,Mana etc aus WoW auslesen. Kein Problem.
Dafür müssen wir erstmal die Playerbase "einfügen"
Code:
uint playerbase = wow.ReadUInt(wow.ReadUInt(wow.ReadUInt(0xB366D0) + 0x34) + 0x24);
Um jetzt die HP auszulesen schreiben wir:
Code:
int HP = wow.ReadUInt(0x19B8 + playerbase)
Console.WriteLine("Meine HP beträgt : " + hp);
Console.ReadLine();
Nun sollte euer Code so aussehen:
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Magic;

namespace Tut-epvp
{
    class Program
    {
        static void Main(string[] args)
        {
            Blackmagic wow = new Blackmagic(); //Erstellt neue Funktion zum Öffnen von WoW
    
wow.OpenProcessAndThread(SProcess.GetProcessFromWindowTitle("World of Warcraft")); //Das Öffnet WoW

uint playerbase = wow.ReadUInt(wow.ReadUInt(wow.ReadUInt(0xB366D0) + 0x34) + 0x24);

int HP = wow.ReadUInt(0x19B8 + playerbase)
Console.WriteLine("Meine HP beträgt : " + hp);
Console.ReadLine()
}
}
}
Jetzt Shift+F5 drücken und freuen :)

Das war's auch scho.
Vielen Dank fürs Lesen.

Wenn irgendwo fragen auftauchen, stellt sie hier im Thread ich werde sie so schnell wie möglich beantworten.

Mit freundlichen Grüßen
Rhilor
06/07/2010 17:26 Mononoke123#2
Spiele zwar kein WoW aber was bewirkt der "Hack"
06/07/2010 17:38 Medix#3
Quote:
Console.WriteLine("Meine HP beträgt : " + hp);
das leben deines chars wird ausgelesen und in der konsole ausgegeben
06/08/2010 17:14 Fuyo#4
Und wie kann ich einen neuen Memory Wert schreiben lassen ?
06/11/2010 14:19 Colax3...#5
Schöne Arbeit, kenne da jemand der das sicher gebrauchen kann
*Thx given*

Quote:
Und wie kann ich einen neuen Memory Wert schreiben lassen ?
Würde mich auch mal interessieren.
06/12/2010 21:58 schlurmann#6
Das ist kein Tutorial, du erklärst nichts, bzw. das einzige was du versuchst zu erklären ist schlichtweg falsch:

Code:
Blackmagic wow = new Blackmagic(); //Erstellt neue Funktion zum Öffnen von WoW
Du erstellst eine Funktion zur Laufzeit? Interessant.

Wenn du Tutorials erstellen willst erkläre den Leuten was sie dort tun. Das ist schlichtweg nutzlos, du hättest auch nur den Code posten können.
07/06/2010 23:30 sataan1337#7
also, wenn du tutorials schreibst solltest du

1. darauf achten dass das was du schreibst auch richtig ist

z.b.:
Quote:
Blackmagic wow = new Blackmagic(); //Erstellt neue Funktion zum Öffnen von WoW
erstellt keine funktion sondern eine instanz der klasse Blackmagic - schätze mal das is nen memory reader, darauf gehst leider nicht näher ein ^^

Quote:
wow.OpenProcessAndThread(SProcess.GetProcessFromWi ndowTitle("World of Warcraft")); //Das Öffnet WoW
falls "blackmagic" wirklich für den speicherzugriff verantwortlich ist wird hier kein wow gestartet sondern auf den speicher des schon laufenden wow-prozesses zugegriffen

2. darauf achten dass die Informationen wiederverwendbar sind

dass du z.b. das ganze an wow demonstrierst ist ja in ordnung, aber z.B. sowas wie "was macht diese Blackmagic.dll" oder Begriffe wie "Playerbase" (was mir selber nicht besonders viel sagt, sieht aber aus wie pointer und offset) solltest du eventuell auch erklären bzw zumindest kurz darauf eingehen wo man diese herbekommt ^^

3. afaik ändert wow wenigstens mit jedem patch seine pointer (länger nicht mehr probiert ^^) - falls das noch so ist ist das ganze in absehbarer zeit auch nicht mehr nachvollziehbar ^^

aber danke für die mühe ^^, sollten nur tipps sein ^^

*edit:


Quote:
Originally Posted by Fuyo View Post
Und wie kann ich einen neuen Memory Wert schreiben lassen ?
wenn du meinst den wert im speicher zu verändern, das würde nicht viel bringen da er nur kurzzeitig angezeigt wird aber im spiel keinen effekt hat

wenn du meinst andere werte (z.b. mana, position) auszulesen, dafür brauchst du die entsprechenden pointer und offsets - leider keine genaue info dazu, aber entweder googeln oder mit cheat engine raussuchen könnte klappen ^^

aso ^^ falls ich hier mist erzähle, sry ist etwas her dass ich das bei wow versucht hab, bin da irgendwie an der position gescheitert damals xP
07/19/2010 15:37 xenex(toemsel)#8
Dankeschön :)
Du weißt ja garnicht wie lange ich nach "C# read memory || C# ram auslesen" im google gesucht habe. Im prinzip kann man Theoretisch keine Werte mehr auslesen, da jeder Prozess ein Virtuellen Speicher zugeteilt bekommt um die anderen Daten nicht zu überschreiben,... *WMI API*

Nunja,... danke,... ich werde die .dll mal genau unter die Lupe nehmen ;)
11/16/2010 14:00 |NeoX#9
Thx das hilft, das tut is zwar ned effizient gemacht aba wenn man hirn hat bekommt man es sowiso hin^^
06/21/2011 18:57 Kilinat#10
Funktioniert auch garnicht - "Exception wurde nicht behandelt". ( Könnte an falschen Offsets liegen, weiß ich jetzt auch nicht auswendig. )

Wenn man schon ein Tutorial schreibt, sollte man schon etwas Ahnung haben von dem, was mach hier macht. Mir kommt es so vor, als wüsstest du genau diese Codeschnipsel auswendig, kennst dich aber in Wirklichkeit überhaupt nicht damit aus.

MfG Kilinat


/edit: Sorry fürs Ausgraben eines komplett veralteten Threads, hab ich übersehen.
08/07/2011 13:51 XchangliiX#11
BMMain.cs fehlt

Blackmagic wow = new Blackmagic();

kann nicht erstwellt werden...
04/29/2012 18:29 DarkDorel#12
Quote:
Originally Posted by XchangliiX View Post
BMMain.cs fehlt

Blackmagic wow = new Blackmagic();

kann nicht erstwellt werden...
BlackMagic und nicht Blackmagic.
04/29/2012 20:42 Freak2011#13
Quote:
Originally Posted by DarkDorel View Post
BlackMagic und nicht Blackmagic.
Und um das zu schreiben gräbst du einen 1 Jahr alten Thread aus?
:facepalm:

Mfg Freak
05/09/2012 19:25 .Dash#14
Braucht man eigentlich diese Blackmagic.dll zum Gamehacking in C#?
08/04/2012 17:55 f1Nn#15
Quote:
Originally Posted by .Dash View Post
Braucht man eigentlich diese Blackmagic.dll zum Gamehacking in C#?
Kannst dir auch deine eigene Klasse schreiben, aber ansonsten: ja.