Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

31.08.2012, 22:49

Kleine Pointer Frage

Hallo.
Ich habe einen Speicheradresse und will nun, dass ein Pointer auf diese Adresse zeigt, damit ich dann auf den Inhalt des Pointer zugreifen kann.
Wie mache ich das, wenn die Adresse z.B. 0x00000424 ist?

MfG
MazzMan
Hi

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

31.08.2012, 22:57

C-/C++-Quelltext

1
int* p = reinterpret_cast<int*>(0x00000424);

Allerdings habe ich nicht das Gefühl, dass du das tun solltest.

Woher genau kommt die Adresse, die du haben willst?
Normalerweise wird der Adress-Operator angewandt:

C-/C++-Quelltext

1
2
int n = 2;
int* pn = &n;

3

31.08.2012, 23:02

Bzw. in C:

C-/C++-Quelltext

1
int* p = (int*)0x00000424


Irgendwie werde ich den Gedanken nicht los, dass er damit versucht von einem anderen Programm einen Wert zu ändern...das würde so nicht gehen.

4

31.08.2012, 23:11

So Cheat-Engine-Mäßig? :huh:

MfG
Check

5

31.08.2012, 23:33

Irgendwie werde ich den Gedanken nicht los, dass er damit versucht von einem anderen Programm einen Wert zu ändern...das würde so nicht gehen.

auch mit dll nicht?
Hi

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

31.08.2012, 23:37

Hängt davon ab, was du mit "dll" genau meinst. Wenn du es schaffst, eine dll mit deinem Code in den Zielprozess zu injizieren, dann geht das, ja...

7

31.08.2012, 23:42

So Cheat-Engine-Mäßig? :huh:
Also ich denk schon.

Wenn ja, so könntest du es machen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <windows.h>
#include <iostream>
#include <string>

int main() {
    unsigned int lifePoints = 0x00000424;
    std::string windowName;
    std::cin >> windowName;
    HWND hWnd;
    
    hWnd = FindWindow(0, windowName.c_str());
    DWORD ID;
    HANDLE hProcessHandle;
    
    if(!hWnd) {
        std::cout << "Das Programm kann nicht gefunden werden\n";
        return 0;
    } else {
        std::cout << "Prozess wurde gefunden\n";
    }
    
    GetWindowThreadProcessId(hWnd, &ID);
    std::cout << "ID: " << ID << std::endl;
    
    hProcessHandle = OpenProcess(PROCESS_VM_WRITE | PROCESS_VM_OPERATION, false, ID);
    
    if(!hProcessHandle) {
        std::cout << "Prozess konnte nicht geoeffnet werden\n";
        return 0;
    } else {
        std::cout << "ProcessHandle: " << hProcessHandle << std::endl;
        int myValue = 100;
        while(true) {
            WriteProcessMemory(hProcessHandle, (LPVOID)lifePoints, &myValue, sizeof(int), NULL);
        }
    }
    
    CloseHandle(hProcessHandle);
    
    return 0;
}


Edit: Wenn du einen Injector brauchst (ein Programm das eine DLL in einem Prozess injiziert), dann schick mir eine PN.

PS: Ich gehe von einer legalen Nutzung aus.

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Delop« (01.09.2012, 00:06)


Beiträge: 721

Wohnort: /dev/null

Beruf: Software-Entwickler/Nerd

  • Private Nachricht senden

8

31.08.2012, 23:59

Du weißt schon, dass du das Rückgabeergebnis von OpenProcess mal lieber überprüfen solltest? Sobald die DACL des angegriffenen Prozess nämlich leicht verändert ist, funktioniert diese Art der Injektion schon nicht mehr.

9

01.09.2012, 00:04

Danke SupremeDeveloper. :) Habe es gefixed.

10

01.09.2012, 10:39

So Cheat-Engine-Mäßig? :huh:
Also ich denk schon.

Wenn ja, so könntest du es machen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include 
#include 
#include 

int main() {
    unsigned int lifePoints = 0x00000424;
    std::string windowName;
    std::cin >> windowName;
    HWND hWnd;
    
    hWnd = FindWindow(0, windowName.c_str());
    DWORD ID;
    HANDLE hProcessHandle;
    
    if(!hWnd) {
        std::cout << "Das Programm kann nicht gefunden werden\n";
        return 0;
    } else {
        std::cout << "Prozess wurde gefunden\n";
    }
    
    GetWindowThreadProcessId(hWnd, &ID);
    std::cout << "ID: " << ID << std::endl;
    
    hProcessHandle = OpenProcess(PROCESS_VM_WRITE | PROCESS_VM_OPERATION, false, ID);
    
    if(!hProcessHandle) {
        std::cout << "Prozess konnte nicht geoeffnet werden\n";
        return 0;
    } else {
        std::cout << "ProcessHandle: " << hProcessHandle << std::endl;
        int myValue = 100;
        while(true) {
            WriteProcessMemory(hProcessHandle, (LPVOID)lifePoints, &myValue, sizeof(int), NULL);
        }
    }
    
    CloseHandle(hProcessHandle);
    
    return 0;
}


Edit: Wenn du einen Injector brauchst (ein Programm das eine DLL in einem Prozess injiziert), dann schick mir eine PN.

PS: Ich gehe von einer legalen Nutzung aus.</iostream>
Dein Bespiel ist aber nur ein Konsolenfenster. Ich versuche eine DLL zu schreiben und einen Injector habe ich auch schon
Hi

Werbeanzeige