Shellcode: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Correzione ortografica
m rimosso wikilink a voce cancellata
Riga 71:
Molti shellcode vengono scritti senza utilizzare il bytes [[null]], perché sono progettati per essere inseriti nel processo bersaglio attraverso una stringa null-terminata. Quando una stringa null-terminata viene copiata, la copia includerà il primo [[carattere null]], ma i bytes successivi a questo non verranno processati. Quando lo shellcode che contiene il null viene inserito in questa maniera, verrà inserita solo una parte dello shellcode non rendendolo in grado di eseguire successivamente.
Per produrre uno shellcode libero da [[null]] partendo da uno che contiene dei bytes null, possono essere sostituite le istruzioni macchina che contengono gli zeri con istruzioni che producono lo stesso effetto ma che sono prive di bytes null. Per esempio su una architettura [[IA-32]] si potrebbe eseguire questa sostituzione:
B8 01000000 [[MOV (istruzione)|MOV]] EAX,1 // Imposta il registro EAX a 0x000000001
questa istruzione contiene zeri come parte del literal (1 viene espanso come 0x000000001) con queste istruzioni:
33C0 [[XOR (istruzione)|XOR]] EAX,EAX // Imposta il registro EAX a 0x000000000