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 ...