Geheugen uitlezen

Status
Niet open voor verdere reacties.

JB'tje

Gebruiker
Lid geworden
31 mei 2004
Berichten
556
Hallo,

ik wil een programmatje maken dat in staat is binnen het geheugen van een opgestart programma te zoeken naar een bepaalde waarde (integer), uiteindelijk naar een tekst.

Ik ben totaal nieuw met C++, en heb met hulp het volgende voor elkaar gekregen:

Code:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;


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

int NFProcesHandle = 0;

void GetNFProcesHandler( 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) );
        }
    }


    // Print the process name and identifier.

    CloseHandle( hProcess );
	if ( _tcscmp(szProcessName, _T("programma.exe")) == 0 )
	{
	    _tprintf( TEXT("%s  (PID: %u)\n"), szProcessName, processID);

		size_t* lpBaseAddress;
		void* lpBuffer = calloc(256, 1);
		size_t nSize = 256;
		SIZE_T lpNumberOfBytesRead;

		if( !ReadProcessMemory(hProcess, &lpBaseAddress, lpBuffer, nSize, &lpNumberOfBytesRead) )
		{
			printf("Stringetje: %s", GetLastError());
			//_tprintf( TEXT("HEX: 0x%x",  *(int*)lpBuffer) );
		}
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
    // Get the list of process identifiers.

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

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

    // Calculate how many process identifiers were returned.

    cProcesses = cbNeeded / sizeof(DWORD);

    // Haal de ProssesHandler op van.
    for ( i = 0; i < cProcesses; i++ )
	{
        if( aProcesses[i] != 0 )
		{
			GetNFProcesHandler( aProcesses[i] );
	}	}


	// loopje tot je op een toets drukt.
	while(1)
	{
		if(_kbhit())
			break;
}	}

Dit zoekt naar de gerunde processen en gaat verder met de handle van het programma waar in naar op zoek ben.
Nu wil ik met deze handle "ReadProcessMemory" gebruiken, echter moet er een "lpBaseAddress" opgegeven worden, waarvan ik niet weet hoe ik deze moet achterhalen/wat ik hiervoor moet invullen.

Alvast bedankt!
Jeffrey
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan