Bot - Algorithmus

03/30/2007 17:01 neji#16
GetWindowThreadProcessId,
OpenProcess
WriteProcessMemory
ReadProcessMemory


Was handles und pointer sind und wie man sie anwendet solltest du generell natürlich auch wissen.
03/31/2007 00:40 Term!nX#17
Falls nicht, werde ich im unendlichen Buch des Wissen: Die C++ Programmiersprache nachschlagen ;)

BlackFog, schaden kanns ja nicht :) Würde mich einmal interessieren.
04/03/2007 16:40 Term!nX#18
Also, wenn ich das mit den Handles richtig verstanden habe:

Handles sind sozusagen Identifikationsnummern für Digitale Objekte, zB Fenster. Dann kann ich mit Hilfe dieser ID zB ein Fenster schließen oder anderweitig manipulieren.

// sorry für Doppelpost... ganz vergessen das ich letzter war

Angenommen, ich müsste Arrays suchen, wäre es so, dass ich zB ein LifeArray habe, dass dann zB so aussieht (mit ^= mein ich entspricht): LifeArray[0] ^= HP; LifeArray[1] ^= Mana; LifeArray[2] ^= XP; ... usw

Dann müsste ich die Adresse des Arrays finden und dann die Pointer mit der speziellen Pointer-Syntax für Arrays programmieren, die mir dann aber die verschiedenen Werte anzeigen.

PS: Wie würde eigentlich ein Pointer auf eine Speicheradresse syntaktisch aussehen? Habe bis jetzt nur welche gefunden, die auf Varialben zeigen.
04/12/2007 21:36 wiz#19
Code:
char *hp = (char*)0xDEADBEEF;
Das wäre ein Pointer auf die absolute Speicheradresse 0xDEADBEEF, wobei diese Zahl relativ zu deinem (d.h. für deine Anwendung) allokierten virtuellen Speicher ist. Willst du auf fremden Speicher zugreifen geht nichts ohne WriteProcessMemory().

Edit: Das ist natürlich kein Array sondern eine struct.
Ein Array sieht im Speicher nicht anders aus, als einfach aneinandergereihte Bytes (wenn es ein char-Array ist). So gesehen ist ein struct das Gleiche. Die Elemente sind einfach hintereinander im Speicher. Es gibt hier allerdings einige Probleme, die ich nicht mehr genau kenne. So dürfen ints glaube ich nur an geraden oder durch 4 teilbaren Offsets liegen. Das heißt effektiv, dass der Compiler mit Nullbytes padded, sofern das nicht gegeben ist!


Du hast ein struct am Offest 0x00.
Das sieht so aus

Code:
struct player
{
char HP;
char MP;
int XP;
char level;
};
Dann wäre der Offest von HP = Arrayoffset = 0x00
MP wäre an Offset+1 (1 Byte) -> 0x01
XP wäre Offset+2 (2 Bytes weiter) -> 0x02
Level wäre Offset+6 (XP ist 4 Byte weil int) -> 0x06
04/12/2007 22:28 Term!nX#20
Hab zum Teil so was recherchiert, aber das war wirklich hilfreich, vielen dank!