2016-07-10 5 views
-3

Es ist möglich, Lesespeicheradresse ohne Readprocessmemory gleiche wie DLL-Injection:Es ist möglich, Lesespeicheradresse ohne Readprocessmemory

Ex:

In DLL-Injection:

int main() 
{ 
    char SomeAnyValue = *(char*)0x00001; // address of sample 
} 

In einem externen Prozess muss ich die Handle Prozess, Fine bis jetzt ... aber ist es möglich, lesen Sie den Wert wie in dll Injektion ohne Verwendung von readprocessmemory?

+0

Das ist nicht wirklich im C++ - Standard definiert. –

+0

Nicht möglich, da ReadProcessMemory anderen Prozessspeicher liest und Ihr Prozess innerhalb seines eigenen definierten Speicherbereichs arbeitet und keinen Zugriff auf den Speicher des anderen Prozesses hat. –

+0

@DanielProtopopov Thx für die Antwort, wollte nur eine Antwort von jemandem, der schon Erfahrung in diesem hatte, ich weiß nicht, warum viele Negative, und ein anderer, der mir Unsinn antwortete. – nikomaster

Antwort

1

DLL-Injektion funktioniert durch Injektion Code in den Zielprozess! Sobald der Code injiziert wurde, wird er im Adressraum des Zielprozesses ausgeführt und hat als solcher direkten Zugriff auf die Speicheradressen des Zielprozesses.

Wenn Sie Ihren Code in den Zielprozess nicht injizieren, es hat keinen direkten Zugang zu dem Adressraum des Zielprozesses, und als solche muss sie ReadProcessMemory() stattdessen verwenden.

+0

Es sei denn, die beiden Prozesse verwenden gemeinsam genutzten Speicher ... Oder zugeordneten Speicher ... Oder ein Datenelement, das aus einer DLL exportiert wurde ... –

+0

Mit gemeinsam genutztem Speicher greifen Sie nicht direkt auf den Speicher des Zielprozesses * direkt * zu, Sie greifen beide auf den lokalen Speicher zu, der der gleichen Auslagerungsdatei zugeordnet wurde. –

+0

Unter Windows verfügt jeder Prozess über Seitentabelleneinträge, die auf denselben physischen Speicher verweisen. Sie greifen tatsächlich auf den gleichen physischen Speicher zu. –

Verwandte Themen