Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 17:02

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

Advertisement



Wie benutze ich Adressen mit Offsets?

Discussion on Wie benutze ich Adressen mit Offsets? within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
xmast's Avatar
 
elite*gold: 0
Join Date: Mar 2007
Posts: 980
Received Thanks: 532
Wie benutze ich Adressen mit Offsets?

Hallo,

ich hoffe ich bin hier richtig und mir kann geholfen werden. Ich bin nämlich gerade wirklich am verzweifeln .

Ich bin ein vollkommener Neuling in Sachen Memory Reading, einiges habe ich verstanden, aber wie ich eine Base Adresse, welche noch dazu Offsets enthält in C# verwenden kann, ist mir immer noch nicht klar.

Zum Beispiel möchte ich von dem Spiel Aion, die HP von dem Ziel ablesen.
Das wäre dann: Game.dll+B40E6C→+0x254→+0x11D8

In meinem Code sieht das so aus:
Code:
memory.OpenProcess();
byte test = memory.readByte((long)memory.base_adress + 0xB40E6C + 0x254 + 0x11D8);
MessageBox.Show(test.ToString());
Ich bekomme lediglich das Resultat 0.

Meine Memory Klasse will ich hier jetzt nicht komplett posten - sie funktioniert auch eigentlich wunderbar bei Adressen ohne weitere offsets-, aber um die Bytes zu lesen verwende ich folgendes:
Code:
public static byte readByte(long Address)
{
byte[] buffer = new byte[1];
ReadProcessMemory(pHandle, (UIntPtr)Address, buffer, (UIntPtr)1, IntPtr.Zero);
return buffer[0];
}
Ich hoffe wirklich sehr, dass mir hier jemand der Ahnung hat, helfen kann. ich wäre demjenigen sehr dankbar.

Edit: Ich habe es dank der Hilfe von Jeoni hinbekommen! Danke, Jeoni!
xmast is offline  
Old 12/27/2012, 21:01   #2


 
Jeoni's Avatar
 
elite*gold: 966
Join Date: Apr 2010
Posts: 1,104
Received Thanks: 681
Das müsste so aussehen:
Code:
...
byte test = readByte(readUInt32(readUInt32(readUInt32((UInt32)GetModuleHandle("Game.dll") + 0xB40E6C) + 0x254) + 0x11D8));
...
readUInt32 ist analog zu readByte mit anderem Datentyp.
Bitte befasse dich nochmal mit der Funktionsweise von Pointern, wenn du wissen willst, warum dein Code nicht funktioniert hat bzw. warum mein code funktioniert (oder es zumindest sollte)
Hoffe, dass ich helfen konnte
Jeoni
Jeoni is offline  
Thanks
1 User
Old 12/27/2012, 21:24   #3
 
xmast's Avatar
 
elite*gold: 0
Join Date: Mar 2007
Posts: 980
Received Thanks: 532
Vielen Dank, Jeoni, allerdings bekomme ich immer noch nur 0 heraus ...
Wahrscheinlich mache ich einfach etwas falsch ...

Ich habe einfach eine Methode erstellt die nun auch uInt herausliest, jedoch weiterhin ohne Erfolg

So habe ich dein Code verwendet:
Code:
byte test = memory.readByte(memory.readUInt(memory.readUInt(memory.readUInt(memory.base_adress) + 0xB40E6C) + 0x254) + 0x11D8);
Und so sieht nun meine Memory Klasse aus:

Code:
        public static int proccID;
        .....
xmast is offline  
Old 12/27/2012, 21:37   #4


 
Jeoni's Avatar
 
elite*gold: 966
Join Date: Apr 2010
Posts: 1,104
Received Thanks: 681
Bitte sieh dir nochmal deinen und meinen Code an. Du musst nicht sofort einen UInt auslesen, der auf der Baseadresse steht. Du musst erst 0xB40E6C zur Baseadresse addieren und dann mit den auslesen der einzelnen Pointerlevels beginnen.
Deswegen ist es auch
Game.dll+B40E6C→+0x254→+0x11D8
und nicht
Game.dll→+B40E6C→+0x254→+0x11D8 (man beachte den Pfeil hinter der Baseadresse aka Game.dll).
Hier nochmal das, was ich meine (ohne GetModuleHandle, was ja eh fail war, weil du ja nicht im Zielprozess bist):
Code:
...
byte test = readByte(readUInt32(readUInt32(readUInt32(memory.base_address + 0xB40E6C) + 0x254) + 0x11D8));
...
Hoffe, dass das hilft und dass du meinen (teilweise schlechten) Erklärungen folgen kannst
Jeoni
Jeoni is offline  
Old 12/27/2012, 22:03   #5
 
xmast's Avatar
 
elite*gold: 0
Join Date: Mar 2007
Posts: 980
Received Thanks: 532
Danke, Jeoni.

Das ist mir nun klar geworden, dass ich bevor ich etwas herauslese, die Baseadresse + 0xB40E6C.

Allerdings verstehe ich noch nicht ganz wie - verzeih mir bitte, falls ich nerve, aber ich wirklich Anfänger was das angeht. Ich habe es gerade mal geschafft, dass mein Bot zu verschiedenen Zielen läuft, angreift, Skills benutzt, sich heilt und so Kleinigkeiten.

Also was ich immer noch nicht ganz verstehe ist, woher man "readUInt32" hernimmt beziehungsweise readByte, du schreibst das einfach so hin. Muss ich irgend eine Referenz in C# hinzufügen, damit diese Funktionen so vorhanden sind, oder soll ich sie erst deklarieren?

Ich bedanke mich schon mal voraus für eine Antwort.
xmast is offline  
Old 12/27/2012, 22:12   #6


 
Jeoni's Avatar
 
elite*gold: 966
Join Date: Apr 2010
Posts: 1,104
Received Thanks: 681
Naja, du hast ja in deiner Memory-Class deine readByte-Funktion. In meinen Codeausschnitten hatte ich lediglich keine Lust bzw. fand es etwas lang vor jedem readByte und jeden readUInt32 "memory." zu schreiben. Die Funktionen selber gibt es, soweit ich weiß, in keiner Referenz, die musst du selber schreiben (readByte haste ja schon in deiner memory-Klasse). Du kannst statt readUInt32 einfach memory.readUInt nehmen, das passt schon.
Kurz: Ich hatte keinen Bock und fand es eben zu lang "memory." noch hinzuschreiben
Hoffe, dass das hilft
Jeoni
Jeoni is offline  
Thanks
1 User
Old 12/27/2012, 22:22   #7
 
xmast's Avatar
 
elite*gold: 0
Join Date: Mar 2007
Posts: 980
Received Thanks: 532
Oh, okay. Dann habe ich das vollkommen richtig verstanden. Vielen, vielen dank . Ich habe das schon zuvor probiert, allerdings bekommt ich immer noch nur 0 heraus. Cheat Engine zeigt dagegen alles korrekt an, hier mal ein Screenshot.
xmast is offline  
Old 12/27/2012, 23:23   #8


 
Jeoni's Avatar
 
elite*gold: 966
Join Date: Apr 2010
Posts: 1,104
Received Thanks: 681
Sieh mal: du liest ja letztendlich ein Byte aus. An der betreffenden Stelle befindet sich aber laut CE ein Integer (4 Bytes).
Dementsprechend liest du mit dem readByte nur den ersten Byte des eigentlichen Integers aus.
Also musste statt einem Byte eben ein Integer auslesen.
Nochmal der Code dazu:
Code:
...
int test = readInt(readUInt32(readUInt32(readUInt32(memory.base_address + 0xB40E6C) + 0x254) + 0x11D8));
...
Ich hoffe, dass es hilft
Jeoni

Wenn du auf einmal irgendwelche negativen Zahlen ausliest, obwohl du positive erwartest, versuch es mit einem UInt
Wenn's sich interessiert, warum das so ist, so lese das HIER. Datentypen, welche "Unsigned" sind, unterliegen nicht dem Zweierkomplement, sondern werden nur positiv interpretiert.
Jeoni is offline  
Thanks
1 User
Old 12/27/2012, 23:45   #9
 
xmast's Avatar
 
elite*gold: 0
Join Date: Mar 2007
Posts: 980
Received Thanks: 532
Okay, ich glaube ich gebe es auf . Ich habe das schon vorhin probiert, jedoch bekommt ich immer noch genau eine Null raus ...

Code:
int test = memory.readInt(memory.readUInt(memory.readUInt(memory.readUInt(memory.base_adress + 0xB40E6C) + 0x254) + 0x11D8));
Das habe ich probiert und auch mit uint test etc ... auch memory.readUInt . Es scheint nichts zu helfen ...

Ach ja, vielen Dank für den Link, ich werde mich bestimmt damit auseinander setzen - beziehungsweise muss es sowieso.

Edit: Oha! Ich habe es endlich hinbekommen! Ich danke dir vielmals!
Folgenden Code habe ich dazu geschrieben:

Code:
uint a = memory.readUInt(memory.readUInt(memory.readUInt((long)memory.base_adress + 0xB40E6C) + 0x254) + 0x11D8);
xmast is offline  
Reply


Similar Threads Similar Threads
Problem mit Pointern in VB.net
05/22/2012 - .NET Languages - 3 Replies
Guten Abend E*pvp, Da ich mich neuerdings mit dem Erstellen von Trainern beschäftige, habe ich nun das Problem, dass ich nicht weiß, wie ich den Base-Pointer + offset in meinen Quellcode einbauen kann. Von meinem Spiel " League of Legends " ist das der Pointer für den Zoom. "League of Legends.exe+5564FA" 2bytes. Wie man eine normale Adresse mit Vb.net manipuliert weiß ich, aber wie diesen Base-Pointer? Hier mein Quellcode zu dem Programm : Public Class Form1 Private zoom As Boolean...
[C++]Frage zu Pointern
01/03/2012 - C/C++ - 7 Replies
Hi zusammen, ich arbeite mich momentan durch die XoaX.net C++ Reihe und ergänze nebenbei durch andere Videos von Youtube. Bin zwar schon an Pointern vorbei, aber hab glaub ich mittlerweile den Sinn verstanden. Trotzdem möchte ich meine Vermutung "absichern". Ich dachte immer, wofür Pointer? Ich habe jetzt mal folgendes Beispiel geschrieben: #include <iostream>
Frage zu Pointern in S4~
04/21/2011 - S4 League - 28 Replies
Hi ^^ also ich poste mal hier um Omdihar und FutureTrance nicht weiter zu nerven und hoffe mal ihr könnt mir helfen.. Ich habe vor einen kleinen Trainer mit AutoIt zu schreiben der zum Beispiel die Frisur Keen zu der aus dem Combiset zuchangen.. Selbes auch für Trainingsps-> Taser Ich hab erstmal mit Tps -> Taser angefangen also brauch ich ja die Addresse fürs Tps (2000000) die richtige von den ca 5 ~ 10 Addressen habe ich immer mit ausprobieren im Lobbyinventar getestet.. Dank...
Frage zu Pointern in C
06/17/2009 - General Coding - 5 Replies
Hi ich wollte mal nen String in C ausgeben mit dem Programm hier: #include <stdio.h> int main(void) { char *string="Hallo Welt\0"; printf("String:%s",*string); return 0; } was nicht geklappt hat also habe ich es so versucht: #include <stdio.h>
Problem mti Pointern
11/21/2006 - General Coding - 0 Replies
Also ich wollt mir schnell einen kleinen trainer machen. Da hab ich mal zu GTS gegriffen. Nun hab ich aber einige Probleme. 1. Ist die adresse ein Pointer. Ich hab die Pointer Adresse und den Offset. Nur bin ich mir nicht sicher wie ich das eintragen soll. Erstmal mit Button: Bei Funktion Poke genommen und dann in das Feld reingeschrieben



All times are GMT +2. The time now is 17:02.


Powered by vBulletin®
Copyright ©2000 - 2024, 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 ©2024 elitepvpers All Rights Reserved.