Dosyalarda gömme işlemi

Merhaba;

Benden bir proje istendi. Bu proje için bir çalıştırılabilir dosyaya belirli dosyalar gömmem gerekiyor. Ve yine aynı program üzerinden gömdüğüm dosyalara ulaşmam gerekiyor. Aslında PyInstaller böyle çalışıyor. Eğer tek dosya olacaksa gerekli modülleri dosyaya gömüyor ve çalıştırırken bunlarla çalışıyor.

Peki benim bunu yapmam mümkün müdür, mümkünse nasıl bir yol izlemeliyim, tavsiyelerinizi bekliyorum.

İyi forumlar :slight_smile:

Steganografi yi bir araştırın derim . Ayrıca sonra python için stego kütüphanelerine bakıp kütüphaneleri anlayıp kendiniz bit kütüphane yazabilirsiniz :slight_smile:

1 Beğeni

cidden zor bir işlem .dll ler ile ugraşman gerekecektir ve arkaya virüs programı yerleştireceğim diyorsan illaha gömmene gerek yok 2 tane fonksiyonu aynı anda çalıştırıp bu işi yapabilirsin ama ne yapmak istiyorsun bir tam anlatabilirmisin modül mü çalıştıracaksın yoksa bir adet program mı ?

Program yazacağım.

O stego modülü için kaynak bulamadım, yazan kişi açıklama bırakmamış.

Yazacağım program bir .exe dosyası oluşturacak ve bu .exe dosyasına .zip dosyamı gömecek. Çalıştırıldığında o .zip dosyasını çıkartıp içinden özel bir dosya çalıştıracak. Temel olarak yapacağı şey bu.

@dildeolupbiten 'in şu başlığını bir incelemeliyim galiba…

Aslında olur mu bilmiyorum ama buradaki gibi yapıp orada Hello world yazan yere zip dosyasının binary contentini yazıp saklanabilir mi acaba bir deneyin isterseniz .

Yapacağınız programın exe uzantılı bir dosya oluşturması zorunlu mu ? Başka formatta olmaz mı text mesla ?

Hayır exe dosyası oluşturmalıyım.

Ayrıca bu teknikle .exe dosyasına gömme yapmak .exe dosyasının sağlığını nasıl etkiler bilemiyorum.

Maalesef bir bilgim yok aklıma fikir de gelmiyor . Tek aklıma gelen zip dosyasının içeriğini binary olarak saklamak .

https://stackoverflow.com/questions/21736329/embed-file-in-a-executable Belki yardımcı olur

Exe dosyasının içerisine gömmek istediğiniz dosyanın byte verisini program içerisine byte dizisi olarak saklayabilir, sonra program çalıştığı zaman bu dosyayı dışarı aktarabilirsiniz.Ya da base64 olarak şifreleyip, dışarı aktaracağınız zaman bunu çözerek aktarabilirsiniz. Mesela aşağıdaki programı çalıştırırsanız size bir resim dosyası çıkaracaktır.

# coding:utf-8
# coderistan

import base64

image = """
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
"""

def cikart(kaynak):
    with open("resim.png","wb") as dosya:
        byte = base64.b64decode(kaynak)
        dosya.write(byte)

    print("Dosya başarılı bir şekilde çıkarıldı")



cikart(image)
3 Beğeni

Hocam ama zip dosyası 10 gb’a kadar çıkabiliyor. Buna karşın ne önerebilirsiniz? Aksi takdirde MemoryError verebilir.

Tam olarak ne yapmak istediğinizi yazarsanız, alternatif çözümlere bakabiliriz. 10 gb dosyayı program içerisine gömmek sıkıntılı olur, üstüne etik olmaz.

Mesela burada da, böyle birşey yapmamanızı öneriyorlar. Bunun yerine MSI oluşturmanızı öneriyorlar.

2 Beğeni

ZIP değil de tar, gz, xz, 7z, vb. biçimler kullanın. Bunlar hem daha iyi sıkıştırır hem de boyut kısıtı yok bildiğim kadarıyla. Tabii bazı dosyalar (mesela sıkıştırılmış resimler) ne yaparsanız yapın daha fazla sıkışmaz. Bir de şunu söyleyeyim: Yukarıda bahsettiğim biçimler birlikte de kullanılabilir, böylece daha iyi sıkıştırma sağlanır.

1 Beğeni

Projemden bahsedeyim.

Bu proje portable programlar ile alakalı. Portable programlar nereye taşınırlarsa taşınsınlar her yerde çalışırlar. Benim amacım ise, kullanıcıdan programın klasörünü alıp içinden bir executable seçmesini isteyerek klasörü sıkıştırıyorum, bir .exe dosyasına görmüyorum. Exe dosyası çalıştığında ise sıkıştırılmış dosyayı çıkartıp içinden executable olarak seçtiği dosyayı çalıştırıyor, kapanınca da siliyor. Bu yüzden program 40 GB bile olabilir.

Sonuç olarak; çalışması için bir çok dosya gereken programların o dosyalarını tek dosya haline getirerek basit ve pratik bir şekilde kolayca taşınabilir hale gelmesini sağlayacak bir proje üzerinde çalışıyorum.

İşte o yüzden Python programının .exe oluşturabilmesi gerekiyor:

Portable olacaksa neden bir sıkıştırma yöntemi kullanmıyorsunuz da, onun yerine exe kullanıyorsunuz? Bunun yerine her platform için ayrılmış sıkıştırılmış dosyaları kullanıcıya dağıtabilirsiniz. Kullanıcı her zaman bilgili olmayabilir çünkü, sizin herşeyi halletmeniz gerekir.

Tam anlayamadım, şunu detaylıca anlatabilir misiniz size zahmet hocam?