Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 11:43

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



C++ Pointer Problem

Discussion on C++ Pointer Problem within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Nov 2010
Posts: 700
Received Thanks: 507
C++ Pointer Problem

Hallo, ich habe nach langer Zeit noch mal versucht nen kleinen Hack zu schreiben. Unzwar nicht mehr mit AutoIT (keine schöne Sprache) sondern in C++.

Ich benutze dafür ne Dll und nen kleinen Injector. Der Hack soll einfach einen Wert von einem selbst geschrieben Programm verändern.
Den Pointer hab ich mal im Anhang. (Ein Bild von CE)

Dann habe ich folgenden Code versucht:
PHP Code:
#include <windows.h>
#define Adress 0x93f873

void RewriteValues()
{
    
int *MyPoint;
    
MyPoint=(int *)Adress;
    *
MyPoint=2000;
}

BOOL WINAPI DllMain(HINSTANCE hinstDll,DWORD Reason,LPVOID Reserved)
{
    switch(
Reason)
    {
    case 
DLL_PROCESS_ATTACH:
        
RewriteValues();
        break;
        
//6.
    
case DLL_PROCESS_DETACH:
        
MessageBox(NULL,"Hack geschlossen","Ende",0);
        break;
    }
    return 
TRUE;

Welcher auch funktioniert hat. Nur dann habe ich versucht den Pointer einzuarbeiten und das ist dann schief gelaufen.
Bin jetzt kein C++ Pro darum wollte ich mal fragen ob mir jemand helfen kann.
Attached Images
File Type: jpg CE.JPG (28.2 KB, 67 views)
supercracker13 is offline  
Old 07/10/2014, 21:34   #2
 
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
Guck dir mal die Adresse auf dem Bild genau an und die Adresse die du definest. Vielleicht fällt dir da bei der letzten stelle was auf ...
th0rex is offline  
Old 07/10/2014, 21:36   #3
 
elite*gold: 0
Join Date: Dec 2013
Posts: 92
Received Thanks: 3
milomir is offline  
Old 07/10/2014, 21:43   #4
 
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
Quote:
Originally Posted by milomir View Post
He is using a dll. Why would you use WPM in a dll ?
th0rex is offline  
Old 07/10/2014, 21:53   #5
 
elite*gold: 0
Join Date: Nov 2010
Posts: 700
Received Thanks: 507
@omitma Also ich weis schon das die offsets dazu addiert werden. Nur das eigentliche Problem das sich mir gestellt hat war "THREADSTACK0"-00000150

Also ich gehe mal davon aus das es der BasePointer ist (Ich habs nicht so mit den Namen, ich meine auf jeden Fall den Pointer wovon die anderen Adressen abhängig sind also die die sich bei jedem Start ändern)
Und ich weis nicht genau wie man den findet. Ich hatte schon mal
PHP Code:
DWORD ImageBase = (DWORD)GetModuleHandle(0); 
Aber da kam immer 0 raus und das kann ja nicht ganz stimmen.

Wenn ich diese Adresse habe muss ja eigentlich nur die "150" und "E0" dazu addieren oder ?
supercracker13 is offline  
Old 07/10/2014, 21:57   #6
 
newchild's Avatar
 
elite*gold: 0
Join Date: Oct 2012
Posts: 151
Received Thanks: 42
in dem code schreibst du
#define Adress 0x93f873
aber in CE steht
0x93f874
newchild is offline  
Old 07/10/2014, 22:04   #7
 
elite*gold: 0
Join Date: Nov 2010
Posts: 700
Received Thanks: 507
Das ist egal war nur ein Beispiel. Aber die Adresse ändert sich bei jedem Start und daher bringt mir das nicht viel
supercracker13 is offline  
Old 07/11/2014, 01:40   #8


 
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
Quote:
Originally Posted by supercracker13 View Post
Ich hatte schon mal
PHP Code:
DWORD ImageBase = (DWORD)GetModuleHandle(0); 
Aber da kam immer 0 raus und das kann ja nicht ganz stimmen.

Wenn ich diese Adresse habe muss ja eigentlich nur die "150" und "E0" dazu addieren oder ?


Quote:
If the function succeeds, the return value is a handle to the specified module.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.
Die Adressen (bzw. die Offsets) sind relativ zur Modulbase, daher müsstest du die Offsets eben auf diese addieren um stetig auf deine Wunschadresse zu kommen.
Mostey is offline  
Old 07/11/2014, 09:31   #9
 
elite*gold: 0
Join Date: Nov 2010
Posts: 700
Received Thanks: 507
Ok theoretisch habe ich das verstanden nur das umsetzen geht in die Hose.

Hab probiert
PHP Code:
#define Adress 0xe0

void RewriteValues()
{
    
int *MyPoint;
    
DWORD base = (DWORD*)GetModuleHandle(0) - 0x150;
    
MyPoint=(int *)(base Adress);
    *
MyPoint=2000;

Ich habe jetzt "-0x150" gerechnet weil bei CE stand ja Threadstack - 150.
Aber egal was ich da mache das ganze Läuft nicht
supercracker13 is offline  
Old 07/11/2014, 12:10   #10


 
Jeoni's Avatar
 
elite*gold: 966
Join Date: Apr 2010
Posts: 1,105
Received Thanks: 681
Das liegt vermutlich daran, dass "Threadstack" gar nicht das Hauptmodul ist, sondern das, wonach es sich anhört: der Stack eines Threads. Oder heißt das Target zufällig "Threadstack.exe" bzw. "Threadstack0.exe"? Das kommt daher, dass das, was du suchst im Target eine lokale Variable ist, und damit auf dem Stack liegt, was in der Praxis im Gamehacking unüblich ist und selten bis gar nicht vorkommt (ich hab's jedenfalls nie gesehen oder gehört).
Wenn du das Problem trotzdem lösen möchtest, musst du schauen, zu welchem Thread der Stack gehört, ihn zur Laufzeit während einer Threaditeration identifizieren, schauen, an welchem Punkt er sich gerade befindet (== welche instruktion als nächstes ausgeführt wird: EIP-/RIP-Register) und anhand dessen über sein ESP-/RSP-Register +- einem Offset (was abhängig von EIP/RIP ist, da Code im Target ja mit pushs und pops oder direkt ESP/RSP verändern kann) zur gewünschten Adresse kommen.
Weiterhin zu beachten ist, dass die lokale Variable natürlich invalid wird, wenn die Funktion, zu der sie gehört, returnt. Theoretisch ist sie danach zwar noch im Speicher, kann aber von z.B. der nächsten Funktion überschrieben werden. Um das zu verifizieren, bietet es sich wieder an zu schauen, ob EIP/RIP (und damit der Thread zur Zeit) in der gewünschten Funktion liegt.

Ich hoffe, dass ich helfen konnte
Jeoni

Btw. hoffe ich, dass dir bewusst ist, dass
Code:
DWORD* x = (DWORD*)y + z; // z is an integral type, like -0x150
wertmäßig zu soetwas führt: x = y + z*sizeof(DWORD)
Entsprechend zeigt x nicht auf z Bytes über y, sondern auf z*sizeof(DWORD) Bytes über y.
Für mehr Details dazu, such nach "Pointerarithmetik".
Jeoni is offline  
Reply


Similar Threads Similar Threads
Pointer/Pointer finden (problem)
01/08/2014 - AutoIt - 7 Replies
Hallo Leute. Bin schon seid einigerzeit am suchen bzw. rumtesten wie ich "die Adresse der Koordinaten der hingeklickten Stelle" finden kann ... :S will ein bot erstellen und damit er im hintergrund aufen kann brauche ich: Meine character coordinaten/Pointer ( Habe ich) und jetzt muss ich die coordinaten der hingeklickten stelle finden bzw. die adresse aber iwie klappt nix x,x ... finde immer einige adressen und den pointer meines charas , der Pointer der coordinaten meines charas...
Pointer Problem
05/02/2010 - General Coding - 4 Replies
guten abend, ich bin schon die ganze zeit dran einen pointer mit CE zu erstellen. der wichtige screenshot http://www.bilder-hochladen.net/files/ewld-1-jpg. html der value wert der addresse springt in der anzeige immer von 550-0-813694976-0 und wieder von vorn durch ( so jeweils 1 sec intervall ) mein problem:
problem mit pointer
12/28/2009 - General Coding - 7 Replies
nabend^^, habe da ein problem . ich habe die xyz pointer von dem game requim bloodymare gesucht. das ging auch. dann habe ich halt find out what writes to this adress. kam ein mov command . ich sollte halt nach der adresse : 01294170. und? es kommt nicht eine adresse. bei allen 3 adressen zeigt er mir die adresse von oben an. wie komme ich an den base pointer ?
Pointer Problem
11/28/2009 - General Coding - 9 Replies
Huhu, und zwar folgendes Problem ich wollte mich etwas mit cheatengine beschäftigen und ein paar Pointer in Diablo 2 finden. Angenommen ich suche meine Lebenspunkte (1631) --> First Scan (4bytes , exact value) = 1631 --> ein paar weitere Scans mit veränderten Werten und es bleiben noch 2 Addressen übrig die immer den gleichen Wert haben sobald sich mein Leben verändert im Spiel.



All times are GMT +2. The time now is 11:44.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.