Üniversitelerde bir kurs yapıyorum, laboratuarlardan biri bize verdikleri kodda tampon taşması istismarları yapmak. Bu, farklı bir işleve geri dönmek için bir yığında bir işlevin dönüş adresini değiştirmek, basitçe program kayıt / bellek durumunu değiştiren ancak daha sonra çağırdığınız işleve geri dönen kod kadar Çağrdığınız işlev tamamen istismara açık değildir.
Bunun üzerine biraz araştırma yaptım ve bu türden istismarlar Wii'de homebrew çalıştırmak ve iOS 4.3.1 için ayrılmamış jailbreak gibi şeylerde bile hemen hemen her yerde kullanılıyor.
Sorum şu: bu sorunu neden düzeltmek bu kadar zor? Bunun yüzlerce şeyi kırmak için kullanılan büyük bir istismar olduğu açıktır, ancak izin verilen uzunluktaki herhangi bir girişi keserek ve aldığınız tüm girdileri basitleştirerek düzeltmek oldukça kolay görünüyor.
EDIT: Cevaplarını almak istediğim bir başka bakış açısı - neden C yaratıcıları kütüphaneleri yeniden uygulayarak bu sorunları çözmüyorlar?