Sıfırdan Backdoor Trojan Yapımı #2

iwystic

Veteran
Katılım
27 Ağu 2019
Konular
290
Mesajlar
4,890
Çözümler
491
Tepkime puanı
10,807
RC Point
0
caldim.png

Sıfırdan Backdoor Trojan Yapımı” isimli öğretici serimizin ikinci bölümüne hoş geldiniz.
Bildiğiniz üzere bir önceki bölümde basitçe server’ımızı ve reverse shell’imizi oluşturduk,
şimdi ise gerçekten bir virüs diyebileceğimiz ama hala basit düzeyde olan bir hale getireceğiz.

Biraz daha araştırma yaptım konu ile ilgili, daha karışık algoritmalara ve bilgisayar sistemlerine uzun uzun bir göz attım. İşin iyi tarafı bu konular hala basit; ancak seriyi sanırım 5 bölüm tutacağım ve bundan sonraki konular biraz daha karmaşık.
O yüzden elimden geldiğince karışıklık yapmadan, gereksiz detaylara girmeden devam edeceğim. Hazırsanız bu bölümün alt başlıklarına görelim.


4dKDtQ.png

İçerik:

- Birkaç Bug’ı ve Hatayı Düzeltme
- Bağlantıyı Güçlendirme
- Py installer ile Virüsü Çalıştırma
- Kalıcılığı Sağlama


4dKDtQ.png

Birkaç Bug’ı ve Hatayı Düzeltme

İlk olarak düzeltmemiz gereken kısım: Receive ve send ile belirttiğimiz 1024 byte; yani 1 kilobyte’lık kısım.
Eğer büyük miktarda bir veri alışverişi olacaksa bu değer yetersiz gelecektir ve program çökecektir.
Tabi burayı düzeltmeden önce, bir artık fonksiyonları kullanıp kodu daha düzenli hale getirelim, ileride ihtiyacımız olacak.
Aynı zamanda, trojan.py içindeki colorama modülümüz daha fazla işe yaramayacak, onun için onu da kaldıralım.

1608648552789.png

4dKDtQ.png

1608648837971.png

4dKDtQ.png

Buraya kadar problem yok gibi görünebilir; ancak fonksiyon içinde olan değerleri global olarak tanımlamamız lazım.
Yani, fonksiyon dışında da bu değişkenler var olmalı.

4dKDtQ.png

1608648924831.png

4dKDtQ.png

Güzel, şimdi netstats gibi komutlarda programımız çökmesin diye ekleyeceğimiz bir fonksiyon var.
Bunun için öncelikle json kütüphanesini server’a dahil etmek gerek. Ardından ise json’u kullanarak virüse veri aktarımı yapabiliriz.
Veri aktarımı için verigonder adında yeni bir fonksiyon oluşturuyorum.

4dKDtQ.png

1608653199067.png

4dKDtQ.png

Kurban.send() komutundan iki tane olmaması lazım, o yüzden kodumuzdaki 30. satırı düzenliyoruz.

4dKDtQ.png

1608653292020.png

4dKDtQ.png

Veri göndermek için olan fonksiyonumuz tamam. Ancak verileri de bu json kullanarak almamız lazım. Bunun için de verial isminde ayrı bir fonksiyon oluşturuyoruz. Ayrıca, bu fonksiyona parametre atamamıza gerek yok.

4dKDtQ.png

1608653406698.png

4dKDtQ.png

Fonksiyon hazır; ancak istediğimiz miktarda büyük verileri nasıl alacağız? Eğer tek sefer fazla veri karşılayamıyorsak biz de parça parça karşılarız.
Bunun için de, fonksiyon içinde while döngüsü kullanmamız lazım. Bir de try-except bloklarını da kullanacağız.
(Önceki fotoğrafta j_data yerine json_data yazmışım. Onu düzelttim.)

4dKDtQ.png

1608653493426.png

4dKDtQ.png

Böyle bir şey olarak görünmesi lazım.
Aynı zamanda, veri alma işlemini bir fonksiyon ile yaptığımız için 44. satırdaki kodu düzenleyelim.

4dKDtQ.png

1608654937361.png

4dKDtQ.png

Şimdiki işlemimiz çok basit; Bu son oluşturduğumuz 2 fonksiyonu da trojan.py, yani reverse shell’imize kopyala yapıştır yapmak.
Aynı olduğu gibi ikisini de kopyalayıp yapıştıralım.

4dKDtQ.png

1608655050706.png

4dKDtQ.png

Buradan sonraki işlem ise bu dosyadaki kodları, yeni eklediğimiz fonksiyonlara göre düzenlemek. Çok da zor bir şey değil.
Düzenlenmiş kodu aşağıda görebilirsiniz.

4dKDtQ.png

1608655181561.png

4dKDtQ.png

Buradaki while döngüsünü de fonksiyon içine alsak daha iyi olacaktı, onu unutmuşum. Şimdi while döngüsünü de fonksiyon içine alıyorum.

4dKDtQ.png

1608659686327.png

4dKDtQ.png

Birkaç tane daha küçük özellik ekleyelim. Mesela bizim yazdığımız komut, hedef bilgisayarda çalıştırılamazsa bize bir uyarı da versin.
Bu kısmı ise tahmin edebileceğiniz üzere yine try-except blokları kullanıyoruz.

4dKDtQ.png

1608655307366.png

4dKDtQ.png

Buradaki işimiz bitmiş mi diye bakınırken birkaç tane düzeltme yaptım. Fonksiyonlar arasında kalan kodu en sona aldım ve kabuk() fonksiyonunu çağırmak için gerekli kodu ekledim.

4dKDtQ.png

1608655373959.png

4dKDtQ.png

Pekâlâ, bu bölümlük işimiz bitti. Artık daha büyüt boyuta sahip veri transferi yapabiliyoruz. Çalıştırıp görelim ne durumda...

4dKDtQ.png

1608655472829.png

4dKDtQ.png

Görüldüğü üzere, şu anda gayet iyi çalışıyor. Kodda ufak bir iki yazım hatam olmuş, onları siz de fark edip kendinizde düzenlersiniz.
Benim bilgisayardan kaynaklı bir problem, sizde olmaz.
Bir sonraki bölüme geçelim.

4dKDtQ.png

Bağlantıyı Güçlendirme

Buraya kadar her şey güzel gitti. Şimdi el atmamız gereken diğer bir konu da bağlantıyı sağlama almak. Çünkü, şu anki virüsümüz sadece önce server, ardından da trojan çalışınca bağlantıyı kuruyor; fakat, diyelim ki, siz virüsü kurbana gönderdiniz, ardından da bir işiniz çıktı ve kurban virüsü açmadan önce server’ı başlatamadınız. Bu durumda yapmamız gereken belli bir süre aralığında server’a bağlantı isteği gönderecek kodları programa dahil etmek.
Aynı şekilde bu kod dizini, daha doğrusu ben fonksiyon içine alacağım, siz server’ı kapatsanız bile tekrardan açtığınızda reverse shell ile bağlantı kurmamızı sağlayacak.

4dKDtQ.png

Bunun için öncelikle herkesin zaten ne olduğunu bildiği ve bol bol kullandığımız time kütüphanesini trojan.py isimli programımıza dahil etmemiz gerek.

[Fotoğraf silinmiştir.]

Time kütüphanemiz eklendikten sonra basit bir mantık ile time.sleep(x) kullanarak istediğimiz aralıkta tekrardan bağlantı kurmayı halletmemiz lazım.
Bunun içinde while döngüsünü kullanalım. Ben aradaki süreyi 30 saniye olarak ayarlıyorum.

[Fotoğraf silinmiştir.]

Döngümüz şu anlık tamamdır. Biraz düzenleme amacıyla bu kısmı da bir fonksiyon içine alıyorum.
Aynı zamanda altındaki kod dizisini kaç saniyede bir tekrarlatacaksa o değeri giriyorum.

[Fotoğraf silinmiştir.]

Eğer server ile bağlantı kurulmaz diye except bloğu oluşturup bağlantıyı kurana kadar aynı işlemleri tekrarlarsın diye bir döngüye alıyorum.

4dKDtQ.png

1608656001410.png

4dKDtQ.png

Eğer bağlantı kurulduysa, kabuk fonksiyonuna bağlanmak var. Bunun için de try bloğundaki connect kodumuzun altında kabuk fonksiyonunu çağırıyorum.
Aynı şekilde kodumuzun sonunda artık akbuk fonksiyonumuzu değil, baglanti_dene fonksiyonumuzu çağırıyoruz.

4dKDtQ.png

1608656157402.png

4dKDtQ.png

Buradaki işimiz bitti. Kısa ama gerekli birkaç ufak işlem yaptık. Şimdi bakalım programlar çalışıyor mu...

4dKDtQ.png

1608656489740.png

4dKDtQ.png

[Önce trojan.py çalıştırıldı.]

4dKDtQ.png

1608656550743.png

4dKDtQ.png

[30 saniye sonra bağlantı kuruldu.]

Şimdi de server’dan çıkış yapılsın, sonra yeniden bağlantı kurulsun diye fonksiyonları while true döngüsünde çağırıyorum.

4dKDtQ.png

1608656680298.png

[Server’dan çıkış yapıldı ve sonra tekrar girildi. Tekrardan bağlantı sağlandı.]

Buradaki işimiz bitti, şimdi artık virüsü kendi sanal bilgisayarımızda değil, asıl ana Windows makinemizde deneyeceğiz.
Bunun için yapmamız gerekenler de bir sonraki kısımda.

4dKDtQ.png

PyInstaller ile Virüsü Çalıştırma

Bu kısımda öncelikle pyinstaller kütüphanesini yüklememiz lazım. Bunun için de komut satırına şunları yazıyoruz.

Kod:
pip install pyinstaller

Sonrasında böyle bir pencere açılacak. Burada şifrenizi girin.

4dKDtQ.png

1608656856659.png

4dKDtQ.png

Eğer şifreniz yoksa bu adımları uygulayın:

Kod:
apt-get install seahorse

4dKDtQ.png

1608656915097.png

4dKDtQ.png

Yükledikten sonra ise arama yerinde "passwords and keys" araması yapın.

4dKDtQ.png

1608657002698.png

4dKDtQ.png

Anahtar simgeli olan kısıma basıyoruz. Ardından, buradan passwords kısmının altındaki yere gelip "change password" diyoruz.

4dKDtQ.png

1608657120675.png

4dKDtQ.png

Burada ise, eski şifremizi giriyoruz. Yani varsayılan kullanıcı parolasını.
Ondan sonra aşağıdaki pencereye yeni şifrenizi girin.

4dKDtQ.png

1608657187278.png

4dKDtQ.png

Buradaki iş bitti. Şimdi pyinstaller yükleyelim.

1608657238342.png

4dKDtQ.png

Şimdi virüsümüzü .exe, yani yürütülebilir bir dosya haline getireceğiz.
İlk olarak, pyinstaller ile dosyamızı .exe yapalım.
Ancak, öncelikle Wine kurulu olması gerek. Wine, Linux üzerinde Windows dosyalarını çalıştırmamızı sağlar. Aynı şekilde Wine’a python da kurmak gerek.
Wine hakkında konuşulacak çok şey olduğu için bunun hakkında ayrı bir konu hazırlamayı düşünüyorum, burada pek bahsetmeyeceğim.

NOT: Dostlar, Wine kaynaklı güncel olarak pip kurulumu yapılamıyor. O yüzden ben de zaten elimde Windows var diye aynı kodları Windows’ta bir python dosyası içine kaydettim. Saatlerce Wine için çözüm aradım, fakat bulamadım.

Şu an bu dosya bilgisayarda mevcut. Aynı şekilde Windows'tan pyinstaller ile dosyamızı yürütülebilir hale getiriyoruz.

4dKDtQ.png

1608657518964.png

4dKDtQ.png

1608657547385.png

4dKDtQ.png

NOT: Dostlar, ben kodlamayı python2’de yaptım. Ancak, bunu unutup Windows üzerinde python3 ile çalıştırmaya çalıştım. Bu yüzden de çalışmadı.
Siz bu hatayı yapmayın.

4dKDtQ.png

1608657704515.png

4dKDtQ.png

Burada önemli olan 2 parametre var: İlki, biliyorsunuzdur ki python dosyaları Windows üzerinde çalıştırıldığında cmd yani komut istemi üzerinde çalışır. Virüs açıldığında komut istemi de açılırsa çok şüphe çeker ve bizim için sıkıntı olur. Biz de bundan dolayı –noconsole parametresi ile konsol açılmasını önledik.
İkincisi ise tek dosya olarak compile olmasını sağlayan –onefile parametresi. Bununla birlikte virüs sadece tek dosyadan oluşacak.

Şimdi görebildiğiniz üzere burada bir sürü dosya ve klasör oluştu. Bizim trojan.exe’miz dist’in içindedir.

4dKDtQ.png

1608657897581.png

4dKDtQ.png

1608657929394.png

4dKDtQ.png

Virüsü direkt masaüstüme atıyorum. Normalde kilobyte boyutundaki python dosyamız .exe olunca uyumluluk için yaklaşık 7 mb’ye çıktı.
Çok büyük değil, bir python dosyasına göre büyük.

4dKDtQ.png

1608657988501.png

4dKDtQ.png

Görüldüğü üzere, masaüstümüzde şu an trojan.exe var. Tabii ki siz bunun ismini değiştirin, böyle durmasın.
Önce server’ı, sonrasında da masaüstümdeki virüsü çalıştırıyorum. Anti-virüs'ünüz ve Windows Defender'iniz varsa kapatın. Yoksa, silinebilir.

4dKDtQ.png

1608658153577.png

4dKDtQ.png

Virüs çalışıyor. Birkaç tane de komut yürüttük ve buradaki işimiz bitti. Bir sonraki bölüme geçelim, çünkü kalıcılığı sağlamak çok önemli.

4dKDtQ.png

Kalıcılığı Sağlamak

Şu anlık virüsümüz iyi, güzel çalışıyor; ancak bilgisayar kapandığında veya Task Manager üzerinden kapatmaya zorlanırsa, virüs kapanır ve bizim iletişimimiz kesilir. Böyle bir durumda, virüs kapatılmasın veya bilgisayar her yeniden açıldığında virüs başlatılsın istiyoruz. Peki bunu nasıl yapacağız?

Burada bilmemiz gereken bir şey var. Regedit.

4dKDtQ.png

Regedit Nedir?

Windows Registry, yani Windows Kayıt Defterine regedit denir. Bilgisayardaki Windows OS ayarlarının ve bu ayarlara dair girdi kayıtlarının tümünün tutulduğu ana veri tabanlarıdır biridir. Bu kısımda bilmeden yapacağınız en küçük bir işlem bile büyük sorunlara yol açabilir. Bilgisayarın açılıp kapanması, hangi programların hangi durumda çalışacağı gibi önemli data key’leri burada bulunur.
Bizim yapacağımız şey ise virüsümüzü bu kısma eklemek ve bu sayede kalıcılığımızı arttırmakttır.

Normalde şu an virüsümüz çalışıyor, evet. Ancak Task Manager’dan fark edilip kapanmaya zorlanabilir.

1608658384412.png

4dKDtQ.png

Görüldüğü üzere şu an Görev Yöneticisinde arkaplan işlemi olarak çalışıyor. Biz bunu kapamaya zorlayıp kapatabiliriz.
Aynı şekilde bilgisayarı kapatırsak da, program kapanır.

Biz de bu bölümde virüsümüzü regedit kayıtlarına ekleyeceğiz ve bu sayede bilgisayar her yeniden başlatıldığında server üzerinden bağlantı kuracağız.

Öncelikle bilgisayar açıldığında açılan programların sahip olduğu registry keyleri nerede, onları bulalım.
Öncelikle arama yerine regedit yazıyoruz. Ardından, HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run konumuna giriyoruz. Burası, bilgisayardaki hangi uygulamaların başlangıçta başlayacağını belirler.

4dKDtQ.png

1608658504938.png

4dKDtQ.png

Bizim şimdiki amacımız, trojan.exe’mizin bu konuma bir key ekleyip her başlangıçta kendini başlatması.

Bu işlemler için öncelikle işletim sistemini projemize ekliyoruz. Yani OS kütüphanesini trojan.py içine import’luyoruz.

4dKDtQ.png

1608658678683.png

4dKDtQ.png

Şimdi de bizim istediğimiz programı, istediğimiz kısma kopyalamamızı sağlayan shutil kütüphanesini ekliyoruz.
Kayıt defterinde kalıcılık sağlamak için bu kısım gerekli.

4dKDtQ.png

1608658794999.png

4dKDtQ.png

İhtiyacımız olan, bir diğer kütüphane de sistem kütüphanesi. Yani sys kütüphanemizi de ekliyoruz, kopyalama işleminde buna da ihtiyacımız olacak.

4dKDtQ.png

1608658849726.png

4dKDtQ.png

Gerekli kütüphaneler eklendi. Şimdi sırada kalan kısmı halletmek var. Daha sağlam olması ve riski azaltmak için kayıt defterine kopyalama işlemini daha bağlantı kurulmadan önceki aşamaya, yani ilk aşamaya ekiyorum.
Burada değişken tanımlayıp kopyamızın hangi konuma kaydedileceğini yazıyorum.

4dKDtQ.png

1608658916501.png

4dKDtQ.png

Kopyalama işlemi için yukarıdaki kodları çalıştırmak gerekli. Ardından kayıt defteri anahtarımızı giriyoruz.

4dKDtQ.png

1608658980737.png

4dKDtQ.png

Buraya HKCU’ya yani Hkey Current User kısmındaki kayıt defterinin içinde bulunan Run kısmına trojan’ımızı ekledik. REG_GZ ise programın tipidir. Program yolunu da verdik ve shellde çalıştırdık.

Şu anda ilk defa çalıştırıldığında kendini kayıt defterinde belirtilen konuma kendini ekleyecek bir programımız var. Ancak zaten ekliyse ne olur? Programın hata vermesini önlemek için if bloğu ile zaten anahtarı kayıtlı ise tekrardan işlemi yürütmesini engelliyoruz.

4dKDtQ.png

1608659058370.png

4dKDtQ.png

Şimdi dosyamızı executable yani, yürütülebilir hale getirip çalıştıralım. Ardından kayıt defteri anahtarımızı test edelim.

4dKDtQ.png

1608659115057.png

4dKDtQ.png

Yukarıda gördüğünüz gibi şu an trojan.exe dosyamız, başlangıçta artık başlayacak. Böylelikle bağlantımız biz sonlandırmadığımız sürece kopmayacak.
Şimdilik bu kadar kalıcılık sağlamak yeterlidir umarım diye düşünüyorum.

4dKDtQ.png

Evet, değerli RC üyeleri, bu bölümün sonuna gelmiş bulunmaktayım. Bu bölümü yazmam epey uzun süre aldı, format ve python versiyon karışıklığı falan derken iyice bir yoruldum. Bir sonraki bölüme çalışmalara devam etmekteyim. Hazır olduğunda paylaşacağım. Takıldığınız yer olursa sorabilirsiniz.

İyi günler dilerim.
 

Ekli dosyalar

  • 1608655242839.png
    1608655242839.png
    173.2 KB · Görüntüleme: 3

Selyk

Prince Of Darkness
Moderator
Katılım
6 Eyl 2020
Konular
81
Mesajlar
2,656
Çözümler
563
Tepkime puanı
1,747
RC Point
0
Başarılı
 

THTIndexx

Super Member
Katılım
17 Şub 2022
Mesajlar
153
Tepkime puanı
4
RC Point
0
Trojeni exe olarak değilde başka bir uzantı ile yapabilme olasılığımız varmıdır method ile
 
Üst