Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 05:57

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

Advertisement



[C#] GetMemoryModuleBaseAddress

Discussion on [C#] GetMemoryModuleBaseAddress within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1


 
RatexIndex's Avatar
 
elite*gold: 426
Join Date: Oct 2012
Posts: 4,339
Received Thanks: 953
[C#] GetMemoryModuleBaseAddress

Hay.

In autoit (NomadMemory.au3) gibt es eine Funktion die nennt sich:

_MemoryModuleGetBaseAddress(PID, ModuleName)


Nun die funktion gibt mir die Base Addresse von der -> MEMORY <- zurück in dem aktuellen fall ("0x00FE0000")
jz hab ich mir die finger wund gesucht um die gleiche funktion auch für C#
zu finden weil ich für Memory Read die base addresse von der Memory brauche
um den Dynamischen Pointer darauf zu rechen ((Base + Pointer) + Offset)

Nun alles was ich gefunden habe ist;
Code:
Process.GetProcessesByName("Name..")[0].MainModule.BaseAddress
Das ist aber nicht die base addresse von der memory.. ich hab 10 such anfragen bei google durchlaufen lassen aber immer wieder kommt dieser %?&/§" you know ?

wäre nett wenn mir jemand diese funktion in C# umschreiben kann
btw mir verrät wie ich diese memory base addresse bekomme.
RatexIndex is offline  
Old 02/09/2014, 09:46   #2
 
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
GetModuleHandle aus kernel32.dll Importen und dann aufrufen.
th0rex is offline  
Old 02/09/2014, 10:02   #3


 
RatexIndex's Avatar
 
elite*gold: 426
Join Date: Oct 2012
Posts: 4,339
Received Thanks: 953
Quote:
Originally Posted by omitma View Post
GetModuleHandle aus kernel32.dll Importen und dann aufrufen.
Bekomm ich 00000000 zurück anstatt 0x00FE0000

Getestet in C++
RatexIndex is offline  
Old 02/09/2014, 10:22   #4
 
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525

Weiß jetzt nicht genau was du machst o.o
DWORD base = (DWORD)GetModuleHandle(NULL);
So geht es bei mir in c++ aufjedenfall. Ist dann, wenn du es ausgibst, nur in dezimal. Musste halt zu hex ändern. Macht aber kein Unterschied für WriteProcessMemory oder was auch immer du damit anstellen möchtest.

Wieso willst du das überhaupt in c# machen, wenn du es in c++ testen kannst ? C++ ist bei gamehacking (oder generellen nativen sachen) weitaus besser als c#.
th0rex is offline  
Old 02/09/2014, 14:56   #5
 
tolio's Avatar
 
elite*gold: 2932
The Black Market: 169/1/0
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
haste mal versucht das ganze als admin zu starten?
tolio is offline  
Old 02/09/2014, 17:17   #6


 
RatexIndex's Avatar
 
elite*gold: 426
Join Date: Oct 2012
Posts: 4,339
Received Thanks: 953
Quote:
Originally Posted by omitma View Post

Weiß jetzt nicht genau was du machst o.o
DWORD base = (DWORD)GetModuleHandle(NULL);
So geht es bei mir in c++ aufjedenfall. Ist dann, wenn du es ausgibst, nur in dezimal. Musste halt zu hex ändern. Macht aber kein Unterschied für WriteProcessMemory oder was auch immer du damit anstellen möchtest.

Wieso willst du das überhaupt in c# machen, wenn du es in c++ testen kannst ? C++ ist bei gamehacking (oder generellen nativen sachen) weitaus besser als c#.
Sry hab die falsche konvertierung xD

Warum C# ?

Ich kann nur ne hand voll C++ sachen (die basic sachen) wie
Socket, Memory, File Read/Write, Processe, Do, For halt diese Sachen

So komplizierte befehle wie ein Window zu erstellen blick ich noch nicht durch.

Zudem ich für den nächsten schritt einen Timer brauche der sich nach
500 ms erneuert.

Aber danke für deine Hilfe


Edit:

Funktioniert noch immer nicht.

Wenn ich:
Code:
DWORD base = (DWORD)GetModuleHandle((LPCWSTR)"FiestaOnline");
Kommt 0 zurück egal was ich da für ein window namen eingebe es kommt immer nur 0

wenn ich aber:
Code:
DWORD base = (DWORD)GetModuleHandle(NULL);
mache kommt eine dynamische zahl. das kann aber nicht die base memory sein.

ich verstehs einfach nicht. ich will einfach nur die base addresse von der memory und nicht von der exe !

AutoIt kommt heute auf: 0x00FA0000
RatexIndex is offline  
Old 02/09/2014, 20:59   #7

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
GetModuleHandle in einem Prozess außerhalb des eigentlichen Prozesses auszuführen, ergibt keinen Sinn, das Modul "FiestaOnline" wird natürlich nicht im eigenen Prozess gefunden.

Wenn du die Base-Address, mit der Windows den Prozess mapped, willst, würde ich CreateToolhelp32Snapshot, Process32First, Process32Next und dann Module32First nutzen, um an die Base-Address des Hauptmoduls zu kommen.
snow is offline  
Thanks
1 User
Old 02/09/2014, 21:10   #8
 
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
Timer brauchst du eigentlich nie. Und ja native Fenster mit der Windows API erstellen ist häslich. Und wer sagt, dass die Base nicht dynamisch sein kann ?
th0rex is offline  
Old 02/09/2014, 21:16   #9


 
RatexIndex's Avatar
 
elite*gold: 426
Join Date: Oct 2012
Posts: 4,339
Received Thanks: 953
Quote:
Originally Posted by snow911 View Post
GetModuleHandle in einem Prozess außerhalb des eigentlichen Prozesses auszuführen, ergibt keinen Sinn, das Modul "FiestaOnline" wird natürlich nicht im eigenen Prozess gefunden.

Wenn du die Base-Address, mit der Windows den Prozess mapped, willst, würde ich CreateToolhelp32Snapshot, Process32First, Process32Next und dann Module32First nutzen, um an die Base-Address des Hauptmoduls zu kommen.

Bereits versucht .. kommt wieder nur 0 zurück...


Aufgerufen mit:
Code:
GetModuleBaseAddress((LPCWSTR)"Fiesta.bin", (LPCWSTR)"FiestaOnline");
Quote:
Originally Posted by omitma View Post
Timer brauchst du eigentlich nie. Und ja native Fenster mit der Windows API erstellen ist häslich. Und wer sagt, dass die Base nicht dynamisch sein kann ?

Das die Base Dynamisch ist, ist mir klar. Wäre ja zu schön wenn alles Static
ist würde die arbeit um tonnen einfacher machen.
RatexIndex is offline  
Old 02/09/2014, 21:24   #10
 
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
Die Offsets von der Base dürften aber statisch sein. Und habe deinen Post so verstanden, dass die Base nicht dynamisch sein kann. Sry für das Missverständnis dann. Wenn du kb auf die Offsets hast, kannst du immernoch mit Patterns Funktionen finden die auf deinen Pointer zugreifen, die Funktion hooken, dann den Pointer aus der gehookten Funktion Auslesen, ggf. überschriebenes wieder herstellen und dann den Wert von dem Pointer ändern.
th0rex is offline  
Old 02/09/2014, 21:30   #11


 
RatexIndex's Avatar
 
elite*gold: 426
Join Date: Oct 2012
Posts: 4,339
Received Thanks: 953
Quote:
Originally Posted by omitma View Post
Die Offsets von der Base dürften aber statisch sein. Und habe deinen Post so verstanden, dass die Base nicht dynamisch sein kann. Sry für das Missverständnis dann. Wenn du kb auf die Offsets hast, kannst du immernoch mit Patterns Funktionen finden die auf deinen Pointer zugreifen, die Funktion hooken, dann den Pointer aus der gehookten Funktion Auslesen, ggf. überschriebenes wieder herstellen und dann den Wert von dem Pointer ändern.
Die Pointer und Offsets passen doch, das ist kein problem hier geht es um
die baseadresse das ganzen games.

Ich brauch diese Adresse um das auf den pointer drauf zu rechnen sprich

(BaseAdress+Pointer) + Offset dann bekomm ich immer den richtigen pointer
um meine HP vom spiel auszulesen auch wenn ich Neustart mache.

Aber da sich die Base Adresse von dem memory modul ändert brauch ich in c++ oder c# eine funktion wie bei autoit (MemoryModuleGetBaseAddress) siehe Erster Post -> Spoiler der mir die adresse zurück gibt. und zwar als pointer (0x00F40000)

und da ich iwas falsch mache und überall nur 0 zurück kommt brauche ich hilfe.
RatexIndex is offline  
Old 02/09/2014, 21:39   #12

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
Hast du denn schon mal mit z.B. Process Hacker geschaut, wie das Modul und der Prozess heißen? Sicher, dass das korrekt ist? FiestaOnline klingt nicht nach einem korrekten Modulnamen. Und lass das ganze LPSTR Gedöns weg & verwende std::string, das ist viel komfortabler.
snow is offline  
Old 02/09/2014, 21:40   #13
 
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
Mit GetModuleHandle kannst du nur Adressen von Modulen in deinem Programm bekommen. Entweder du nimmst ne dll oder snows Methode. Snows Methode muss eigentlich funktionieren.
Edit : Sollte die Seite vor dem Posten wohl demnächst aktualisieren -.-
th0rex is offline  
Old 02/09/2014, 21:51   #14


 
RatexIndex's Avatar
 
elite*gold: 426
Join Date: Oct 2012
Posts: 4,339
Received Thanks: 953
Quote:
Originally Posted by snow911 View Post
Hast du denn schon mal mit z.B. Process Hacker geschaut, wie das Modul und der Prozess heißen? Sicher, dass das korrekt ist? FiestaOnline klingt nicht nach einem korrekten Modulnamen. Und lass das ganze LPSTR Gedöns weg & verwende std::string, das ist viel komfortabler.
Wo kann ich den nachsehen wie das Modul heißt ? der Process also
was in dem reiter "Namen" steht = Fiesta.bin
RatexIndex is offline  
Old 02/09/2014, 21:56   #15

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
Dann ist das dein Prozess & das Modul ist ebenfalls Fiesta.bin. std::string(pe32.szExeFile).find("Fiesta") != std::string::npos dürfte dir helfen.
snow is offline  
Reply




All times are GMT +1. The time now is 05:58.


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