vincenzodicicco (Normal User)
Newbie
Messaggi: 5
Iscritto: 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?
|
|
GuglielmoS (Ex-Member)
Pro
Messaggi: 114
Iscritto: 27/11/2009
|
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? |
|
|
()
Newbie
Messaggi:
Iscritto:
|
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?).
|
|
vincenzodicicco (Normal User)
Newbie
Messaggi: 5
Iscritto: 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
|
|
()
Newbie
Messaggi:
Iscritto:
|
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 ?
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 ...
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" ...
Quindi a me interessa riuscire a leggere i vari indirizzi. |
Ma non dovevi modificare l'entry point? Cosa c'entrano gli "indirizzi" (di cosa?) ?
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. |
|
TheKaneB (Member)
Guru^2
Messaggi: 1792
Iscritto: 26/06/2009
|
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++ |
FILE *fin;
int c, addr;
fin = fopen("C:\Windows\calc.exe", "rb");
addr = 0;
do
{
c = fgetchar(fin);
printf("%x : %x\n", addr, c); // TODO: aggiungere effetto "matrix" qui
addr++;
} while (c != EOF);
fclose(fin);
|
|
|
Overflow (Normal User)
Expert
Messaggi: 334
Iscritto: 11/01/2008
|
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 |
|
vincenzodicicco (Normal User)
Newbie
Messaggi: 5
Iscritto: 03/04/2010
|
Overflow ha centrato in pieno.
|
|
()
Newbie
Messaggi:
Iscritto:
|
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?).
|
|