iwystic
Veteran
10 Rozet
Seviye 10
İlk Paylaşım
Sharer I
Sharer II
Sharer III
İlk Mesaj
İlk Beğeni
İlk Çözüm
Yardımsever
Mentor
Usta Mentor
Hızlı Yardım
Profilini Tamamla
Doğrulanmış Üye

Hepinize tekrardan merhabalar RC üyeleri,
Bugün, “Sıfırdan Backdoor Trojan Yapımı” serimizin üçüncü bölümünü anlatacağım. Bu bölüm, serinin önceki iki bölümüne göre daha kolay diyebilirim. Zaten bol bol kullanılan kütüphaneleri kullanıp bilindik işlemlere yer vereceğiz.
İçerik:
- Dizin Değiştirmek
- Cihazdan Dosya Almak ve Göndermek
- İnternetten Dosya İndirmek
- Trojan ile Programları Çalıştırmak ve Bug’ları Düzeltmek
Dizin Değiştirmek
Virüsümüzü nereye atıp çalıştırırsak, yetkilerimiz sadece o konum içinde geçerli olur. Ben virüsü masaüstümde başlattığım için masaüstü dışına çıkamam.
"cd" komutu ve whoami komutları ile göstereceğim.

["Games" isimli klasöre girmeye çalışacağım.]

Yukarıda da görebildiğimiz üzere "Games" klasörümüze giremedik. Şimdi ilk yapacağımız iş, reverse shell’imize bu özelliği eklemek.
Bu yeni özelliğimizi kabuk fonksiyonu içine ekleyeceğiz. Normalde iki tane seçeneğimiz vardı; 0 ile çıkış yapmak ve normal bir string komut yazarak karşı makinede çalıştırmak. Şimdi onların arasına else if kullanarak yeni bir komut eklememiz lazım.

Pekâlâ, şimdi "cd" komutunun kullanımına bi' göz atmamız gerek. cd komutumuzu çalıştırırken, cd x\y\z şeklinde komutumuzu giriyoruz.
Yani asıl gitmek istediğimiz yol, “cd“ kısmından sonra. Bu yüzden komutumuzun sadece başındaki cd kısmını kod olarak kabul etmemiz gerek, devamını değil. Yoksa sadece tek bir dizine gitme hakkımız olur. Bunun için de sadece cd kısmını yazınca elif kısmını çalıştıracak kodu giriyorum.

Aynı zamanda, programımızın çökmemesi için girilen kodun 2 karakterden uzun olması gerek.
Bunun için gereken şartı da "and" bloğu ile ekliyorum.

"cd" komudumuz ile istediğimiz dizine gitmemizi sağlayacak kod dizinini ekliyorum.
Bunun için OS kütüphanesi lazım; Bu kütüphaneyi önceki derste dahil etmiştik.

Kodumuzun 3. karakterinden sonraki kısmı, yani belirttiğimiz dizini koda verdik;
ancak istediğimiz dizin yoksa veya yanlış yazdıysak programımız çökmesin diye bu kodları try-except blokları içine alıyorum.

Böylelikle, olası bir durumda while döngümüz devam edecek.
Bu kodları server’ımıza da eklememiz gerekiyor. O yüzden gerekli kodları server’a ekleyelim.

Bu kısımdaki işimiz bitti. Virüsümüzü executable yapalım ve dizin değiştirme işlemimizi deneyelim.

"mkdir" ile masaüstümüze bir yeni klasör oluşturduk. Ardından "cd" komutu ile klasörün içine girdik.

Klasörün içinde doliatius.txt isimli bir metin belgesi oluşturduk, içine de "Selamlar RC" metnini yazdık. Kontrol edelim.

Gördüğünüz gibi çalışıyor. Normalde “dir” komutu ile de kontrol edebilirdik; ama ne yazık ki hiçbir şekilde çalışmıyor. Uzun uzun araştırdım, denedim;
ama şu anlık bu komut eksiksiz ve düzgün çalışmıyor.
Cihazdan Dosya Almak Ve Göndermek
Kurbanımızın cihazından kendi cihazımıza veri aktarımı olmazsa olmazlardan birisidir.
Aynı şekilde kendi cihazımızdan karşıya da dosya gönderimi yapabilmek lazım. Bu kısımda bu işlemlere değineceğim.
İlk olarak dosya aktarım işlemleri sırasında encode/decode işlemleri kullanacağımızdan dolayı, base64 kütüphanemizi projemize dahil edelim.
Her iki Python dosyamızda da bu kütüphaneyi kullanacağız.

İndirme komutumuz için gerekli olan "else if" bloğunu ayarlayalım.

Burada yaptığımız şey; "cd" komutunda yaptığımızın aynısıdır. Dosya aktarım işlemleri için gereken kodlara başlayalım.

Buradaki “wb” kısmı (write bytes), yani "byte’ları yaz" anlamındadır. Aynı şekilde dosyayı gönderirken de “rd” (read bytes), yani "byteleri oku." anlamına gelen parametreyi kullanacağız.
Şimdi ise programımızın çökmemesi için base64 ile şifreleme kullanacağız.

Base64 kütüphanemizde "decode" işlemi böyle yapılıyor. "Peki, daha ortada encode edilmiş bir şey yoksa niye decode ediyoruz?"
Zaten trojan.py programımıza geçip ona da indir kısmını ekleyip, orada dosyayı encode’layacağız.
Aynı şekilde buraya da base64 kütüphanemizi ekleyelim.

Server üzerinde yaptığımız işlemleri buraya düzenleyerek yazıyoruz.

Dosya karşılama işlemi için gereken kodlar tamam; şimdi sıra test etmeye geldi.
Aynı şekilde, Windows makinemiz üzerinde executable yapıp deneyelim.

Masaüstümüzde rc.png isimli bir resim var. Bunu kendi virüsümüz üzerinden Kali Linux makinemize indireceğiz.

Görüldüğü üzere şu an bu resim bizim server’ımızın yer aldığı konumda. İşlem biraz yavaş gerçekleşti, tahminimce python dili ve internet şebekem ile alakalı.
Her neyse, dosya aldık. Şimdi karşıya dosya gönderme işlemini deneyelim. Bunun için aynı yaptığımız işlemin tersini de yapabiliriz; ancak ben onun yerine farklı bir kod dizisi kullanacağım. Amacım işlevsellikten ziyade zaten bu yazılımların nasıl çalıştığı.
Pekâlâ, şimdi servera kodlarımızı girelim.

"elif" bloğunu oluşturduğumuza göre, altını doldurma vakti.

Kısaca açıklamak gerekirse, önceki işlemin neredeyse aynısı. Sadece json kütüphanesini kullanmak yerine biraz daha döngüye başvurup dosyayı açtık, okuduk ve gönderdik. Bu arada encode işlemine gerek yok.
Gerekli kodları şimdi trojan.py programımız için uygulayalım.

Burada da server üzerinden gönderilen datayı önce bir dosya açtık, ardından da bu dosyaya yazdırdık. Bu kısımda sadece birkaç tane ufak format hatası bazen olabiliyor. Onun haricinde, tek seferlik durumda eksiksiz çalışıyor.
Fark etmiş olabilirsiniz; 7171 portu yerine 7575 portunu kullanıyorum. Epey deneme - yanılma ve bug onarımı hakkında çalıştığım için birkaç port hatası yaşadım.
Evet, bu kısımdaki işimiz şimdilik bitti. Tabi virüsümüzü geliştirmek adına son bölümde buraya tekrardan değineceğiz. Şimdi bir sonraki bölüme geçelim.
İnternetten Dosya İndirmek
Bu bölümde benim için daha güzel ve kullanışlı olan bir kısma değineceğiz; İnternetten dosya indirmek. Bu işlemimiz için python’da zaten bulunmayıp sonradan indirilmesi gereken requests kütüphanesini kullanacağız. İnternetten URL kullanarak resim, video veya müzik indirmek zaten python kullanıcılarının ilk öğrendiği şeylerden birisi olabilir, daha doğrusu requests kütüphanesinin kullanımını çoğu kişi biliyordur.
Bu özelliği eklemek için öncelikle requests kütüphanesini indirmek gerekli.
Kurulumu ben daha önceden yapmıştım; ancak sizlere göstermek için yeniden yaptım.
Requests kütüphanemizi trojan.py’ye ekleyeceğiz.

İndirme işlemi için dosyamıza bir fonksiyon ekleyelim.

Fonksiyon içinde gerçekleşen işlemde verilen URL’deki dosyayı indirip bilgisayara kaydedilsin.

"İndirilen dosyamızın ismi" kısmına geçtik. Burada istediğiniz şekilde adlandırma yapabilirsiniz; ancak dosyanın URL sonundaki isim ile kaydedilmesini istiyorum.

Burada URL adresimizin içerdiği her “/” karakterine göre böldük. En son kısmını da dosya ismi olarak aldık.
Az önceki kısımlarda da yaptığımız gibi yazdırma kısmını ekleyelim.

Alınan kodlar bölümüne de indirme komutumuzu "webindir" ismi ile ekleyelim ki bir önceki indir ile karışmasın.
Aynı şekilde eğer dosya indirildiyse bize tekrardan bir bildirim göndersin ki indirildiğini anlayalım.

Trojan.py kısmında işimiz tamam, şimdi sırada server’ımız üzerinde "else if" bloğu kullanarak URL’den indirme işlemini gerçekleştirmek var.
Önceki eklemelerde de olduğu gibi buraya da aynı şekilde bir blok ekliyoruz.

Pekala, programımızı çalıştırmadan önce indirmek için bir dosya bulalım. RC’de dolanırken bu resme denk geldim:
https://realitycheats.com/threads/counter-strike-global-offensive-rc-legit-hack-v1-0-4.328/#lg=attachment5518&slide=0
Bu resmi indirmeye çalışacağız.

Görebildiğiniz gibi, internetten bu resmi indirmeyi başardık. İnternetten dosya indirme işlemi ile alakalı bölümümüz de şu an sona erdi.
Trojan İle Programları Çalıştırmak Ve Bug’ları Düzeltmek
İlk olarak düzeltmek istediğim ve bug’a sebebiyet verecek kısımları düzeltelim.
Olası durumlarda sorun yaşamamak için gerekli yerlere try-except blokları koyalım.
İndir ve yükle seçeneklerine server üzerinde basitçe try-else bloklarını koyuyorum.

Böylelikle server üzerinde bilgisayarda olmayan bir dosyayı indirmeye çalıştığımızda program donup kalmayacak. Aynı şekilde, işlem bizim bilgisayarda olmayan bir dosyayı karşı tarafa atmaya çalıştığımızda da yaşanmayacak.
Reverse shell’imiz üzerinde birkaç oynama yapalım.

Şu anlık her bloğumuzda try-except var; fakat burada ayarlamak istediğim bir şey daha var, yükle seçeneğini şu anlık sadece bir kere kullanabiliyoruz.
Bunu istediğimiz kadar dosyaya çıkarmak için basit ama etkili yeni bir kod dizisi daha ekliyorum.

Böylelikle, sıfırdan başlayarak her indirilen dosyada dosyanın adı 1,2,3,4… diye gidecek.
Aynı zamanda, buradaki son değineceğimiz bug ise, server üzerinden start x yazarak x.exe programını başlatabiliyoruz.

Ancak, notepad veya hangi x uygulamasını açarsak açalım, o program kapatılana kadar server üzerinden virüse erişimimiz olmuyor.
Şimdi notepad’i kapatıyorum ve yazdığımız kodlar yeniden çalışıyor.

Bu bölümde son olarak bu hatayı düzelteceğiz ve ardından serimizin 3. bölümü bitireceğiz.
İlk olarak trojan’ımıza girelim. Orada yeni bir "elif" bloğu kullanarak bu işlemde oluşacak hatayı düzeltelim.

Programı açtırıyoruz, işlem başarıldı olduysa bize bildirim gönderecek.
Ne olur ne olmaz, yazım yanlışı gibi durumlarda program çökmesin diye bir try-except bloğu da ekleyelim.

Bu kısımdaki işimiz bitti.
Şimdi çalıştırıp kontrol edelim;

Evet değerli RC ailesi, bu bölümün de sonuna gelmiş bulunmaktayız. Sorularınız için benimle iletişime geçebilirsiniz.
Ayrıca, yavaş yavaş serinin sonuna geliyoruz, çoğu ihtimalle vaktim olursa seriyi 5 bölümde bitiririm. Bir sonraki bölümde biraz daha crypter konularına girerim diye düşünüyorum.
Ayrıca, belki birkaç güzel özellik daha eklerim.
Hepinize iyi günler dilerim, bir sonraki bölüme kadar beklemede kalın.