SOCKET PROGRAMLAMAYA GİRİŞ
Slms,
Ben Turkish Scene’nin yeni
yazarlarındanım. Önce bu yazının ve süregelecek yazılarımın amacını anlatayım:
Bu sayıyla birlikte 6 aylık bir yazı dizisine başlıyacağız. Bu yazı dizisinin
amacı “C” programlama dili bilen (orta derecede de olsa) kişilere winsockun nasıl
kullanılabileceğini göstermek olacak. Yazı dizisi sonunda dizimizi baştan itibaren
izleyen herkesin yeni exploitlere (sistem açıkları)
göre Nuke yazabilecek seviyeye gelmiş olacağını tahmin ediyorum.
Yazı dizimizin detaylı içeriği şu olacak:
Ay | Konu | Yazılacak programlar |
Mart ( Bu ay :) | Winsock ve BC++ Builder üzerine | Winsock hakkında bilgi veren prg. |
Nisan | Soketler ve İstemci yazımı | Portscanner ve OOB-Nuke |
Mayıs | IP,TCP Headerları ve IP-Spoofed bilgi yollama | !Spoofed! OOB-Nuke |
Haziran | Sistem Açıkları | Land atack |
Temmuz | Sistem Açıkları | Suffer atack |
Ağustos | Sistem Açıkları ve Son söz | Smurf atack |
Not: Umarım “Smurf,Suffer,Land,OOB Nuke” ne demektir biliyorsunuzdur. Bilmiyenler için bunlar piyasada bulunan windozcu IRC manyaklarının korkulu rüyaları olan Nukeler!
İlk yazımız daha çok bir hazırlanma yazısı olacak. Lütfen yazının tamamını dikkatle okuyun. Burada anlattıklarım BC++ Builder ( ki yazı dizimizi takip edebilmek için buna, en azından sürüm 1.0 ihitiyaç duyacaksınız ) ve winsock üzerine genel söylemler olacak. Eğer Nuke yazma konusunda ilerlemek istiyorsanız temellerinizi iyi atmanızı öneririm.
Şimdi neden BC++ Builder diye soranlara şöyle bir cevabın olacak:
Internet bir bağlantıyı en kısa ve öz ve temel olarak (hani madde-atomun ilişkisi gibi ;) tanımlamak için Kaynak IP,Kaynak Port,Hedef IP,Hedef Port olarak tanımlayabilirsiniz! Sanırım bu tanımlamada herkes kaynak IP ve hedef IP’nin ne olduğunu biliyor. Peki Kaynak ve hedef port nedir??? Bunu da biliyorsanız işimiz kolay. Bilmeyenler içinse kısa açıklama: Tcp/Ip protokolünde (internet protokol ailesi) bir bilgisayarla diğer bilgisayarın veri alışverişini düzenlemek için veri yolu kanallara (65536 tane-2 bayt ) ayrılmıştır. Bunlara port denir. Sakın yanlış anlaşılmasın bu portlar fiziksel değildir! Sadece bağlantıların sınıflandırılması için kullanılan sayılardır! Bu tanımlamalar biraz kaba olsada sanırım açıklayıcı oldu. Olayı daha rahat anlamanız için bir iki örnek vereyim.
Örneğin “Bo” programıyla birinin bilgisayarına hop diye girmezsiniz. Bilgisayarına gireceğiniz hedef kişide “Boserver” programının çalışması gerekir. “Boserver” programı çalışınca configüre edildiği (normalde 31337 ) portu açar. Ve o porttan gelecek bilgileri dinlemeye başlar!!! “Bogui” ile bu portu açık bilgisayarları ararsınız. Bu yüzden “bugui” kullanıp hedef bilgisayar taraması yaptığınızda bazen hiç bilgisayar bulamamanızın nedeni aradığınız IP aralığında nete bağlı hiçbir bilgisayar olmaması değil bu bilgisayarlarda “boserver”ın çalışmamasıdır.
Bir diğer örnek ise bilgisayarınıza bir web server kurduğunuzda, o web server 80. Portu açar ve browserlardan gelecek çağrılara browserın anlayacağı şekilde yanıt verir ( zor bir olay değil ;). Umarım port konusu anlaşılmıştır.
Şimdi de açık olan portlarımızı görelim: bunun için Msdos penceri açıp “netstat –a” yazmanız yeterli. LISTENING yazanlar dışarıdan sizin bilgisayarınıza bağlantı yapılabilecek portlar.
Örnek çıktı:
TCP | Wargalleon:1027 | WARGALLEON:0 | LISTENING |
TCP | Wargalleon:ftp | WARGALLEON:0 | LISTENING |
TCP | Wargalleon:telnet | WARGALLEON:0 | LISTENING |
TCP | Wargalleon:808 | WARGALLEON:0 | LISTENING |
Bu çıktıya göre ftp(21),telnet(23),808,1027 portlarınız açık (wingate yüklemek zorunda kaldım! ;). Sanırım bukadar teorik bilgi yeter. Gelelim BC++ Builder’a.
BC++ Builder gerçekten
çok güçlü ve bir o kadar da kolay kullanımlı bir geliştirme aracı. Yazımın
uzamaması için BC++ Builder’ın arabiriminin anlatılması kısmını olabildiğince
hızlı geçeceğim. BC++ Builder açılınca yeni projeye açın (File|New Application).
Karşımızdaki boş formun üzerine "Standart" birleşenlerden ()5 adet label (
) nesnesi ve karşılarına 5
adet Edit (
)
nesnesi koyup aşşağıda görüldüğü şekilde “Caption” ve “Text”
ayarlarını yapın. Bunu yapmak için ilgili iconlara basıp forma tıklamanız (ıyk)
gereklidir. Sonrada iki tane button (
) alıp bunları forma yerleştirin. Bir tanesinin captionı “Bilgi
Al” diğeri ise “Çıkış” veya benzeri bir şeyler olsun. Bir nesnenin
caption,text vs özelliklerini değiştirebilmek yapmanız gereken şey nesneyi
şeçtikten sonra F11 tuşuna basıp “object inspector” penceresini açmak ve bu
pencerede istenilen özelliği bulup değiştirmektir. Normalde zaten bu pencere
açıktır. Bazı özelliklerin her nesnede olduğunu bazılarının ise olmadığını
göreceksiniz. Bunun sebebi her nesnenin kendisine ait özeliklerinin olmasıdır.
Örneğin bir button nesnesinin “text” özelliği yoktur ama bunun yerine
“caption” özelliği vardır.Son olarakta "Win95" bileşenlerinden bir
adet
status bar
alalım. Bunu formun en altına (otomatik olarak) yerleştirelim.
Şimdi gelelelim asıl yapmak istediğimize, bu ay winsocku hazırlayacağız (sanırım ingilizcesi "initialization" dı ). Eğer dos programcıları varsa BGIyı hatırlarlar. Bu da onun gibi, winsock ile ilgili soket açma, bağlanma gibi fonksiyonları kullanmadan önce winsocku hazır hale getirmeliyiz. Bunu yaparken birde winsock bilgilerini alacağız. Buda giriş dersimizin örnek programını oluşturacak. Yaptığımız "Bilgi Al" buttonuna çift tıklayıp (ıyk) yeni bir pencere açılmasını sağlayalım. Bu pencere buttona bastığımızda çalışacak fonksiyonun içidir. Tata!!! Hemen şunları yazalım:
WSADATA wsaInfo; // Winsock bilgileri burda tutulacak.Önemli bir şey yapmamız gerekiyor. Kullandığımız kütüphaneyi C++ derleyicisine söylemek. Bunu için bütün bu satırları yazdığımız pencerede bir iki kez "pageup" tuşuna basıp
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop
satırlarını (ilk satırlar) bulmak. Buraya
#include <winsock.h>
satırını ekleyeceğiz. Böylece winsock başlık dosyasında tanımlalan komutları kullandığımızı belirtmiş oluyoruz. Son olarak form penceresine geri dönelim ve "Çıkış" buttonuna çift tıklayıp karşımıza çıkan fonksiyon penceresine
Close();
yazalım. Böylece programımız bitti. Programı istediğiniz bir dizine istediğiniz isimle kaydedip (File|Save) çalıştırabilirsiniz (F9). Unutmayın C++ mükemmel bir dildir ve dikkat ister! Yazarken küçük büyük harf ayrımına dikkat edin. "//" işaretli kısımlar (sizinde anlıyacağınız gibi) açıklama kısımlarıdır yazmak zorunda değilsiniz.Ders sonu hatırlatmalar:
1) Bu derste net programcılığı ile
ilgili temel bilgiler öğrendiniz (umuyorum). Winsock programlamaya giriş yaptık.
Winsock hakkında bilgi veren program yazdık.
2) C++ ve dersle ilgili sormak istediğiniz herşey için misoskian@bigfoot.com adresine email
atabilirsiniz. Eğer gerçekten yoğun ilgi gelirse BC++ Builder'da programla derslerine
başlayabiliriz.
Kaynak Proje : wsbilgi.zip
Örnek program : wsbilgi.exe
Hazırlayan;
Misoskian : misoskian@bigfoot.com