"xor tür ebp" C kullanılan derleyici çıktı
Ben sadece VS2010 C parçacıkları birkaç derleme çalıştı ve IDA Pro dosyaları analiz etti. Fark ettiğim bir şey var bunların en başında aşağıdaki kısa zamanda __güvenlik_çağrı_cookie kontrol ettikten sonra () gibi bir şey var
xor eax, ebp
ve bir şey gibi
xor ecx, ebp
alt kısmında. Peki neden böyle oluyor? Derleyici optimizasyon kapatılmış.
CEVAP
Bu arabellek taşması koruma yöntemleri ve derleyici optimizasyonu ile ilgisi var. MSVC edecek /GS
belirtirseniz () yığın yolsuzluk yaygın bir durum tespit böylece dönüş yakınlarındaki yığın adresi üzerine Güvenlik kurabiye itin.
Yolsuzluk ya da çizgisinde: kötü kod kaynaklanabilir yığını
char buff[5];
strcpy (buff, "Man, this string is waaay too long!!");
ya da kötü niyetli kullanıcılar kötü kodlama uygulamalarından yararlanarak, kullanıcı girişi için scanf ("%s", myBuff)
kullanımı gibi. Bu şeyleri yapmak için bir program aklını çelmek gibi özenle hazırlanmış saldırıların muhtemelen bir şey olsun istemiyorum.
Kurabiye dönüş adresi yakın yerleştirerek, böcekler çok sayıda (ve vektörler saldırı), sadece bellek bozulmaları doğada sıralı olma eğiliminde olması nedeniyle önlenebilir. Diğer bir deyişle, Eğer üzerine dönüş adresi, muhtemelen çünkü sen başlattın yazılı bir tarafında çerez ve bozuk hafıza kadar iade adresi diğer tarafında cookie (bu cookie yazılacak gibi).
Yakalamak değiltümsen bu yana hata kodu gibi olabilir:
char buff[5];
buff[87] = 'x';
iade adresi bozuk olabilecekolmadançerez dokunaklı. Ama bozuk olan beklenenden daha uzun bir dize girerek dayanan tüm bu kötü niyetli olanları, dönüş adresi (çerez dahil) kadar yakalayabilirsiniz.
Muhtemelen kodda gördüğünüz sırası gibi bir şey
mov eax, dword ptr ds:___sec_cookie ; fixed value.
xor eax, ebp ; adjust based on base pointer.
mov [ebp SOMETHING], eax ; store adjusted value.
çerez özelleştirme, mevcut temel işaretçi bağlı olan.
Bu değişim aslında nedir bu yığın yığın her düzeyde (ve aynı zamanda bağlı olarak parametre sayısı ve boyutları gibi) ve muhtemelen bir girişim için daha güvenli koddan kötü niyetli, tarafından sağlanmasıdeğişkenimza sabit bir değer (aksi halde saldırgan karakterler girebilir . yerine yığın yazılır ^em>dahilkurabiye geçerli).
Ve sonunda sıra böyle bir şey çalışır:
mov ecx, [ebp SOMETHING] ; get the adjusted cookie.
xor ecx, ebp ; un-adjust it, since
; ((N xor X) xor X) == N.
call @__sec_check_cookie ; check the cookie.
Temelde sadece yukarıda açıklanan ters işlem. @__sec_check_cookie
dersen ecx
doğru tanımlama değerine ayarlanırsa dönecektir. Aksi takdirde doğruladı here gibi bir hata yükseltmek, olacaktır:
Eğer çerez değişmedi,
RET
Yönerge yürütür ve işlev aramayı sonlandırır.__security_check_cookie()
rutin basittir: Eğer çerez maç için başarısız olursa, rutinreport_failure()
çağırır.
report_failure()
işlevi__security_error_handler()
çağırır. Her iki fonksiyon Cseccook.c
dosyası çalışma zamanı (CRT) kaynak dosyaları tanımlanır.CRT destek, bu güvenlik kontrolleri çalışması için gereklidir. Güvenlik kontrolü bir hata oluştuğunda, program kontrolü burada kısaca özetlenen
__security_error_handler()
geçti
void __cdecl __security_error_handler(int code, void *data)
{
if (user_handler != NULL) {
__try {
user_handler(code, data);
} __except (EXCEPTION_EXECUTE_HANDLER) {}
} else {
//...prepare outmsg...
__crtMessageBoxA(
outmsg,
"Microsoft Visual C Runtime Library",
MB_OK|MB_ICONHAND|MB_SETFOREGROUND|MB_TASKMODAL);
}
_exit(3);
}
Varsayılan olarak, bir güvenlik denetimi başarısız bir uygulama bir iletişim olduğunu belirtir görüntüler "Arabellek taşması algılandı!". İletişim atlamamış, uygulama sona erer.
Nasıl kurtulmak &; [bir olay] asla kul...
Nasıl değişmez bir " baskı miyim;{}&qu...
Bu "yeterli" rasgele algorit...
"dosya" sonunda yeni satır; d...
&Quot;T genel Bir dizi varargs bir par...