คุณสามารถทำให้อุปกรณ์ไม่สามารถบู๊ตได้โดยการทำให้ดิสก์มีขนาดไม่กี่ไบต์แรก 0x00
โดยทั่วไป (และสิ่งนี้จะเป็นจริงสำหรับทั้ง grub, grub2 และ ntldr iirc) ไบต์แรกของไดรฟ์ของคุณจะเป็นคำสั่ง x86 jmp สิ่งนี้เกิดขึ้นก่อนแม้กระทั่งดิสเก็ตแถบเพราะเมื่อผ่านการประมวลผลไปยังอุปกรณ์เพื่อบู๊ตมันก็แค่ตั้งค่า CPU ให้ดูดข้อมูลอุปกรณ์เป็นรหัส ถ้ามันมีรหัสที่ไม่ถูกต้องมันจะเรียกการขัดจังหวะและ BIOS จัดการข้อยกเว้นและไปที่อุปกรณ์ที่สามารถบูตได้ต่อไป
ตัวอย่างเช่นการเริ่มต้นของดิสก์ของฉันเริ่มต้นด้วย:
00000000 eb 63 90 d0 bc 00 7c fb 50 07 50 1f fc be 1b 7c |.c....|.P.P....||
ส่วนแรกeb 63
คือกระโดดเพื่อชดเชย 0x63 จาก IP ปัจจุบัน (ดังนั้นถึง 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......|
การดำเนินการต่อจากที่นี่
จุดสิ้นสุดของภาคมีลักษณะเช่นนี้:
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.|
ถ้าฮาร์ดดิสก์ของคุณมีรูปแบบเป็นตารางพาร์ทิชัน MBR แล้วมันต้องการเพียงสองสิ่งที่จะนำเสนอตารางพาร์ทิชันซึ่งเป็นที่ออฟเซต0x1be
และลายเซ็น MBR ที่ซึ่งเกิดขึ้นในท้ายสุดของภาคที่ออฟเซต 55aa
คือทศนิยม 4460x1fe
0x1be
เจตจำนงต่อไปนี้จะทำให้อุปกรณ์ไม่สามารถบูตได้ แต่นี่คือสิ่งที่คุณต้องการ หากคุณไม่ต้องการให้อุปกรณ์ของคุณไม่สามารถบูตได้แล้วอย่าทำเช่นนี้เลย mmm-kay? ฉันสมมติว่าอุปกรณ์ของคุณเป็น/dev/sdz
เพียงเพราะมีไม่กี่คน/dev/sdz
และสิ่งนี้ช่วยลดความเสี่ยงของคนที่เพิ่งเริ่มทำคำสั่งการคัดลอกวาง
ก่อนอื่นให้คัดลอก MBR ไปยังไฟล์เพื่อสำรองข้อมูล
sudo dd if=/dev/sdz of=/some/where/safe/preferably/not/on/dev/sdz/backup.mbr bs=512 count=1
ถัดไปทำสำเนาไฟล์นั้น:
cp backup.mbr backup.mbr.test
ต่อไปเราต้องสร้างอุปกรณ์ลูปแบ็ค (เพื่อไม่ให้เนื้อหาถูกตัดทอน) และใช้การเปลี่ยนแปลงในภาคปลอมของเรา 0 เป็นแบบทดสอบ:
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
ไฟล์และตรวจสอบให้แน่ใจว่าตารางพาร์ติชันทั้งหมดไม่เปลี่ยนแปลง:
sudo hexdump -C backup.mbr.test
คุณควรเห็นบางสิ่งเช่น:
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
ตอนนี้0x1be
เป็นที่ที่คุณเห็น80
บนเอาต์พุต hexdumped สิ่งนี้สามารถเป็นได้00
และยังคงใช้ได้ (มันเป็น "ที่สามารถบูตธง" ในตารางพาร์ทิชันคุณสามารถปล่อยให้มันคนเดียวเพราะมันละเว้นสมบูรณ์โดย BIOSes ที่ทันสมัยที่สุด ... ) ไบต์ที่0x1bf
แม้ว่าจะเกือบไม่เคยเป็น0x00
(มันมากที่สุด0x01
แต่ก็สามารถใช้ค่าอื่น ๆ ) คุณ สามารถเปรียบเทียบสิ่งนี้กับคุณbackup.mbr
เพื่อให้แน่ใจว่าไม่มีการ0x1be
เปลี่ยนแปลงในอดีต
เมื่อคุณพอใจกับการใช้การเปลี่ยนแปลงอย่างถูกต้องแล้วคุณสามารถคัดลอกไฟล์ไปยังส่วนแรกของดิสก์ได้โดยตรง เหตุผลที่คุณต้องการทำไฟล์มากกว่า/dev/zero
เพื่อความปลอดภัยจากการพิมพ์ผิด หากคุณไม่ได้ตั้งใจcount=1
คุณจะมีเวลาที่ไม่ดีการคัดลอกไฟล์ในทางกลับกันจะไม่มีทางผ่าน EOF ได้เลย ดังนั้นจึงปลอดภัยกว่า
sudo dd if=backup.mbr.test of=/dev/sdz
ติดhexdump
แผ่นดิสก์ของคุณเพื่อให้แน่ใจว่าการเปลี่ยนแปลงจะเกิดขึ้นตามที่คาดไว้
hexdump -C /dev/sdz | head
เปรียบเทียบ0x200
กับbackup.mbr.test
เพื่อให้แน่ใจว่าเป็นสิ่งที่คุณต้องการ
สุดท้ายหากมีสิ่งใดเกิดขึ้นคุณสามารถคัดลอกข้อมูลสำรองของ MBR กลับไปยังไดรฟ์ผ่านทาง:
sudo dd if=backup.mbr of=/dev/sdz
หวังว่านี่จะช่วยได้