Oppure

Loading
04/04/10 21:29
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?).
05/04/10 18:43
vincenzodicicco
Nessuno ha mai messo in discussione la serietà di questo forum.
Apprezzo molto che cerchi di aiutarmi, ma penso che potresti evitare di rispondere in questo modo e pensare che non tutti ne sappiano quanto te.
Apparte tutto ciò visto che non so come spiegarmi, ti indico i passi che faccio "manualmente" e che rappresentano lo scopo che vorrei ottenere automaticamente tramite un'applicazione.
Se apro un programma con un diassemblatore (rammento che utilizzo per i miei studi ollydebug) automaticamente, o premendo il tasto asterisco, si seleziona la prima istruzione che eseguirà il programma una volta avviato.
Scrivo un po di codice assembly per far uscire un messaggio a video(il famoso messagebox), in una zonda della mia applicazione (solitamente in fondo) dove non vedo più istruzioni,in seguito trascrivo la prima istruzione che compare premendo asterisco(penso si chiami entrypoint) e subito dopo a questa scrivo un salto all'indirizzo successivo a quello dell'entrypoint(Qappresenterebbe la seconda istruzione che eseguirebbe normalmente l'applicazione).
Eseguito tutto ciò modifico il reale entrypoint con un salto al blocco di istruzioni aggiunto, vedrò che realmente (Avviando l'applicazione modificata) eseguirà prima le istruzioni aggiunte e proseguirà avviando normalmente l'applicazione.
Ora questo e quello che vorrei ottenere, perdono termini incoretti o nuove incomprensioni, vorrei tanto che chi sappia mi corregga.
Tutto questo interesse riguarda un progetto colletivo di un'applicazione di sicurezza.Ringrazio tutti, specialmente il Sig. "Nessuno".Mi scuso per le eventuali ripetizioni.
Ultima modifica effettuata da vincenzodicicco 05/04/10 18:46
aaa
05/04/10 19:59
Postato originariamente da vincenzodicicco:
Apprezzo molto che cerchi di aiutarmi, ma penso che potresti evitare di rispondere in questo modo e pensare che non tutti ne sappiano quanto te.


Non penso di saperne più di te ... volevo soltanto capire cosa vorresti ottenere, perchè non l'avevo ancora capito ...

Se apro un programma con un diassemblatore (rammento che utilizzo per i miei studi ollydebug) automaticamente, o premendo il tasto asterisco, si seleziona la prima istruzione che eseguirà il programma una volta avviato.


Questo indirizzo viene ottenuto "dinamicamente", quando il sistema operativo (il loader) carica in memoria l'eseguibile e gli assegna uno "spazio di indirizzi virtuali".
L'offset dell'entry point si ottiene dall'apposito campo dell'header del file .exe (appunto, ti consigliavo di dare un'occhiata al formato PE, in cui troverai questa informazione).

Scrivo un po di codice assembly per far uscire un messaggio a video(il famoso messagebox), in una zonda della mia applicazione (solitamente in fondo) dove non vedo più istruzioni


Ma ci potrebbero essere dei dati del processo in esecuzione ... Questa è una pratica molto "pericolosa" per la stabilità del processo ...

,in seguito trascrivo la prima istruzione che compare premendo asterisco(penso si chiami entrypoint) e subito dopo a questa scrivo un salto all'indirizzo successivo a quello dell'entrypoint(Qappresenterebbe la seconda istruzione che eseguirebbe normalmente l'applicazione).

Eseguito tutto ciò modifico il reale entrypoint con un salto al blocco di istruzioni aggiunto, vedrò che realmente (Avviando l'applicazione modificata) eseguirà prima le istruzioni aggiunte e proseguirà avviando normalmente l'applicazione.
Ora questo e quello che vorrei ottenere, perdono termini incoretti o nuove incomprensioni, vorrei tanto che chi sappia mi corregga.


A questo punto, il modo corretto di operare è modificando l'eseguibile.

1) trova nell'eseguibile il campo relativo all'offset dell'entry point (ti ripeto ... lo trovi seguendo il formato del file PE)

2) modifica questo valore nell'eseguibile (tramite un editor esadecimale), aggiungendo il numero di byte corretti per puntare alla prossima istruzione (dipende dalla lunghezza del codice operativo della prima istruzione da scartare)

3) lancia l'eseguibile così corretto

Tutto questo interesse riguarda un progetto colletivo di un'applicazione di sicurezza.


Diciamo che stai craccando un eseguibile ... non avendo altre spiegazioni migliori, penso che sia l'unica possibile ...
05/04/10 21:40
vincenzodicicco
Ti ringrazio di nuovo, vedrò di informarmi il più possibile sul formato PE, se pensi di avere qualche link o documento che potrebbe essermi utile mi farebbe molto piacere se me lo indicassi.
Poi non vedo il motivo per cui non mi devi credere, immaginavo una tua affermazione simile, ma non devo craccare proprio nulla, anche se passivamente ho seguito spesso questo forum e sarebbe stato l'ultimo luogo in cui sarei venuto a chiedere per un impresa simile.
Se ho deciso di scrivere qui, e perchè ero alla ricerca di professionalità e serietà; d'altronde, avendo letto la tua firma, non avrei continuato il dialogo con te se volevo ottenere qualcosa che vada oltre i principi fondamentali di questo sito.Grazie
aaa
05/04/10 21:57
GuglielmoS
Postato originariamente da GuglielmoS:

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.
quequero.org/store/program/…
Ciao GuglielmoS.
aaa
06/04/10 7:43
Postato originariamente da vincenzodicicco:

Ti ringrazio di nuovo ...


Prego ...