Win32 API'de uzun süredir bilinen bir zayıflık nedeniyle çok büyük bir etkiye sahiptir.
Programlar CreateProcess()
sistem çağrısı yoluyla Win32'de üretilir . Çeşitli şekillerde kullanılabilir. Unix, Linux veya OS / 2 arka planlarından gelen insanlar genellikle programın (görüntü dosyası) ortaya çıkması ve komut kuyruğunun yeni sürece geçmesi için iki ayrı argüman almayı düşünürler çünkü dosya adları ve argümanlar vektörler / komut kuyrukları bu işletim sistemlerinin API'lerinde iki ayrı şeydir. Ancak sistem çağrısı, program adı ve argümanların büyük bir dizede bir araya getirildiği alternatif bir biçimde çağrılabilir. CreateProcess()
program dosya adını komut kuyruğundan ayırmaya çalışacaktır.
Sorun, bunu soldaki bölüm bir dosya veya bir dizinle eşleşene kadar her ardışık boşluk karakterinde dizgiyi aşamalı olarak bölerek yapmasıdır. Birçok Win32 programı C:\Program Files\Contoso\TakeOver.exe StackExchange.com
, sistem çağrısına benzer dizeleri iletmeye çalışır . Bu, tehlikeli bir kişinin geldiği ve sizin gibi bir dosya oluşturduğu noktaya kadar doğru programı - C:\Program Files\Contoso\TakeOver.exe
- doğru komut kuyruğuyla - StackExchange.com
- çalıştıracaktır C:\Program
.
Bu noktada, sistem çağrısı, program görüntü dosyasını C:\Program
komut kuyruğuyla çalıştırmayı dener Files\Contoso\TakeOver.exe StackExchange.com
. Cennet C:\Program
aslında çalıştırılabilir bir program görüntüsü ise size yardımcı olur .
Bu genel bir zayıflıktır ve diğer programları oluşturmak için One Big String kullanan herhangi bir programla birlikte boşluk içeren herhangi bir program dosya adı için geçerlidir. Ancak bunun en sık karşılaştığı durum, altında yaşayan tüm C:\Program Files\
programlar ve One Big String yaklaşımını kullanan çok sayıda Win32 programıdır.
Win32 API'sini değiştirmek için çok geç. On yıl önce çok geçti. Microsoft, iki kişi yerine büyük bir dize geçen diğer insanlar tarafından yazılan tüm programları değiştiremez CreateProcess()
. Bu nedenle Microsoft, Windows'a kullanıcı oturum açma işleminde, C:\Program
gördüğünüz uyarının varlığını kontrol eder ve görüntüler.
Gördüğünüz gibi, Microsoft'un Win32 doco'sunda geliştiricilere birkaç yıldır orada olan One Big String yaklaşımını kullanarak program yazmamalarını söyleyen büyük bir "Güvenlik" uyarısı var.
daha fazla okuma