Anda dapat membuat perangkat tidak dapat di-boot hanya dengan membuat beberapa byte pertama dari disk 0x00.
Biasanya (dan ini berlaku untuk grub, grub2 dan ntldr iirc) byte pertama dari drive Anda akan menjadi instruksi x86 jmp. Ini terjadi bahkan sebelum disklabel, karena ketika meneruskan eksekusi ke perangkat untuk bootstrap, ia hanya mengatur CPU untuk menyedot informasi perangkat sebagai kode. Jika memiliki kode yang tidak valid, hal itu memicu interupsi dan BIOS menangani pengecualian dan pergi ke perangkat yang dapat dibooting berikutnya.
Misalnya, awal disk saya dimulai dengan:
00000000 eb 63 90 d0 bc 00 7c fb 50 07 50 1f fc be 1b 7c |.c....|.P.P....||
Bagian pertama eb 63
adalah Jump untuk mengimbangi 0x63 dari IP saat ini (jadi ke 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......|
Eksekusi berlanjut dari sini.
Akhir dari sektor ini terlihat seperti ini:
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.|
Jika disk Anda diformat sebagai tabel partisi MBR maka hanya perlu dua hal untuk hadir, tabel partisi yang di offset 0x1be
dan tanda tangan MBR, 55aa
yang terjadi di bagian paling akhir sektor di offset 0x1fe
. 0x1be
adalah desimal 446.
Berikut ini akan (tentu saja) membuat perangkat unbootable. Tapi ini yang kamu inginkan. Jika Anda tidak ingin perangkat Anda tidak dapat di-boot maka jangan lakukan ini, mmm-kay? Saya berasumsi bahwa perangkat Anda adalah /dev/sdz
, hanya karena tidak banyak orang memilikinya /dev/sdz
, dan ini menurunkan risiko beberapa orang idiot pemula secara buta menyalin perintah menempel.
Pertama, salin MBR ke file untuk cadangan.
sudo dd if=/dev/sdz of=/some/where/safe/preferably/not/on/dev/sdz/backup.mbr bs=512 count=1
Selanjutnya, buat salinan file itu:
cp backup.mbr backup.mbr.test
Selanjutnya, kita harus membuat perangkat loopback (sehingga konten tidak terpotong.) Dan menerapkan perubahan pada sektor 0 palsu kami sebagai ujian:
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
file dan pastikan seluruh tabel partisi utuh:
sudo hexdump -C backup.mbr.test
Anda harus melihat sesuatu seperti:
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
Sekarang, 0x1be
adalah di mana Anda melihat 80
pada output hexdumped, ini juga bisa 00
dan masih berlaku. (Ini bendera "bootable" di tabel partisi, Anda dapat membiarkannya sendiri, karena sepenuhnya diabaikan oleh sebagian besar BIOS modern ...) Byte pada 0x1bf
hampir tidak akan pernah0x00
(itu paling umum 0x01
tetapi dapat mengambil nilai lain) Anda dapat membandingkan ini dengan Anda backup.mbr
untuk memastikan bahwa tidak ada masa lalu 0x1be
yang berubah.
Setelah Anda puas bahwa Anda menerapkan perubahan dengan benar maka Anda dapat langsung menyalin file ke bagian pertama disk. Alasan mengapa Anda ingin melakukan file daripada /dev/zero
lagi adalah untuk keamanan terhadap kesalahan ketik. Jika Anda secara tidak sengaja menghilangkan count=1
waktu yang buruk, menyalin file di sisi lain tidak akan pernah melewati EOF, selamanya. Jadi lebih aman.
sudo dd if=backup.mbr.test of=/dev/sdz
Selanjutnya hexdump
disk Anda untuk memastikan bahwa perubahan itu terjadi seperti yang diharapkan.
hexdump -C /dev/sdz | head
Bandingkan hingga 0x200
menentang backup.mbr.test
untuk memastikan itu yang Anda inginkan.
Akhirnya, jika ada yang kacau karena alasan apa pun Anda bisa menyalin cadangan MBR kembali ke drive melalui:
sudo dd if=backup.mbr of=/dev/sdz
Semoga ini membantu.