I
iwystic
Veteran
- Joined
- Aug 27, 2019
- Messages
- 4,834
- Reaction score
- 9,970
Merhaba değerli RC üyeleri,
Bu konuda “Sıfırdan Backdoor Trojan Yapımı” isimli serimizin dördüncü bölümünü okuyacaksınız. Şu ana kadar biraz bir şeyler yaptık, kalıcılığımızı arttırdık, server bağlantımızı güçlendirdik ve az çok özellik ekledik.
Bu bölümde ise daha çok kullanım kolaylığı ve gizleme meselesi ile ilgilenmeyi düşünüyorum. Ayrıca, birkaç tane ufak daha özellik ekleyeceğim ve sonraki bölümlere sadece keylogger veya eğlence amaçlı birkaç özellik eklemeyi düşünüyorum. Giriş kısmını çok uzatmadan alt başlıklara geçelim.
İçerik:
- Hedef Cihaz Üzerinde Screen Shot Almak
- Ayrıcalıklarımızı Kontrol Etmek
- Help/Yardım Bölümü Eklemek
- Virüsü Gizlemeye Çalışmak (PyInstaller)
Hedef Cihaz Üzerinde Screen Shot Almak
Screenshot, yani ekran görüntüsü, karşı cihazın anı anına ne yaptığını bize bildirebilir. En basitinden kötü niyetli kişiler tam da siz internet üzerinden alışveriş sırasında kart bilgilerinizi girdiğiniz zaman bir ekran resmi alsa tüm bilgileriniz karşıya geçer. Bu basit, örnek bir senaryoydu. Aynı şekilde mesela WhatsApp Web veya Telegram Web kullanırsanız [masaüstü uygulaması da dahil] siz burada mesajlaşırken ekran resmi alınarak bu yazışmalar okunabilir.
Bu kısımda sizlere nasıl reverse shell’imiz üzerinden ekran resmi alınır, bunu göstereceğim. Bunun için ilk olarak trojan.py dosyamıza mss kütüphanesini, bunun içinde ctypes kütüphanesini eklememiz gerek.
Bu kütüphaneyi PIP’e eklemek lazım, neyse...
Ardından isterseniz ekran resmi isminde bir fonksiyon oluşturalım ve içine ekran resmi almak için gerekli olan kodları koyalım.
Şimdi bu fonksiyonu kabuk() içinde kullanmak gerek. Bunun için ilk olarak bir elif bloğu oluşturuyorum.
Bloğun içine ekran resmi fonksiyomuzu ekleyelim. Ancak burada biraz daha işlem yapacağız. İlk önce bir ekran resmi alınacak, ardından bu alınan ekran resmi oluşturulunca bize tek tek byte’ları gönderecek. Ardından ise işlem tamamlanınca kurbanımızın masaüstünde veya trojan.exe’mizi nerede çalıştırdıysa orada bir ekran resmi olmasın diye sileceğiz. Yoksa şüphe çeker.
Kaydedilen ekran resmini kurban fark etmesin diye silelim. Aşağıdaki kod dizisi ile bu işlemi hallediyoruz. Monitor-1.png default yani varsayılan olan dosya ismidir. MSS ile aldığınız ekran resimleri bu isimle kaydedilir.
Programımızda oluşabilecek hata olursa diye de bu olayı try-except bloğu içine alıyoruz.
Şimdi trojan.py üzerinde işimiz bitti. Sırada bu alınan ekran resmini karşılayacak kodlar var. Bunun için server’ımızı açıyoruz ve bir elif bloğu oluşturuyoruz.
Bu arada, fark ettim de kod[:10] kısmı gereksiz. O yüzden buraya eklemedim, öncekini de sildim.
Neyse, şimdi bu dosyayı alacak kodları girelim.
Resim isimli değişkenimizi decode etmek için gereken kodu yazıyoruz.
Buraya kadar iyi geldik aslında; ancak anlamadığım şekilde resim bazen sorun çıkartıyordu. Sonradan fark ettim ki trojan.py üzerinde verigonder’de HATA mesajı vardı, bu yüzden sıkıntı çıkarıyordu. Ufak bir araştırma sonucu bu aşağıda verdiğim kod bloklarını eklemeye karar verdim.
Burada, önceki dosya yükleme işleminde yaptığımız gibi, bir değişkene 0 değeri verdim ve her o dosyada değişkenin kullanımıyla bir değer arttırdım. Yani s+=s sayesinde 1,2,3,4… diye ekran resimlerimiz kaydedilecek.
Ardından ise her defasında yaptığımız şekilde bir try-except ekliyoruz ki olası bir durumda bozulmasın.
İki programımızda da işlemimiz bitti. Şimdi sırada çalıştırma aşaması var. Bir not da düşeyim, bazı kütüphaneler python 2 için desteğini bitirdi. Bunun için biraz araştırma ile py2 kütüphanelerini manuel olarak kurmanız lazım.
Evet, görünebildiği üzere şu an tek bir çektiğimiz ekran resmi geldi. Yalnız belirtmemde fayda var, python yavaş compile olan bir dil olduğu için ekranresmi komutunun tamamlanması biraz uzun sürebiliyor.
İkinci resmi de alalım bari, bu sefer web tarayıcıda RC’yi açacağım.
Pekâlâ, anlayacağınız gibi bu bölümdeki işimiz bitti. Şimdi sırada ayrıcalıklarımızı kontrol etmek var. Bir sonraki bölüme daha da uzatmadan geçelim.
Ayrıcalıklarımızı Kontrol Etmek
Ayrıcalıklar nedir, veya Privileges nedir sorunu yanıtlamak isterim ilk önce. Basitçe açıklamak gerekirse bir sistem üzerinde sahip olduğunuz yetki denebilir. Bazı yetkiler şunlardır; Root, Administrator, User ve Guest.
Guest’in sistem üzerinde değişiklik yapma hakkı yoktur. Adı üstünde sistemde sadece ziyaretçi olarak gezinir.
User temel kullanıcı haklarına sahiptir. Kendi oturumunda değişiklikler yapabilir. En yaygın kullanılan ayrıcalıklardandır. Aynı zamanda cihaz üzerinde büyük değişiklikler yapamadığı için kullanım açısından en güvenlilerden birisidir.
Administrator ise isminden de belli olabileceği gibi yönetici iznidir. Genel değişiklileri yapabilir, sistem üzerinde kayıt defterini düzenleyebilir. Kullanıcı ve Misafir hesapları üzerinde oynama yapabilir. Root’ta yazanlar bunda da geçerlidir.
Root ise direkten kök anlamına gelir. Genelde Linux sistemlerinde admin’e verilen addır. Sistem üzerinde köklü değişiklikler yapılabilir. Eğer yanlışlıkla bilmediğiniz yerlerde oynama yaparsanız cihazınız çoğu ihtimalle artık kullanılmaz hale gelir.
--------------------------------------------
Pekâlâ, yani anlayacağınız bizim için Admin veya Root kullanıcısı izinlerine sahip olmak gerek daha iyi bir etkileşim için. Windows üzerinde çalıştığı için de admin iznimizin olması daha iyi olur.
User ile Admin’in çalıştırabileceği komutlar farklı olduğu için bizim hangi izne sahip olduğumuzu bilmemiz gerekir. Bu bölümde ise hangi izne sahip olduğumuzu öğreneceğiz. Bunun için de zaten önceden projeye eklediğimiz os kütüphanesini kullanacağız.
Öncelikle trojan.py dosyamıza girerek ayrıcalıklarımızı kontrol edecek bir fonksiyon ekliyoruz.
Ayrıcalığımızı kontrol etmek için gerekli olan kodu ekliyoruz.
Bu kod hangi yetkiye sahip kullanıcı olduğumuzu gösteriyor. Ardından bir try-except-else bloğu oluşturuyoruz ki ona göre ne olduğumuzu öğrenelim.
Aynı zamanda bir değişken atayıp bu değişken üzerinden bilgiyi server’a gönderelim.
Şimdi ise bir elif bloğu içinde bu bilgiyi verigonder kullanarak server’a gönderelim. Bu işlemi gerçekleştirmek için gerekli kodu da kontrol olarak ayarlayalım.
Bu kısmı da diğerleri gibi hata vermemesi adına try-except’e alalım.
Buradan sonra isterseniz server üzerinde kontrol isimli bir else if bloğu da kullanabilirsiniz; ancak çok da gerek yok.
Bu yüzden isterseniz direkt deneme kısmına geçelim.
Gördüğünüz gibi benim masaüstümde ve o bölümün alt klasörlerinde user yani kullanıcı yetkim varmış.
Normalde de zaten Admin olduğum oturumumu kullanmıyorum.
Sadede geleceksek, şu an benim gösterdiğim/girdiğim bölümlerde kullanıcı iznim olduğu için sadece kullanıcı hesaplarının kullanabildiği komutları yürütebilirim. Ayrıcalık yükseltme işlemini de yapabiliriz ancak; o kısım üst düzey hacker’ları ilgilendiren kısım.
Diğer başlığa geçelim.
Help/Yardım Bölümü Eklemek
Bu kısım aslında kendi virüsünüzü kullanıyorsanız pek gerekli olmayabilir; ancak halka açık bir virüsünüz varsa nasıl kullanıldığını tarif etmek için eklenmesi gerekilebilir. Zaten ta ilk bölümde çıkmak için 0’a basmamız gerektiğini söyleyen bir küçük yardım menüsü eklemiştik. (CTRL+C'de terminal üzerinde işe yarar.)
Şimdi ise hızlıca eklediğimiz tüm özellikler için bir yardım menüsü ekleyelim.
Bu kısım konusunda kararsızdım aslında ama ben colorama kütüphanesini çok sevdiğim için yardım seçeneğini server üzerine ekleyeceğim.
Bu kısımda üç seçeneğimiz var; Ya, ‘’’ kullanarak çok satırlı bir print kullanacağız, ya satırları ayarlamak için \n kullanacağız, ya da her özellik için ayrı print kullanacağız. Ben son seçeneği seçiyorum.
Aynı zamanda, yardım için bir fonksiyon ekleyip print’leri oraya yerleştireceğim.
Ben bu kodları colorama ile daha güzel bir görünüme sokmak istiyorum.
Böyle bir şey yaptım, kendi zevkime göre renk ayarı falan yaptım.
Şimdi kod değişkeninin input kısmından önce yârdim fonksiyonunun nasıl çalışacağını gösteren bir kısım ekleyelim.
Elif bloğunun alt kısmı ile bu fonksiyonu çağıralım.
Server üzerinde işlem tamam, ancak Reverse Shell kısmında y veya yardim diye bir komut alan komut satırı çökmesin diye oraya da bir el atıyoruz.
Şimdi yardım menüsü hakkında işimiz bittiğine göre, çalıştırıp deneyelim.
Dürüst olmak gerekirse, böyle bir şey beklememiştim.
Bunu hemen daha güzel bir hale getirip yeniden çalıştırıyorum. Ayrıca sonradan fark ettim ekran resmi alma özelliğini yazmayı unutmuşum.
Pekâlâ, ben de farkındayım bir şaheser yapmadığımın; ama bence gayet güzel.
Böylesinde çok da önemli olmayan bir sorunu da hallettiğimize göre bir sonraki başlığa geçebiliriz.
Virüsü Gizlemeye Çalışmak (PyInstaller)
Yaptığınız virüsleri yutturabilmenin en kolay yolu iyi bir sosyal mühendislik ve sağlam bir crypter’dan geçer. Bu ve bundan sonraki başlıkta ise değineceğim konu virüsü bir resme gizlemeye çalışmak ve ikonunu değiştirmek. Böylelikle olası sosyal mühendislik durumlarında karşı tarafa daha rahat virüsü yutturabilirsiniz.
İlk olarak göstereceğim yöntem PyInstaller’ın kendi ikon oluşturma özelliği ile alakalı. Ardından trojanımızın içine koyduğumuz kod ile daha kolay şekilde yutturulabilecek bir hale gelecek virüsümüz. Bir not da düşeyim, bu kısmı ister Linux üzerinden, ister Windows üzerinden yapabilirsiniz. Ben Windows kullanacağım.
Öncelikle, Google üzerinde bir resim bulalım ve ardından bu resmi .ico uzantılı hale getirelim.
Seçtiğim resim bu:
Bu resmi internet üzerinden icon’a dönüştürdüm.
Sırada bu ikon dosyasını, trojan.exe dosyamıza ikon olarak ekliyoruz. Bunun için de pyinstaller parametresini kullanıyoruz.
Virüsümüz dist klasörünün içinde oluştu. Dikkat edin, Windows güvenlik kalkanınız veya anti-virüsünüz açık ise, oluşur oluşmaz virüs silinecektir.
Şu anda resmimiz ikon olarak ayarlanmış durumda. Tek fark, normal resim 16:9 oranında iken bu ikon 1:1 oranında.
Bunu detaylıca kurcalarsanız daha iyi bir hale getirebilirsiniz.
Şimdi çalıştıralım:
Hiçbir şey olmadı!? Evet, görünürde hiçbir şey olmadı; lakin görev yöneticisinde trojan.exe’nin çalıştığını görebiliriz.
Peki, bu resim açıldıktan sonra neden görüntülenmedi?
Bu işi halletmek için de, trojan.py’ye girip resmi tek seferlik açma işlemini gerçekleştirecek kodu yazıyoruz.
İlk sefer olup olmadığını anlamak için 2. derste kullandığımız kalıcılığı arttırmak için kayıt defterine ekleme işleminin gerçekleştiği satırı kullanacağız. Hatırlarsanız if not bloğu ile ilk sefer olup olmadığını, veyahut da regedit’ten programın silinip silinmediğini anlayabiliyorduk.
Windows üzerinde python’un kendi IDE’sini açıyorum. Sys kütüphanesini kullanacağız.
Bu eklediğimiz kod, resim.png dosyasını ilk çalıştırmada açar; ancak resim.png dosyasını da pyinstaller ile exe’nin içine eklememiz gerek ki hata vermesin. Sonuçta olmayan bir dosyayı açmaya çalışmak programın çökmesine sebep olur. Ancak bu işlemi pyinstaller ile programı oluştururken eklenecek, şimdi değil.
Gerekli bir diğer kodu ekliyorum;
Şimdi ise her zamanki yaptığımız gibi ne olur ne olmaz diye try-except ekliyoruz. Ancak buradaki except bloğu çok da önemli değil. Gereklilik olduğundan dolayı içine rastgele bir kod ekleyelim.
ÖNEMLİ: Program if not’da regedit kaydını kontrol ettiği için öncelikle regedit kaydını ve roaming kaydını silmeniz lazım. Yoksa resim açılmaz. Aynı zamanda resim diye atadığımız değişkenin başında “/” koymamız gerek ki yolu oluştursun.
Şimdi deneyelim;
Şu an ilk çalıştırmamız olarak sayıldığı için resim açıldı; ancak bir dahaki çalıştırmalarımızda açılmayacaktır. Bu gizleme yöntemi direkt olarak pyinstaller ile sağlanan bir gizlemedir. Daha iyi bir gizleme için bir tool kullanabilirsiniz.
Normalde hazır tool kullanarak virüs gizlemeyi gösterecektim; ama vazgeçtim, inceleyip anlatacağım. Tüm toollar trojan gömülmüş olarak çıktı.
Ava giderken avlanmak istemediğimden dolayı bu kısmı üzülerek bitiriyorum.
Kali Linux Üzerinde de virüsü bir resme gömebiliriz, bunun için de birkaç tool var ancak onları eklemek istemedim. En basitinden, zaten daha önceden yazılmış bir konu var bunun hakkında.
--------------
Sonuca gelirsek, bir sonraki bölümde bitirmeyi düşünüyorum; fakat tahminimce bir sonraki bölümümüz uzun olacak. Çünkü, sonradan birkaç ekleme yapma fikri var aklımda. Onun haricinde şu ana kadar zaten işe yarar özellikler eklediğimizi düşünüyorum. Geriye eklemek istediğim sadece keylogger ve kurban ile iletişim seçeneği kaldı. Onları da bir aksilik olmazsa bir sonraki bölüme ekleyeceğim. Birkaç gün sonra yayınlamış olurum.
O zamana kadar kendinize iyi bakın.