PostMessage und Memory auslesen in C++

12/17/2009 17:19 nightracer2#1
Heyho,
ich versuche im moment mit DevC++ ein Programm zu programmieren, was mir die Flaggenanzahl von Minesweeper ausgibt. Allerdings kriege ich immer den error, dass es der falsche Datentyp sei.
ich hab auf dem pc gerad kein DevC++, weshalb ich das Problem net genauer beschreiben kann.
Code:
int *pointer;
pointer = 0xF745879 //irgendeine Speicheradresse
cout << *pointer << endl;
Irgendwie so war der code^^
€dit: Die Speicheradresse war ne normale integer-Adresse (also 4-Byte).
Aber, wie scho gesagt, heult der compiler rum...
2. Problem
Gibt es iregendwo ne library oder nen paar klassen/funktionen für PostMessage runterzuladen???
Ich möchte Tastendrücke an ein Fenster senden, dass nicht aktiv ist.
mfg
@night@
12/17/2009 17:24 MoepMeep#2
OMG. Basics lernen, danke.

[Only registered and activated users can see links. Click Here To Register...]

Und DevC++ ist viel zu alt.
12/17/2009 17:32 nightracer2#3
Quote:
OMG. Basics lernen, danke.
hallo??? ich dachte das is nen forum für support usw. ?!?
2. devc++ is net viel zu alt. Ich hab einfach keinen nerv das .NetFramework zu benutzen! Wenn mir jemand eine bessere Alternative für DevC++ zeigen kann, gerne.
Allerdings habe ich gefragt wie ich das Problem löse. und nicht das meine IDE zu alt ist!
Trotzdem danke für die schnelle Hilfe.
mfg
night
12/17/2009 17:47 ms​#4
Code:
int *pointer;
pointer = (int *)0xF745879;
std::cout << *pointer << std::endl;
Wenn du Speicheradressen aus anderen Prozessen auslesen willst, dann musst du [Only registered and activated users can see links. Click Here To Register...] benutzen.
12/17/2009 19:47 voteban#5
Code:
long bomb_xD = *(DWORD*)(*(DWORD*)(0x01005361) + (32*((*(DWORD*)(0x0007FD64))-1)) + ((*(DWORD*)(0x0007FD60))-1));
if(bomb_xD == 143)
 bomb xD
else
 nix bomb
xD
12/17/2009 20:08 Akorn#6
Quote:
Originally Posted by nightracer2 View Post
2. devc++ is net viel zu alt. Ich hab einfach keinen nerv das .NetFramework zu benutzen! Wenn mir jemand eine bessere Alternative für DevC++ zeigen kann, gerne.
CodeBlocks
Eine Neuere IDE für die Aktuellen versionen des Mingw Compilers.
12/18/2009 13:33 Adroxxx#7
Das Code snippet, was du gepostet hast ist sinnlos.

1. Du willst einen Pointer auslesen. Das muss du mit ReadProcessMemory machen. Dazu musst du aber auch den Pointer kennen. Der Setzt sich aus eine Adresse und einem Offset zusammen.

2. Um das tun zu können, musst du dir auch den Handle des "Opfer" Programmes holen.

3. Verstehe ich nicht wirklich wieso du jetzt was von PostMessage gesagt hast.


Grundsätzlich tust du in deinem Code Snippet folgendes:
Du legst selbst einen int pointer an, und schreibst eine hex adresse da rein.
Dann versuchst du den Pointer auszugeben, machst es aber da auch falsch.

Du solltest dir wirklich mal die C++ bzw allgemeine Programmiergrundlagen nahe legen. Wie elementare Datentypen usw. Weil da bei dir wie man deutlich sieht, nachholbedarf besteht.

Ansonsten kannst du dir auch mal folgendes Tutorial anschauen:

[Only registered and activated users can see links. Click Here To Register...]

Da wird auch ein Pointer ausgelesen und ReadProcessMemory benutzt.

Zum Thema IDE: Wüsste ich keinen Grund, wieso man nicht DevCpp verwenden sollte. Bietet vielleicht nicht so viele Funktionen wie andere große IDEs (Visual Studio o.Ä.) aber rein Funktionell sollte es ausreichen.
12/18/2009 14:55 MoepMeep#8
Quote:
Originally Posted by Adroxxx View Post

Zum Thema IDE: Wüsste ich keinen Grund, wieso man nicht DevCpp verwenden sollte. Bietet vielleicht nicht so viele Funktionen wie andere große IDEs (Visual Studio o.Ä.) aber rein Funktionell sollte es ausreichen.
Weil es da Fehler erkennt, wo garkeine sind ;)
12/18/2009 15:04 Adroxxx#9
Quote:
Originally Posted by MoepMeep View Post
Weil es da Fehler erkennt, wo garkeine sind ;)
Habe fast 2 Jahre mit Devcpp programmiert und nie wirkliche Probleme gehabt.
12/18/2009 15:07 MoepMeep#10
Quote:
Originally Posted by Adroxxx View Post
Habe fast 2 Jahre mit Devcpp programmiert und nie wirkliche Probleme gehabt.
Habe es nie selber benutzt, aber das ist das was man so hört :p
12/18/2009 15:35 nightracer2#11
thx an alle^^
werd mir mal das Gamehacking-Tut angucken...Warum kann ich nem Pointer nicht einfach ne neue Speicheradresse zuweisen???
Normalerweise steht im Pointer ja auch ne Hex wenn ich mir den Inhalt eines pointers angucke...
Oder anders foruliert: Wie macht ReadprocessMemory() das???
mfg
night
12/18/2009 15:48 Adroxxx#12
Schau dir das Tutorial an. Da steht alles beschrieben.
12/19/2009 16:44 Bot_interesierter#13
Quote:
Originally Posted by nightracer2 View Post
thx an alle^^
werd mir mal das Gamehacking-Tut angucken...Warum kann ich nem Pointer nicht einfach ne neue Speicheradresse zuweisen???
Normalerweise steht im Pointer ja auch ne Hex wenn ich mir den Inhalt eines pointers angucke...
Oder anders foruliert: Wie macht ReadprocessMemory() das???
mfg
night
Jedes Programm hat in Windows seinen eigenen Virtuellen Adressraum, das bedeutet du kannst mit einem Pointer nur Adressen innerhalb deines Programms Adressieren.
Mit ReadProcessMemory kannst du auf den Virtuellen Adressraum eines anderen Prozesses zugreifen, das geht nur deshalb weil ReadProcessMemory eine Windows API Funktion ist und der eigentliche Speicherzugriff im Windows Kernel Abläuft, der allen Speicher Adressieren kann.
Wie du die ReadProcessMemory API richtig verwendest liest du am besten auf [Only registered and activated users can see links. Click Here To Register...] nach
12/19/2009 23:33 Gianotti#14
Quote:
Originally Posted by Bot_interesierter View Post
Jedes Programm hat in Windows seinen eigenen Virtuellen Adressraum, das bedeutet du kannst mit einem Pointer nur Adressen innerhalb deines Programms Adressieren.
Mit ReadProcessMemory kannst du auf den Virtuellen Adressraum eines anderen Prozesses zugreifen, das geht nur deshalb weil ReadProcessMemory eine Windows API Funktion ist und der eigentliche Speicherzugriff im Windows Kernel Abläuft, der allen Speicher Adressieren kann.
Wie du die ReadProcessMemory API richtig verwendest liest du am besten auf [Only registered and activated users can see links. Click Here To Register...] nach
ich finde es immer wieder erstaunlich wie gut und fachlich du dich ausdrücken kannst find ich toll.

des weiteren kannst du mit einer dll injection genau das bezwecken was du willst , da die dll im adressraum des programmes liegt und deshalb darauf zugriff hat ohne jegliche api calls