ฉันกำลังทำหลักสูตรอยู่ในวิทยาลัยที่หนึ่งในห้องปฏิบัติการคือการใช้ประโยชน์จากบัฟเฟอร์โอเวอร์โฟลว์บนโค้ดที่พวกเขาให้เรา ช่วงนี้จากการหาประโยชน์ง่าย ๆ เช่นการเปลี่ยนที่อยู่ผู้ส่งคืนสำหรับฟังก์ชั่นในสแต็คเพื่อกลับไปที่ฟังก์ชั่นที่แตกต่างกันไปจนถึงรหัสที่เปลี่ยนสถานะการลงทะเบียน / หน่วยความจำของโปรแกรม ฟังก์ชั่นที่คุณเรียกว่าหลงลืมไปอย่างสิ้นเชิง
ฉันได้ทำการวิจัยเกี่ยวกับเรื่องนี้และการใช้ประโยชน์จากการใช้ประโยชน์เหล่านี้ยังมีอยู่ทุกหนทุกแห่งแม้กระทั่งตอนนี้ในสิ่งต่าง ๆ เช่นการใช้ homebrew บน Wiiและการเจลเบรคที่ไม่มีการผูกมัดสำหรับ iOS 4.3.1
คำถามของฉันคือเหตุใดปัญหานี้จึงแก้ไขได้ยาก เห็นได้ชัดว่านี่เป็นช่องโหว่ที่สำคัญที่ใช้ในการแฮ็คหลายร้อยสิ่ง แต่ดูเหมือนว่ามันจะง่ายต่อการแก้ไขโดยการตัดทอนข้อมูลใด ๆ ที่ผ่านมาตามความยาวที่อนุญาตและกำจัดข้อมูลทั้งหมดที่คุณทำ
แก้ไข: มุมมองอื่นที่ฉันต้องการคำตอบที่จะต้องพิจารณา - ทำไมผู้สร้างของ C ไม่สามารถแก้ไขปัญหาเหล่านี้ได้โดยการปรับใช้ห้องสมุดใหม่?