0x00 diskinin ilk birkaç baytını yaparak cihazı önyüklenemez hale getirebilirsiniz.
Genellikle (ve bu hem grub, grub2 ve ntldr iirc için geçerlidir) sürücünüzün ilk baytı bir x86 jmp komutu olacaktır. Bu, disk etiketinden bile önce gerçekleşir, çünkü önyükleme yapmak için cihaza yürütmeyi geçirirken, CPU'yu cihaz bilgisini kod olarak emecek şekilde ayarlar. Geçersiz kodu varsa, bir kesmeyi tetikler ve BIOS istisnayı işler ve bir sonraki önyüklenebilir aygıta gider.
Örneğin, diskimin başlangıcı şununla başlar:
00000000 eb 63 90 d0 bc 00 7c fb 50 07 50 1f fc be 1b 7c |.c....|.P.P....||
İlk bölüm, eb 63
geçerli IP'den 0x63'e (yani 0x65'e) atlamaktır.
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......|
İcra buradan devam ediyor.
Sektörün sonu şöyle:
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.|
Diskiniz bir MBR bölümleme tablosu olarak biçimlendirilmişse, yalnızca iki şeyin bulunması gerekir: ofsette olan bölme tablosu ve ofsette sektörün sonundaki 0x1be
MBR imzası . ondalık 446.55aa
0x1fe
0x1be
Aşağıdakiler (elbette) cihazı önyüklenemez hale getirecektir. Ama istediğin bu. Cihazınızın önyükleme yapmasını istemiyorsanız, bunu yapmayın, mmm-kay? Cihazınızın, /dev/sdz
birçok insanın sahip olmadığı için olduğunu düşünüyorum /dev/sdz
ve bu, aptal bir aceminin kör bir şekilde yapıştırma komutlarını kopyalama riskini azalttığını düşünüyorum.
İlk olarak, MBR'yi yedekleme için bir dosyaya kopyalayın.
sudo dd if=/dev/sdz of=/some/where/safe/preferably/not/on/dev/sdz/backup.mbr bs=512 count=1
Ardından, bu dosyanın bir kopyasını oluşturun:
cp backup.mbr backup.mbr.test
Daha sonra, bir geri döngü cihazı oluşturmalıyız (böylece içerik kesilmez.) Ve sahte sektör 0'ımızdaki değişiklikleri bir test olarak uygulamalıyız:
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
ve tüm bölüm tablosunun sağlam olduğundan emin olun:
sudo hexdump -C backup.mbr.test
Şuna benzer bir şey görmelisiniz:
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
Şimdi, onaltılık çıktıda 0x1be
gördüğünüz 80
yer, bu da 00
geçerli olabilir ve hala geçerli olabilir. (Bu, bölüm tablosundaki "önyüklenebilir" bayrağı, yalnız bırakabilirsiniz, çünkü çoğu modern BIOS tarafından tamamen göz ardı edilir ...) Yine de bayt 0x1bf
neredeyse hiç olmayacak 0x00
(en yaygın olanı 0x01
ancak diğer değerleri alabilir) backup.mbr
geçmişin 0x1be
değiştirilmediğinden emin olmak için bunu kendinizle karşılaştırabilirsiniz .
Değişikliği doğru bir şekilde uyguladığınızdan memnun olduğunuzda, dosyayı doğrudan diskin ilk kısmına kopyalayabilirsiniz. Dosyayı bir kez daha yapmak istemenizin nedeni /dev/zero
yazım hatalarına karşı güvenlik içindir. Yanlışlıkla count=1
kötü bir zaman geçireceğinizi ihmal ederseniz, bir dosyayı kopyalamak EOF'u asla geçmeyecektir. Yani daha güvenli.
sudo dd if=backup.mbr.test of=/dev/sdz
Sonraki hexdump
Disk emin değişiklikler beklendiği aldı emin olmak için.
hexdump -C /dev/sdz | head
Kadar Karşılaştırma 0x200
karşı da backup.mbr.test
emin istediğini olması için.
Son olarak, herhangi bir nedenden ötürü herhangi bir şey bozulursa, MBR'nin yedeğini aşağıdaki yolla sürücüye kopyalayabilirsiniz:
sudo dd if=backup.mbr of=/dev/sdz
Bu yardımcı olur umarım.