Computerhilfen.de Logo
Forum
Tipps
News
Frage stellen

C++, RAM Zugriff

Also wie das Betreff schon sagt, moechte ich ueber C++ auf den RAM direkt zugreifen.

Mein Ziel ist es von anderen Programmen einen Wert zu lesen und ihn aendern zu koennen.

Als schon vertiges Beispiel siehe CheatEngine, es kann auf den Prozess eines Programms zugreifen, und Werte herraussuchen. Eben sowas will ich Programmieren.

Der SourceCode von dem Prog hilft mir nicht weiter :-D.

mfg.

P.S. Platform: Windows (XP/Vista)


Antworten zu C++, RAM Zugriff:

Erst mal eine Frage vorab, wie gut sind Deine C/C++ Kenntnisse?

Falls Du eher Anfänger bist, dann rate ich Dir, erst einmal kleinere Projekte durchzuführen.

Nein, ich bin kein Anfänger, ich kenn mich in C++ schon sehr gut aus^^. Also du kannst ruhig mit ärgeren Sachen daher kommen :-D.

Ich hab schon so versucht mit Array-Overflow sachen zu zugreifen aber das geht ja net, is vom Windows gesperrt ;D

Man kann unter modernen Betriebssystemen nich einfach auf Speicherbereiche anderer Prozesse zugreifen.
Buffer Overflows nutzen Schwachstellen der betreffenden Applikation aus, um eigenen Code einzuschleusen und mit den Rechten eben dieser Applikation auszuführen. Das ist aber kein Feature von C++, sondern allenfalls ein böser Hack.
 

Es geht jetzt net darum, dass ich CheatEngine nachschreiben will und irgendwas boeses damit anstellen will. Mich interessiert es halt, denn irgendwie muss es ja auch gehen.

Wenn ich was boeses fuer irgendwelche Spiele vor hab, benutz ich gleich CheatEngine, warum was schreiben was schon existiert?!

Es interessiert mich halt einfach, wie diese dinge funktionieren.

Und des hab ich ja auch gesagt, dass es net geht das man auf irgendwelche Adressen im RAM zugreifen kann, weil das Betriebssystem des verbietet^^.

Ich bin aus dem alter raus wo ich kleine Scherzviren und irgendwelche verbotenen Sachen machen will :-D 

« Letzte Änderung: 15.02.08, 16:44:20 von Fuxi »

Moin,

mit bösem Hack meinte ich nicht das Du mit dem Hack etwas böses anstellen willst, sondern lediglich böse im Sinne von nicht sauber programmiert, etc.

Allgemeine Infos zu "Buffer Overflows" liefert z.B. Wikipedia: http://de.wikipedia.org/wiki/Puffer%C3%BCberlauf

Ich vermute mal, es dürfte auch möglich sein den Speicher eines fremden Prozesses mittels eines Kernelmoduls auszulesen. Dies wäre zumindest eine "saubere" und allgemein funktionierende Lösung.

Ein Exploit über Buffer Overflows dient i.d.R. eh eher dazu, eigenen Code mit den Rechten der "gehackten" Applikation auszuführen (um so z.B. root-Rechte zu erlangen).

Danke fuer den Link, ich hab mich eh schon mal mit dem Programm metasploit ein bisschen herum gespielt, und weis schon ein bisschen was drueber^^.

Aber was meinst du mit Kernelmodul?, kannste mir da bitte ein bisschen mehr drueber erzaehlen oder einen Link schicken?

rofl, ich meinte eher was praktisches. z.B. ein Codebeispiel fuer C++, oder n Link zu einem Code Beispiel.

Wenn du mal einen Linux-Admin so richtig zu kochen bringen willst (was dieses Thema anbelangt), dann erwähne beim Kaffeetrinken das Wort vmsplice.

Lol, is ja geil :-D.

Ich haetts aber eigtl gern fuer Windows^^.

Aber wenn des so bei Linux funktioniert, wuerde das theoretisch wenn man es in der VM-Ware simuliert, an der echten Maschine auch den Exploit hervorrufen?, oder ist das von der VMWare geschuetzt?

mfg. und danke
Fuxi

ah, ja eigtenlich schon :-D

Ich bring es einfach nicht zusammen, die Methode auf zu rufen^^.

Also:

LPVOID buf;
bool s = WINAPI::ReadProcessMemory("firefox.exe", 0, buf,999, NULL);
cout << s << endl;
Der einzige Fehler ist: error C2059: Syntaxfehler: '__stdcall' (in der 2. Zeile bei bools = ...)

So weit so gut, das sagt mir jetzt ueberhaupt nichts!
Kann mir bitte mal wer ein Codebeispiel schicken?

danke u. mfg.
Fuxi   
« Letzte Änderung: 02.03.08, 13:32:13 von Fuxi »

1) WINAPI ist __kein__ Namespace
2) ReadProcessMemory legt keinen Speicher an
3) "Firefox.exe" ist __kein__ HANDLE

Wenn ich nachher noch Lust habe, schreibe ich nen kurzes Beispiel. Aber ehrlich diese Punkte zeigen ziemlich, dass du keine Ahnung von C hast.

Ich weiß nicht ob es crashen wird, ich weiß nicht in wie weit das funktioniert.
Aber hey, zumindest kompiliert es. (Nach dem man Psapi.lib angelinkt hat).

#define _WIN32_WINNT 0x0500

#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include "psapi.h"

void PrintProcessNameAndID( DWORD processID )
{
TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");

// Get a handle to the process.

HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID );

// Get the process name.

if( NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;

if( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) )
{
GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName)/sizeof(TCHAR) );
}

BYTE bla[1024];
ReadProcessMemory( hProcess, 0, bla, sizeof( bla ), 0 );
}

// Print the process name and identifier.

_tprintf( TEXT("%s  (PID: %u)\n"), szProcessName, processID );

CloseHandle( hProcess );
}


void _tmain()
{
// Get the list of process identifiers.

DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;

if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
return;

// Calculate how many process identifiers were returned.

cProcesses = cbNeeded / sizeof(DWORD);

// Print the name and process identifier for each process.

for ( i = 0; i < cProcesses; i++ )
PrintProcessNameAndID( aProcesses[i] );

}

Ja ne ich hab schon Ahnung, nur ich habe eben nicht gewust wie ich so ein "Handle" erstelle^^. Und das selbe bei den anderen Objekten.

Ich weis zwar wie man ein Objekt erstellt, nur bei denen hat des net funktioniert...

Wobei in der Dokumentation die vorher gepostet wurde, stand doch drinnen das es bool zurueck gibt^^

Ausserdem krachts bei mir, 3 nicht definierte externe verweise (ja ich hab des psapi.lib inkludiert).

Egal, dein Code hat mir schon mal geholfen, ich werd mich jetzt noch bissle rumspielen, und wenn ich n richtigen Erfolg habe, es noch hier rein Posten, damit nicht nur ich gescheiter bin, sondern auch die die das hier lesen^^

STSFFAP
Standardlektüre

Mehr Phrack magazine - alles mögliche zum thema stack, heap, manipulation selbiger, etc. pp. suche nutzen. 

« ein kleiner scriptForfiles - Daten/Verzeichnisse löschen, die älter sind als... »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
C++
C++ ist eine von der ISO standardisierte Programmiersprache und eine erweiterte Form von C zur objektorientierten, generischen und prozeduralen Programmierung. Weitestgeh...

D-RAM
D-RAM steht für "Dynamic Random Access Memory". Es handelt sich dabei um einen Typ von Arbeitsspeicher, der in den meisten Computern und vielen anderen elektronische...

DVD RAM
DVD-RAM ist eine der drei wiederbeschreibbaren DVD-Formate, deren Daten sich wieder löschen und neu beschreiben lassen können. Das RAM steht für random-acc...