บางคนสามารถแตกไฟล์ HEX ที่ฉันเขียนในไมโครคอนโทรลเลอร์ที่ฉันให้มาได้หรือไม่
หากเป็นไปได้ผู้อื่นจะมั่นใจได้อย่างไรว่ารหัสของพวกเขาปลอดภัยในระบบฝังตัว ในกรณีของไมโครคอนโทรลเลอร์ PIC และ AVR เราจะป้องกันเฟิร์มแวร์ของตนจากการทำซ้ำได้อย่างไร?
บางคนสามารถแตกไฟล์ HEX ที่ฉันเขียนในไมโครคอนโทรลเลอร์ที่ฉันให้มาได้หรือไม่
หากเป็นไปได้ผู้อื่นจะมั่นใจได้อย่างไรว่ารหัสของพวกเขาปลอดภัยในระบบฝังตัว ในกรณีของไมโครคอนโทรลเลอร์ PIC และ AVR เราจะป้องกันเฟิร์มแวร์ของตนจากการทำซ้ำได้อย่างไร?
คำตอบ:
ไมโครคอนโทรลเลอร์ส่วนใหญ่ในปัจจุบันมีวิธีการบางส่วนหรือเฉพาะผู้ผลิตเพื่อป้องกันรหัสเฟิร์มแวร์ที่ฝังอยู่ โดยทั่วไปแล้วจะทำโดยการล็อควงจรที่ปกติจะอนุญาตให้อ่านหน่วยความจำรหัสได้ (คุณจะต้องค้นหารายละเอียดเฉพาะส่วนในแผ่นข้อมูลหรือที่เว็บไซต์ผู้ผลิตในบันทึกการใช้งานที่เกี่ยวข้อง)
เมื่อล็อคแล้วจะไม่สามารถอ่านหน่วยความจำรหัสได้โดยใช้เทคนิคปกติ นี่เป็นระดับการป้องกันที่เหมาะสมเพื่อป้องกันไม่ให้แฮ็กเกอร์ส่วนใหญ่ดูรหัสเครื่องสำหรับแอปพลิเคชันฝังตัวของคุณ
อุปกรณ์ MCU จำนวนมากในปัจจุบันมีหน่วยความจำ FLASH ออนบอร์ดเพื่อทดสอบรหัสโปรแกรม โปรแกรมที่จัดเก็บและป้องกันไว้ก่อนหน้านี้ที่เก็บไว้ใน FLASH สามารถแทนที่ด้วยรหัสใหม่ได้ แต่ต้องใช้การลบชิปเต็มรูปแบบ FLASH เพื่อปลดล็อคกลไกการป้องกัน เมื่อลบส่วนจะทำงานเหมือนเดิมก่อนล็อคป้องกันดั้งเดิม หากมีการโหลดโปรแกรมใหม่โดยทั่วไปจะสามารถล็อคชิ้นส่วนใหม่ได้เพื่อป้องกันรหัสเครื่องที่เพิ่งโหลดใหม่
การสนทนาใด ๆ ของการป้องกันรหัสในไมโครคอนโทรลเลอร์จะไม่สมบูรณ์หากไม่มีการกล่าวถึงว่าโดยปกติจะไม่รับประกันว่ารูปแบบการป้องกันใด ๆ ที่เสนอโดยผู้ผลิตชิ้นส่วนนั้นเป็นสิ่งที่พิสูจน์ได้ ผู้ผลิตจะระบุว่าระบบการป้องกันไม่ได้พิสูจน์คนโง่ 100% หนึ่งในเหตุผลสำหรับเรื่องนี้คือมีอุตสาหกรรมตลาดมืดทั้งที่เกิดขึ้นที่ค่าธรรมเนียมแฮกเกอร์ขยันจะอ่านรหัสจากส่วนที่มีการป้องกันสำหรับทุกคนที่ต้องการจ่าย พวกเขาได้วางแผนรูปแบบต่าง ๆ ที่อนุญาตให้โค้ดอ่านจาก ROMs หรือแฟลชบนตัวควบคุมไมโครที่ได้รับการป้องกัน บางส่วนของรูปแบบเหล่านี้มีความฉลาดอย่างไม่น่าเชื่อ แต่ทำงานเพื่อความสำเร็จที่ดีขึ้นในครอบครัวบางส่วนกว่าคนอื่น ๆ ดังนั้นให้ตระหนักถึงความจริงข้อนี้แล้วคุณพยายามป้องกันโปรแกรมของคุณจากการสอดรู้สอดเห็น
เมื่อใครบางคนมีมือของพวกเขาในภาพไบนารีของรหัสเครื่องที่อ่านจากไมโครคอนโทรลเลอร์ไม่ว่าจะเป็นไมโครคอนโทรลเลอร์ที่ได้รับการป้องกันหรือไม่พวกเขาสามารถประมวลผลรหัสเครื่องผ่านเครื่องมือที่เรียกว่า disassembler สิ่งนี้จะเปลี่ยนข้อมูลไบนารี่กลับไปเป็นรหัสภาษาแอสเซมบลีที่สามารถศึกษาได้เพื่อลองเรียนรู้วิธีอัลกอริทึมของโปรแกรมของคุณทำงาน การถอดแยกชิ้นส่วนรหัสเครื่องอย่างแม่นยำเป็นงานที่ต้องใช้ความพยายามอย่างมาก ในที่สุดกระบวนการสามารถนำไปสู่รหัสแอสเซมเบลอร์เช่นที่ฉันอธิบาย หากโปรแกรมของคุณเขียนด้วยภาษาระดับสูงเช่น C, C ++ หรือ Basic รหัสแอสเซมบลีจะแสดงผลลัพธ์ที่คอมไพล์และเชื่อมโยงของโปรแกรมของคุณเท่านั้น โดยทั่วไปแล้วจะไม่สามารถทำการย้อนรหัสวิศวกรที่ถูกขโมยกลับไปเป็นภาษาระดับสูงได้
สิ่งนี้หมายความว่ามีประโยชน์ในการเขียนเฟิร์มแวร์แอพพลิเคชั่นของคุณเป็นภาษาระดับสูง มันเป็นอีกเลเยอร์ที่ทำให้โปรแกรมของคุณถูกออกแบบวิศวกรรมย้อนกลับได้ยากขึ้น ประโยชน์ที่ยิ่งใหญ่กว่านั้นคือการใช้ประโยชน์สูงสุดจากการปรับแต่งคอมไพเลอร์เพื่อคอมไพล์แอปพลิเคชั่นแบบฝังเนื่องจากตัวเพิ่มประสิทธิภาพประสิทธิภาพสูงสุดสามารถเปลี่ยนโปรแกรมให้กลายเป็นชามสปาเก็ตตี้ขนาดใหญ่ เพื่อถอดรหัสใน disassembler
นักพัฒนาสมองกลฝังตัวที่มีประสบการณ์ส่วนใหญ่จะบอกให้คุณก้าวไปข้างหน้าและใช้รูปแบบการป้องกันใด ๆ ที่มีให้บน MCU ในแอปพลิเคชันของคุณ .... แต่ไม่ต้องพึ่งพามันจนสุดถนนสำหรับผลิตภัณฑ์ของคุณ พวกเขาจะบอกคุณว่าวิธีที่ดีที่สุดที่จะอยู่ข้างหน้าของการแข่งขันคือการอัพเกรดผลิตภัณฑ์ของคุณอย่างต่อเนื่องเพื่อให้เวอร์ชันเก่าล้าสมัยและไม่น่าสนใจในเวลาที่แฮ็กเกอร์อาจโคลนรหัสของคุณ เปลี่ยนรหัสไปมาเพิ่มคุณสมบัติใหม่หมุนบอร์ด PC ของคุณเป็นครั้งคราวเพื่อสลับ I / O ทั้งหมดของคุณไปรอบ ๆ และสิ่งอื่น ๆ ที่คุณอาจนึกถึง วิธีนี้คุณสามารถชนะการแข่งขันได้ทุกครั้ง
ฉันคิดว่าคำตอบของ Michael นั้นเพียงพอสำหรับคำถามนี้ แต่ฉันเพิ่มลิงก์เหล่านี้ทั้งสอง: แฮ็ค PIC 18F1320และทุกสิ่งที่พวกเขาทำเราสามารถแตก! สิ่งเหล่านี้น่าสนใจมากสำหรับฉัน