Tôi đang tham gia một khóa học ở trường đại học, nơi một trong những phòng thí nghiệm là thực hiện khai thác tràn bộ đệm trên mã mà họ cung cấp cho chúng tôi. Điều này bao gồm các khai thác đơn giản như thay đổi địa chỉ trả về cho một hàm trên ngăn xếp để trở về một chức năng khác, tất cả các cách để mã thay đổi trạng thái đăng ký / bộ nhớ chương trình nhưng sau đó quay lại hàm mà bạn đã gọi, nghĩa là chức năng bạn gọi là hoàn toàn không biết gì về khai thác.
Tôi đã thực hiện một số nghiên cứu về vấn đề này và các loại khai thác này được sử dụng khá nhiều ở mọi nơi ngay cả bây giờ, trong những việc như chạy homebrew trên Wii và jailbreak không giới hạn cho iOS 4.3.1
Câu hỏi của tôi là tại sao vấn đề này rất khó khắc phục? Rõ ràng đây là một khai thác chính được sử dụng để hack hàng trăm thứ, nhưng có vẻ như nó sẽ khá dễ dàng để khắc phục bằng cách cắt ngắn mọi đầu vào vượt quá độ dài cho phép và chỉ cần vệ sinh tất cả đầu vào mà bạn lấy.
EDIT: Một viễn cảnh khác mà tôi muốn có câu trả lời để xem xét - tại sao những người tạo ra C không khắc phục những vấn đề này bằng cách thực hiện lại các thư viện?