Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Entry point
Forum - C/C++ - Entry point

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
vincenzodicicco (Normal User)
Newbie


Messaggi: 5
Iscritto: 03/04/2010

Segnala al moderatore
Postato alle 15:06
Sabato, 03/04/2010
Salve, è da un po di giorni che mi pongo la domanda su come ottenere tramite c++, l'entry point di un eseguibile scelto.
Lo scopo sarebbe di riuscire a leggere i vari indirizzi di un eseguibile, come fa un diassemblatore, qualcuno sa aiutarmi?

PM Quote
Avatar
GuglielmoS (Ex-Member)
Pro


Messaggi: 114
Iscritto: 27/11/2009

Segnala al moderatore
Postato alle 15:12
Sabato, 03/04/2010
Testo quotato

Postato originariamente da vincenzodicicco:

Salve, è da un po di giorni che mi pongo la domanda su come ottenere tramite c++, l'entry point di un eseguibile scelto.
Lo scopo sarebbe di riuscire a leggere i vari indirizzi di un eseguibile, come fa un diassemblatore, qualcuno sa aiutarmi?


Questo potrebbe interessarti.
https://quequero.org/store/program/ntos_pe.htm
Ciao GuglielmoS.

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 15:51
Sabato, 03/04/2010
Se parliamo di un "file eseguibile", trovi tutto nell'header del file stesso (secondo il formato PE, Portable Executable).

Ma se parli di un "eseguibile a run time", il discorso è diverso.

Dato che parli di "indirizzi di un eseguibile" (che non ha molto senso), spiegati un po' meglio ... soprattutto dicci chiaramente, cosa vuoi fare (solita questione di modificare valori contenuti in memoria per ingannare i giochi?).

PM Quote
Avatar
vincenzodicicco (Normal User)
Newbie


Messaggi: 5
Iscritto: 03/04/2010

Segnala al moderatore
Postato alle 19:08
Sabato, 03/04/2010
No non devo modificare nessun gioco, e neppure programmi altrui.
Bensi devo apportare delle modifiche ad un mio programma nato proprio per questo scopo.Devo applicare dei Jump all'entrypoint di questo eseguibile per dirottarlo ad un altro indirizzo più infondo.
Queste procedure le riesco a fare manualmente con un diassemblatore come ollydebug ma a me serve farle in automatico.E' tutto per un piccolissimo software di sicurezza e più che altro per passatempo e approfondimenti.Quindi a me interessa riuscire a leggere i vari indirizzi.grazie spero di essere stato più chiaro

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 19:57
Sabato, 03/04/2010
Testo quotato

Postato originariamente da vincenzodicicco:

No non devo modificare nessun gioco, e neppure programmi altrui.
Bensi devo apportare delle modifiche ad un mio programma nato proprio per questo scopo.



Cioè ? Se è un tuo programma, perchè non modifichi il sorgente ?

Testo quotato

Devo applicare dei Jump all'entrypoint di questo eseguibile per dirottarlo ad un altro indirizzo più infondo.



Se non sei più esplicito e chiaro, non si capisce il perchè di questa cosa ...

Testo quotato

Queste procedure le riesco a fare manualmente con un diassemblatore come ollydebug ma a me serve farle in automatico.E' tutto per un piccolissimo software di sicurezza e più che altro per passatempo e approfondimenti.



Te l'ho detto ... se non sei molto più chiaro e spieghi in dettaglio, non si può dire molto ...

A quanto pare, dato che parli di azioni eseguite con un debugger, ti serve a "runtime" ...

Testo quotato

Quindi a me interessa riuscire a leggere i vari indirizzi.



Ma non dovevi modificare l'entry point? Cosa c'entrano gli "indirizzi" (di cosa?) ?

Testo quotato

grazie spero di essere stato più chiaro



Mi dispiace, ma non lo sei stato ... per due motivi : non ci dici "esattamente" cosa vuoi fare e, molto probabilmente, non sai "esattamente" cosa pensi si possa fare per ottenerlo.

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 3:40
Domenica, 04/04/2010
se per "leggere gli indirizzi di un eseguibile" intendi dire "leggere il contenuto delle celle di memoria occupate da un eseguibile" allora la soluzione è:

Codice sorgente - presumibilmente C/C++

  1. FILE *fin;
  2. int c, addr;
  3. fin = fopen("C:\Windows\calc.exe", "rb");
  4.  
  5. addr = 0;
  6. do
  7. {
  8.   c = fgetchar(fin);
  9.   printf("%x : %x\n", addr, c); // TODO: aggiungere effetto "matrix" qui
  10.   addr++;
  11. } while (c != EOF);
  12.  
  13. fclose(fin);


:rotfl:

PM Quote
Avatar
Overflow (Normal User)
Expert


Messaggi: 334
Iscritto: 11/01/2008

Segnala al moderatore
Postato alle 9:38
Domenica, 04/04/2010
in pratica il tuo programma dovrebbe disassemblare un programma, e inserire "all'avvio" di questo l'istruzione assembler jmp che lo fa saltare quindi ad un altro indirizzo di memoria?


Auguri di buona Pasqua a tutti!

Ultima modifica effettuata da Overflow il 04/04/2010 alle 9:38
PM Quote
Avatar
vincenzodicicco (Normal User)
Newbie


Messaggi: 5
Iscritto: 03/04/2010

Segnala al moderatore
Postato alle 12:22
Domenica, 04/04/2010
Overflow ha centrato in pieno.

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 23:29
Domenica, 04/04/2010
Testo quotato

Postato originariamente da vincenzodicicco:

Overflow ha centrato in pieno.



A parte il fatto che il forum non è un gioco al "tiro a segno" da centrare, non è che si sia capito molto di più ...

Un programma NON "disassembla" un altro programma e all'avvio viene eseguito del codice a volte necessario per inizializzare il programma, codice che NON può essere saltato cambiando un JMP. E per dirla tutta, non si sa neanche come avresti identificato il "nuovo indirizzo" ...

Insomma, sicuramente, se vuoi fare qualcosa, devi spiegare BENE cosa vorresti fare IN PRATICA (qual è questo programma? cosa vuoi ottenere saltando all'altro indirizzo?).

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo