È possibile rendere il dispositivo non avviabile semplicemente rendendo i primi pochi byte del disco 0x00.
In genere (e questo vale sia per grub, che per grub2 e ntldr iirc) il primo byte del tuo disco sarà un'istruzione x86 jmp. Ciò si verifica anche prima dell'etichetta del disco, poiché quando si passa l'esecuzione al dispositivo per l'avvio, imposta semplicemente la CPU in modo che assorba le informazioni del dispositivo come codice. Se ha un codice non valido, attiva un interrupt e il BIOS gestisce l'eccezione e passa al successivo dispositivo di avvio.
Ad esempio, l'inizio del mio disco inizia con:
00000000 eb 63 90 d0 bc 00 7c fb 50 07 50 1f fc be 1b 7c |.c....|.P.P....||
La prima parte è eb 63
Jump per compensare 0x63 dall'IP corrente (quindi a 0x65).
00000060 00 00 00 00 ff fa 90 90 f6 c2 80 74 05 f6 c2 70 |...........t...p|
00000070 74 02 b2 80 ea 79 7c 00 00 31 c0 8e d8 8e d0 bc |t....y|..1......|
L'esecuzione continua da qui.
La fine del settore si presenta così:
000001b0 cd 10 ac 3c 00 75 f4 c3 ed db 96 d6 00 00 80 01 |...<.u..........|
000001c0 01 00 83 fe ff ff 3f 00 00 00 c1 07 a6 0e 00 fe |......?.........|
000001d0 ff ff 83 fe ff ff 00 60 00 11 00 00 38 29 00 fe |.......`....8)..|
000001e0 ff ff 82 fe ff ff 00 08 a6 0e 00 58 5a 02 00 00 |...........XZ...|
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
Se il disco è formattato come tabella delle partizioni MBR, devono essere presenti solo due elementi: la tabella delle partizioni che è in offset 0x1be
e la firma MBR, 55aa
che si verifica alla fine del settore in offset 0x1fe
. 0x1be
è 446 decimale.
Ciò che segue (ovviamente) renderà il dispositivo non avviabile. Ma questo è quello che vuoi. Se non vuoi rendere impossibile l'avvio del tuo dispositivo, non farlo, mmm-kay? Suppongo che il tuo dispositivo sia /dev/sdz
, semplicemente perché non molte persone hanno un /dev/sdz
, e questo riduce il rischio di alcuni principianti idioti che copiano ciecamente i comandi di incollaggio.
Innanzitutto, copia l'MBR in un file per un backup.
sudo dd if=/dev/sdz of=/some/where/safe/preferably/not/on/dev/sdz/backup.mbr bs=512 count=1
Quindi, crea una copia di quel file:
cp backup.mbr backup.mbr.test
Successivamente, dobbiamo creare un dispositivo di loopback (in modo che i contenuti non vengano troncati.) E applicare le modifiche sul nostro settore 0 falso come test:
sudo losetup /dev/loop7 backup.mbr.test
sudo dd if=/dev/zero of=/dev/loop7 bs=446 count=1
sudo losetup -d /dev/loop7
hexdump
il file e assicurarsi che l'intera tabella delle partizioni sia intatta:
sudo hexdump -C backup.mbr.test
Dovresti vedere qualcosa del tipo:
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 01 |................|
000001c0 01 00 83 fe ff ff 3f 00 00 00 c1 07 a6 0e 00 fe |......?.........|
000001d0 ff ff 83 fe ff ff 00 60 00 11 00 00 38 29 00 fe |.......`....8)..|
000001e0 ff ff 82 fe ff ff 00 08 a6 0e 00 58 5a 02 00 00 |...........XZ...|
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
00000200
Ora, 0x1be
è dove vedi 80
l'output in dumping, questo può anche essere 00
ed essere ancora valido. (E 'il flag "bootable" nella tabella delle partizioni, si può lasciare da solo, perché è del tutto ignorato dalla maggior parte dei BIOS moderni ...) Il byte a 0x1bf
se sarà quasi mai essere 0x00
(è più comunemente 0x01
, ma può prendere altri valori) si puoi confrontare questo con il tuo backup.mbr
per assicurarti che nulla di passato 0x1be
sia cambiato.
Una volta verificato che hai applicato correttamente la modifica, puoi copiare direttamente il file sulla prima parte del disco. Il motivo per cui si desidera eseguire il file piuttosto che di /dev/zero
nuovo è per sicurezza contro errori di battitura. Se ometti per sbaglio count=1
di avere un brutto momento, la copia di un file d'altro canto non passerà mai oltre l'EOF, mai. Quindi è più sicuro.
sudo dd if=backup.mbr.test of=/dev/sdz
Successivamente, hexdump
il disco deve assicurarsi che le modifiche abbiano preso come previsto.
hexdump -C /dev/sdz | head
Confronta fino a 0x200
contro backup.mbr.test
per assicurarti che sia quello che vuoi.
Infine, se qualcosa non funziona per qualsiasi motivo, puoi semplicemente copiare il backup dell'MBR nell'unità tramite:
sudo dd if=backup.mbr of=/dev/sdz
Spero che sia di aiuto.