Sıfırdan Kendi Backdoor Trojanımızı Geliştirelim isimli öğretici serimizin ikinci bölümüne hoş geldiniz sayın TurkHackTeam üyeleri. Bildiğiniz üzere bir önceki bölümde basitçe serverımızı ve reverse shellimizi 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 4 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.
Başlıklar:
- Birkaç Bugı ve Hatayı Düzeltme
- Bağlantıyı Güçlendirme
- Pyinstaller İle Virüsü Çalıştırma
- Kalıcılığı Sağlama
Pekala, kolları sıvayalım.
Birkaç Bugı ve Hatayı Düzeltme
İlk olarak düzeltmemiz gereken kısım, receive ve send ile belirttiğimiz 1024 byte, yani 1 kilobytelı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 bence 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.
Buraya kadar problem yok gibi gözükebilir 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ı.
Güzel, şimdi netstats gibi komutlarda programımız çökmesin diye ekleyeceğimiz bir fonksiyon var. Bunun için öncelikle json kütüphanesini servera dahil etmek gerek. Ardından ise jsonu kullanarak virüse veri aktarımı yapabiliriz.
Veri aktarımı için verigonder adında yeni bir fonksiyon oluşturuyorum.
Kurban.send() komutundan iki tane olmaması lazım, o yüzden kodumuzdaki 30. satırı düzenliyoruz.
Veri göndermek için olan fonksiyonumuz tamam. Ancak verileri de bu json kullanarak almamız lazım. Bunun için de ayrı bir fonksiyon oluşturuyoruz verial isminde. Ayrıca bu fonksiyona parametre atamamıza gerek yok.
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.)
Böyle bir şey olarak görünmesi lazım.
Aynı zamanda şimdi de veri alma işlemini bir fonksiyon ile yaptığımız için 44. satırdaki kodu düzenleyelim.
Şimdiki işlemimiz çok basit: Bu son oluşturduğumuz 2 fonksiyonu da trojan.py, yani reverse shellimize kopyala yapıştır yapmak. Aynı olduğu gibi ikisini de kopyalayıp yapıştıralım.
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.
Ayrıca 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.
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.
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.
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 diye.
Görüldüğü üzere şu an gayet iyi çalışıyor. Ufak bir iki yazım hatam olmuş kodda, onları siz de fark edip kendinizde düzenlersiniz. Benim bilgisayardan kaynaklı bir problem, sizde olmaz bu arada .
Bir sonraki bölüme geçelim.
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 kurbana gönderdiniz virüsü, 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 servera 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.
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.
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.
Döngümüz tamam şu anlık. Birazcık 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.
Şimdi ise eğer server ile bağlantı kurulamazsa diye except bloğu oluşturup bağlantıyı kurana kadar aynı işlemleri tekrarlarsın diye bir döngüye alıyorum.
Sırada 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.
Buradaki işimiz bitti. Kısa ama gerekli birkaç ufak işlem yaptık. Şimdi bakalım çalışıyor mu programlar.
(Önce trojan.py çalıştırıldı.)
(30 saniye sonra bağlantı kuruldu.)
Şimdi de serverdan çıkış yapılsın, sonra yeniden bağlantı kurulsun diye fonksiyonları while true döngüsünde çağırıyorum.
(Serverdan çı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.
Pyinstaller İle 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.
Sonrasında böyle bir pencere açılacak. Burada şifrenizi girin.
Eğer şifreniz yoksa bu adımları uygulayın:
Yükledikten sonra ise arama yerinde passwords and keys araması yapın.
Anahtar simgeli olan kısıma basıyoruz. Ardından buradan passwords kısmının altındaki yere gelip change password diyoruz.
Burada ise eski şifremizi giriyoruz. Yani varsayılan kullanıcı parolasını.
Ondan sonra aşağıdaki pencereye yeni şifrenizi girin.
Buradaki iş bitti. Şimdi pyinstaller yükleyelim.
Ve yüklendi. Ş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 Winea 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: Arkadaşlar, Wine kaynaklı güncel olarak pip kurulumu yapılamıyor. O yüzden ben de zaten elimde Windows var diye aynı kodları windowsta bir python dosyası içine kaydettim. Saatlerce Wine için çözüm aradım, sağ olsun M3TA da yardımcı olmaya çalıştı ancak şu anlık wine dağıtımında bir sıkıntı var.
Şu an bilgisayarda mevcut bu dosya. Aynı şekilde windowstan pyinstaller ile dosyamızı yürütülebilir hale getiriyoruz.
Bir not geçeyim, arkadaşlar ben kodlamayı python2de yaptım. Ancak bunu unutup Windows üzerinde python3 ile çalıştırmaya çalıştım. Bu yüzden de çalışmadı. 1 gün bu ufak detayı unutup tüm gün boş boş sorunuma çözüm aradım. Benim diyeceğim sürümünüze dikkat edin .
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 yani.
Şimdi görebildiğiniz üzere burada bir sürü dosya ve klasör oluştu. Bizim trojan.exemiz distin içindedir.
Virüsü direkt masaüstüme atıyorum. Normalde kilobyte boyutundaki python dosyamız .exe olunca uyumluluk için yaklaşık 7 mbye çıktı. Çok büyük değil, bir python dosyasına göre büyük.
Görüldüğü üzere masaüstümüzde şu an trojan.exe var. Tabi ki siz bunun ismini değiştirin. Böyle durmasın.
Şimdi önce serverı, sonrasında da masaüstümdeki virüsü çalıştırıyorum. Şimdilik antivirüs varsa kapayın, yoksa direkt silebilir uygulamayı.
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.
Kalıcılığı Sağlama
Ş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.
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 keyleri 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 Managerdan fark edilip kapanmaya zorlanabilir.
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.
Bizim şimdiki amacımız trojan.exemizin 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 importluyoruz.
Ş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 gerekli bu kısım.
Ardından ihtiyacı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.
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.
Kopyalama işlemi için yukarıdaki kodları çalıştırmak gerekli. Ardından kayıt defteri anahtarımızı giriyoruz.
Buraya HKCUya 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.
Ş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.
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.
Evet değerli üyeler ve arkadaşlar, bu bölümün sonuna gelmiş bulunmaktayım. Bu bölümü yazmam epey uzun süre aldı, format ve pyhton 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.
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 4 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.
Başlıklar:
- Birkaç Bugı ve Hatayı Düzeltme
- Bağlantıyı Güçlendirme
- Pyinstaller İle Virüsü Çalıştırma
- Kalıcılığı Sağlama
Pekala, kolları sıvayalım.
Birkaç Bugı ve Hatayı Düzeltme
İlk olarak düzeltmemiz gereken kısım, receive ve send ile belirttiğimiz 1024 byte, yani 1 kilobytelı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 bence 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.
Buraya kadar problem yok gibi gözükebilir 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ı.
Güzel, şimdi netstats gibi komutlarda programımız çökmesin diye ekleyeceğimiz bir fonksiyon var. Bunun için öncelikle json kütüphanesini servera dahil etmek gerek. Ardından ise jsonu kullanarak virüse veri aktarımı yapabiliriz.
Veri aktarımı için verigonder adında yeni bir fonksiyon oluşturuyorum.
Kurban.send() komutundan iki tane olmaması lazım, o yüzden kodumuzdaki 30. satırı düzenliyoruz.
Veri göndermek için olan fonksiyonumuz tamam. Ancak verileri de bu json kullanarak almamız lazım. Bunun için de ayrı bir fonksiyon oluşturuyoruz verial isminde. Ayrıca bu fonksiyona parametre atamamıza gerek yok.
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.)
Böyle bir şey olarak görünmesi lazım.
Aynı zamanda şimdi de veri alma işlemini bir fonksiyon ile yaptığımız için 44. satırdaki kodu düzenleyelim.
Şimdiki işlemimiz çok basit: Bu son oluşturduğumuz 2 fonksiyonu da trojan.py, yani reverse shellimize kopyala yapıştır yapmak. Aynı olduğu gibi ikisini de kopyalayıp yapıştıralım.
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.
Ayrıca 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.
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.
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.
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 diye.
Görüldüğü üzere şu an gayet iyi çalışıyor. Ufak bir iki yazım hatam olmuş kodda, onları siz de fark edip kendinizde düzenlersiniz. Benim bilgisayardan kaynaklı bir problem, sizde olmaz bu arada .
Bir sonraki bölüme geçelim.
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 kurbana gönderdiniz virüsü, 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 servera 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.
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.
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.
Döngümüz tamam şu anlık. Birazcık 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.
Şimdi ise eğer server ile bağlantı kurulamazsa diye except bloğu oluşturup bağlantıyı kurana kadar aynı işlemleri tekrarlarsın diye bir döngüye alıyorum.
Sırada 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.
Buradaki işimiz bitti. Kısa ama gerekli birkaç ufak işlem yaptık. Şimdi bakalım çalışıyor mu programlar.
(Önce trojan.py çalıştırıldı.)
(30 saniye sonra bağlantı kuruldu.)
Şimdi de serverdan çıkış yapılsın, sonra yeniden bağlantı kurulsun diye fonksiyonları while true döngüsünde çağırıyorum.
(Serverdan çı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.
Pyinstaller İle 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.
Eğer şifreniz yoksa bu adımları uygulayın:
Kod:
apt-get install seahorse
Yükledikten sonra ise arama yerinde passwords and keys araması yapın.
Anahtar simgeli olan kısıma basıyoruz. Ardından buradan passwords kısmının altındaki yere gelip change password diyoruz.
Burada ise eski şifremizi giriyoruz. Yani varsayılan kullanıcı parolasını.
Ondan sonra aşağıdaki pencereye yeni şifrenizi girin.
Buradaki iş bitti. Şimdi pyinstaller yükleyelim.
Ve yüklendi. Ş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 Winea 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: Arkadaşlar, Wine kaynaklı güncel olarak pip kurulumu yapılamıyor. O yüzden ben de zaten elimde Windows var diye aynı kodları windowsta bir python dosyası içine kaydettim. Saatlerce Wine için çözüm aradım, sağ olsun M3TA da yardımcı olmaya çalıştı ancak şu anlık wine dağıtımında bir sıkıntı var.
Şu an bilgisayarda mevcut bu dosya. Aynı şekilde windowstan pyinstaller ile dosyamızı yürütülebilir hale getiriyoruz.
Bir not geçeyim, arkadaşlar ben kodlamayı python2de yaptım. Ancak bunu unutup Windows üzerinde python3 ile çalıştırmaya çalıştım. Bu yüzden de çalışmadı. 1 gün bu ufak detayı unutup tüm gün boş boş sorunuma çözüm aradım. Benim diyeceğim sürümünüze dikkat edin .
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 yani.
Şimdi görebildiğiniz üzere burada bir sürü dosya ve klasör oluştu. Bizim trojan.exemiz distin içindedir.
Virüsü direkt masaüstüme atıyorum. Normalde kilobyte boyutundaki python dosyamız .exe olunca uyumluluk için yaklaşık 7 mbye çıktı. Çok büyük değil, bir python dosyasına göre büyük.
Görüldüğü üzere masaüstümüzde şu an trojan.exe var. Tabi ki siz bunun ismini değiştirin. Böyle durmasın.
Şimdi önce serverı, sonrasında da masaüstümdeki virüsü çalıştırıyorum. Şimdilik antivirüs varsa kapayın, yoksa direkt silebilir uygulamayı.
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.
Kalıcılığı Sağlama
Ş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.
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 keyleri 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 Managerdan fark edilip kapanmaya zorlanabilir.
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.
Bizim şimdiki amacımız trojan.exemizin 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 importluyoruz.
Ş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 gerekli bu kısım.
Ardından ihtiyacı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.
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.
Kopyalama işlemi için yukarıdaki kodları çalıştırmak gerekli. Ardından kayıt defteri anahtarımızı giriyoruz.
Buraya HKCUya 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.
Ş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.
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.
Evet değerli üyeler ve arkadaşlar, bu bölümün sonuna gelmiş bulunmaktayım. Bu bölümü yazmam epey uzun süre aldı, format ve pyhton 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.