Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Valori differenti con lo stesso codice
Forum - C/C++ - Valori differenti con lo stesso codice

Avatar
Thejuster (Member)
Guru^2


Messaggi: 1704
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 10:03
Giovedì, 12/11/2015
Ciao ragazzi.

Premetto di aver già realizzato questo programma utilizzando CodeBlock.

Il programma in questione, è un programma cheat.
Permette di alterare alcune variabili ed esempio aumentare il monete disponibili per un gioco.

In codeBlock esempio ho fatto in questo modo

Codice sorgente - presumibilmente C/C++

  1. DWORD indirizzo = 0x004D2004;
  2. DWORD offset = 0x4c;
  3. int valore = 0;
  4.  
  5. ReadProcessMemory(HWND,(void*)indirizzo,&valore,(DWORD)sizeof(valore),NULL);
  6.  
  7. cout << "Il valore è: << valore << endl;



Chiamando esempio questa istruzione il valore è: 1000


Ora tentando di rendere il programma graficamente più gestibile da parte dell'utente
ho quindi deciso di riscrivere tutto il programma tramite ile Qt.

Codice sorgente - presumibilmente C/C++

  1. DWORD indirizzo = 0x004D2004;
  2. DWORD offset = 0x4c;
  3. int valore = 0;
  4.  
  5. ReadProcessMemory(HWND,(void*)indirizzo,&valore,(DWORD)sizeof(valore),NULL);
  6.  
  7. QMessageBOx::Information(this,QString::Number(valore),tr("Valore:"),QMessagBox::Ok);



Ora il risultato da Qt cambia non è uguale a quello dato esattamente e funzionante da CodeBlock

Output CodeBlock : 1000
Output Qt : 4989812

Ora mi domando come mai con lo stesso codice i valori sono differenti?
Perché da CodeBlock funziona mentre su Qt il valore è sballato?
Ho forse sbagliato qualcosa?

Ho provato anche a convertire tramite la calcolatrice il valore output di Qt da QWord a Byte
pensando che forse QT come output mi dava un valore decimale.
Ma ugualmente è sballato.

NB: I valori che ho scritto sono a caso.

Ora stavo pensando.
Non è che restituendo un valore DWORD debba essere convertito in byte e successivamente in intero?


Ultima modifica effettuata da Thejuster il 12/11/2015 alle 10:08


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:15
Giovedì, 12/11/2015
Premesso che questo tipo di programmi non mi piacciono perché realizzati solo allo scopo di "imbrogliare" (anche se un gioco), vorrei chiarire solo degli aspetti tecnici.

E ti faccio una domanda ... quel programma lo esegui come exe autonomo o come DLL all'interno del gioco?

E come trovi il valore di HWND ? Non hai mostrato questa parte ... In realtà quel parametro deve essere un "handle al processo" non un "handle ad una finestra" ...

In tutti i casi, per la message box ...

Codice sorgente - presumibilmente Plain Text

  1. QString str;
  2. str.setNum(valore);
  3. QMessageBox::information(this, "Valore", str);


Ultima modifica effettuata da nessuno il 12/11/2015 alle 10:37


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1452
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 11:53
Giovedì, 12/11/2015
Giusto per chiarire (per l'ennesima volta) la questione compilatore...... codeblocks e qt possono usare lo stesso compilatore, o uno diverso (codeblocks supporta molti compilatori). Quindi dire Qt e codeblocks non significa assolutamente nulla. Se pensi che il problema sia del compilatore citi il compilatore, se pensi sia un errore di codice mostri il codice. Dirci gli IDE che usi è inutile, è come dire mi piace il gelato al limone: completamente inutile se il problema non è specifico di un IDE (es. non trovo il pulsante.... non riesco ad impostare...... ecc......).

PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1704
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 14:22
Giovedì, 12/11/2015
Testo quotato

Postato originariamente da nessuno:

Premesso che questo tipo di programmi non mi piacciono perché realizzati solo allo scopo di "imbrogliare" (anche se un gioco), vorrei chiarire solo degli aspetti tecnici.

E ti faccio una domanda ... quel programma lo esegui come exe autonomo o come DLL all'interno del gioco?

E come trovi il valore di HWND ? Non hai mostrato questa parte ... In realtà quel parametro deve essere un "handle al processo" non un "handle ad una finestra" ...

In tutti i casi, per la message box ...

Codice sorgente - presumibilmente Plain Text

  1. QString str;
  2. str.setNum(valore);
  3. QMessageBox::information(this, "Valore", str);




Ciao nessuno grazie per la risposta.
In realtà lo faccio giusto per capire i concetti e come muovermi su questi argomenti.

Il programma è un exe. non esegue nessuna dll injection.
Semplicemente ricava l'handle del processo utilizzando la funzione FindWindowA

ed'è proprio come dici tu nessuno. Ho ricavato l'handle del processo tramite il nome della finestra
utilizzando proprio HANDLE hwnd;

Ora scusami nessuno, ma non ho capito la tua risposta.

QString str;
str.setNum(valore);

Cosa cambia da QString::Number() e da str.setNum().
sto cercando di imparare.


PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1452
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 15:31
Giovedì, 12/11/2015
Thejuster invece di mostrare i valori a schermo hai fatto il debug?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:02
Giovedì, 12/11/2015
Ma hai usato il codice suggerito? E il risultato?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1704
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 8:25
Lunedì, 23/11/2015
Scusate se rispondo solo ora.
Ho risolto cmq

Il problema stava proprio nel codice e non nella conversione.
In c# e molto piu semplice. Ma in c++ devi fare una lettura degli indirizzi per quanti
Offset sono disponibili.
In pratica non funziona  indirizzo + offest = valore
Ma funziona

Indirizzo + offset = nuovo indirizzo
Nuovo indirizzo = valore.


PM Quote