Yürütülebilir sıkıştırma - Executable compression

Çalıştırılabilir sıkıştırma herhangi bir yolla bir sıkıştırarak bir yürütülebilir dosya ve bir tek yürütülebilir açma kodu ile veri sıkıştırılmış bir araya getirilmesi. Bu sıkıştırılmış yürütülebilir dosya yürütüldüğünde, açma kodu, çalıştırmadan önce sıkıştırılmış koddan orijinal kodu yeniden oluşturur. Çoğu durumda bu şeffaf bir şekilde gerçekleşir, böylece sıkıştırılmış yürütülebilir dosya orijinaliyle tamamen aynı şekilde kullanılabilir. Yürütülebilir sıkıştırıcılara genellikle "çalışma zamanı paketleyicileri", "yazılım paketleyicileri", "yazılım koruyucuları" (veya hatta " polimorfik paketleyiciler " ve " gizleyici araçlar ") denir .

Sıkıştırılmış bir yürütülebilir dosya, sıkıştırılmış bir yürütülebilir dosyanın ilgili açma koduyla birlikte yürütülebilir bir dosyada paketlendiği kendi kendine açılan bir arşiv olarak kabul edilebilir . Bazı sıkıştırılmış yürütülebilir dosyalar, orijinal program dosyasını doğrudan yürütülmeden yeniden oluşturmak için sıkıştırılabilir. Bunu yapmak için kullanılabilecek iki program CUP386 ve UNP'dir.

Sıkıştırılmış yürütülebilir dosyaların çoğu, bellekteki orijinal kodu açar ve çoğunun çalışması için biraz daha fazla bellek gerekir (çünkü açma kodunu, sıkıştırılmış verileri ve sıkıştırılmış kodu açmaları gerekir). Ayrıca, bazı sıkıştırılmış yürütülebilir dosyaların, sıkıştırılmış yürütülebilir dosyayı çalıştırmadan önce dosya sistemine yazanlar gibi ek gereksinimleri vardır.

Yürütülebilir sıkıştırma, ikili yürütülebilir dosyalarla sınırlı değildir, JavaScript gibi komut dosyalarına da uygulanabilir . Çoğu komut dosyası dili, yüksek yedekliliğe sahip insan tarafından okunabilir kod üzerinde çalışmak üzere tasarlandığından , sıkıştırma çok etkili olabilir ve değişkenleri ve işlevleri tanımlamak için kullanılan uzun adları daha kısa sürümlerle değiştirmek ve/veya boşlukları kaldırmak kadar basit olabilir .

Avantajlar ve dezavantajlar

Yazılım dağıtıcıları, öncelikle yazılımlarının ikincil depolama gereksinimlerini azaltmak için çeşitli nedenlerle yürütülebilir sıkıştırma kullanır ; Yürütülebilir sıkıştırıcılar, yürütülebilir kodu sıkıştırmak için özel olarak tasarlandığından, genellikle gzip , zip veya bzip2 gibi standart veri sıkıştırma tesislerinden daha iyi sıkıştırma oranı elde ederler . Bu, yazılım dağıtıcılarının seçtikleri dağıtım ortamının ( CD-ROM , DVD-ROM veya Disket gibi) kısıtlamaları dahilinde kalmasına veya müşterilerin İnternet üzerinden dağıtılan yazılımlara erişmek için ihtiyaç duyduğu süreyi ve bant genişliğini azaltmalarına olanak tanır .

Çalıştırılabilir sıkıştırma de sık caydırmak için kullanılan ters mühendislik veya çalıştırılabilir içeriğini görünmez kılmak için (örneğin, mevcudiyetinin gizlenmesi için kötü amaçlı gelen antivirüs tarayıcıları ) sıkıştırma ve / veya ilave tescilli yöntemlerle şifreleme . Yürütülebilir sıkıştırma, doğrudan demontajı önlemek , dize değişmezlerini maskelemek ve imzaları değiştirmek için kullanılabilir . Bu, tersine mühendislik olasılığını ortadan kaldırmasa da, süreci daha maliyetli hale getirebilir.

Sıkıştırılmış bir yürütülebilir dosya, dosya sisteminde daha az depolama alanı gerektirir, bu nedenle dosya sisteminden belleğe veri aktarımı için daha az zaman gerekir. Öte yandan, yürütme başlamadan önce verilerin sıkıştırmasını açmak biraz zaman alır. Ancak, çeşitli depolama ortamlarının hızı ortalama işlemci hızlarına ayak uyduramadı, bu nedenle depolama genellikle darboğaz oluyor. Böylece sıkıştırılmış yürütülebilir dosya çoğu yaygın sistemde daha hızlı yüklenir. Modern masaüstü bilgisayarlarda, yürütülebilir dosya alışılmadık derecede büyük olmadığı sürece bu nadiren fark edilir, bu nedenle yükleme hızı, yürütülebilir bir dosyayı sıkıştırmanın veya sıkıştırmaya karşı birincil neden değildir.

Diskten talep üzerine yürütülebilir görüntüleri okuyan işletim sistemlerinde (bkz. sanal bellek ), sıkıştırılmış yürütülebilir dosyalar bu işlemi daha az verimli hale getirir. Açıcı saplaması, sıkıştırılmış verileri tutmak için bir bellek bloğu ayırır; bu, çalıştırılabilir dosya yüklü kaldığı sürece, kullanılmış olsun ya da olmasın, ayrılmış olarak kalır ve diğer uygulamalarla bellek kaynakları için rekabet eder. İşletim sistemi bir takas dosyası kullanıyorsa, kullanılmayan veri bloklarını atmak ve gerekirse yürütülebilir görüntüden yeniden yüklemek yerine belleği boşaltmak için sıkıştırılmış verinin bu dosyaya yazılması gerekir. Bu genellikle fark edilmez, ancak bir yürütülebilir dosya aynı anda birden fazla yüklendiğinde bir sorun haline gelir—işletim sistemi önceden yüklemiş olduğu veri bloklarını yeniden kullanamaz, verilerin yeni bir bellek bloğuna açılması gerekir ve kullanılmadığı takdirde bağımsız olarak değiştirilebilir. Ek depolama ve zaman gereksinimleri, tipik olarak aynı anda birden fazla kez çalıştırılan yürütülebilir dosyaların sıkıştırılıp sıkıştırılmayacağının dikkatlice tartılması gerektiği anlamına gelir.

Diğer bir dezavantaj, yalnızca statik olarak bağlantılı çıkarıcı saplaması görünür olduğundan, bazı yardımcı programların artık çalışma zamanı kitaplığı bağımlılıklarını tanımlayamamasıdır .

Ayrıca, bazı eski virüs tarayıcıları , sıkıştırılmış tüm yürütülebilir dosyaları virüs olarak bildirir, çünkü dekompresör saplamaları bunlarla bazı özellikleri paylaşır. Çoğu modern virüs tarayıcısı, içindeki gerçek yürütülebilir dosyayı kontrol etmek için birkaç farklı yürütülebilir sıkıştırma katmanını açabilir, ancak bazı popüler virüsten koruma ve kötü amaçlı yazılımdan koruma tarayıcıları, sıkıştırılmış yürütülebilir dosyalar üzerinde yanlış pozitif alarmlarla ilgili sorunlar yaşadı. Sorununu çözmek için bir girişimde zararlı yazılım yardımı ile karartılmış çalışma zamanı paketleyicilerinde IEEE Sanayi Bağlantıları Güvenlik Grubu bir tanıttı yazılım taggant sistemi.

Yürütülebilir sıkıştırma, bilgisayarların hem yavaş hem de düşük kapasiteli ortamlar olan disketlerin ve küçük sabit sürücülerin depolama kapasitesiyle sınırlı olduğu zamanlarda daha popülerdi ; kullanıcının yazılımı her kullanmak istediğinde bir arşiv dosyasını manuel olarak açma zorunluluğu olmadan bilgisayarın aynı miktarda alanda daha fazla yazılım depolamasına izin verdi. Ancak, bilgisayarlarda artan depolama kapasitesi nedeniyle yürütülebilir sıkıştırma daha az popüler hale geldi. Bazı yarışmalara girmek için demoların 64 kilobayt gibi bir boyut sınırı içinde kalması gereken demoscene'de kullanımı vardır . Yalnızca yükleme süresini artıran çok gelişmiş sıkıştırma biçimleri, yürütülebilir bir dosyayı bu yarışmalara girecek kadar küçük tutar.

Yürütülebilir paketleyicilerin listesi

CP/M ve MSX-DOS yürütülebilir dosyası

CP/M / MSX-DOS .COM dosyaları için bilinen yürütülebilir sıkıştırıcılar :

  • PMexe (1990'dan beri Yoshihiko Mino tarafından yazılmıştır, PMARC.COM+PMEXE.CPM)

DOS yürütülebilir

DOS yürütülebilir dosyaları için bilinen yürütülebilir sıkıştırıcılar ( .COM veya .EXE ):

  • Realia Spacemaker (1982'den beri, Robert BK Dewar , SM.COM, "MEMORY$" imzası tarafından yazılmıştır )
  • Microsoft EXEPACK (1985'ten beri, Reuben Borman , EXEPACK.EXE, LINK.EXE /E[XEPACK], imza "RB" tarafından yazılmıştır )
  • LZEXE (1989'dan beri Fabrice Bellard , LZEXE.EXE tarafından yazılmıştır )
  • PKWare PKLite (1990'dan beri Phil Katz , PKLITE.EXE tarafından yazılmıştır )
  • DİYET (1991'den beri, Teddy Matsumoto , DIET.EXE tarafından yazılmıştır )
  • TINYPROG (TINYPROG.EXE)
  • RJS Software RJCRUSH (1994'ten beri, Roland Skinner, RJCRUSH.EXE tarafından yazılmıştır)
  • XPA (1995'ten beri, JauMing Tseng, XPA.EXE tarafından yazılmıştır)
  • Ibsen Yazılımı aPACK (1997'den beri, Jørgen Ibsen, APACK.EXE tarafından yazılmıştır)
  • UPX (1998'den beri, Markus FXJ Oberhumer ve László Molnár tarafından yazılmıştır)
  • 32LiTE (1998'den beri, Oleg Prokhorov tarafından yazılmıştır, 32LITE.EXE)
  • Bilgi Dinamiği LZW Kompresörü
  • WWpack (Piotr Warezak ve Rafal Wierzbicki, WWPACK.EXE tarafından yazılmıştır)
  • 624 (yalnızca 25 KB'den küçük .COM dosyaları için, LZW kullanır )
  • AINEXE
  • AvPack
  • ComPack
  • HASP Zarfı
  • LGLZ
  • PMWLITE
  • ProPack
  • UCEXE
  • WDOSX
  • XE
  • XPack

OS/2 yürütülebilir

OS/2 kapsamında bilinen yürütülebilir kompresörler :

  • NeLite
  • LxLite

Yeni Yürütülebilir Dosya

Yeni Yürütülebilir Dosyalar için bilinen yürütülebilir kompresörler :

  • PaketWin
  • PKWare PKLite (sürüm 2.01'den itibaren)
  • WinLite

Taşınabilir Yürütülebilir Dosya

Taşınabilir Yürütülebilir Dosyalar için bilinen yürütülebilir kompresörler :

Not: Mor renkli istemciler artık geliştirme aşamasında değildir.

İsim En son kararlı Yazılım lisansı x86-64 desteği
32Lit
uzaylı 1.4 (17 Ağustos 2020 )  ( 2020-08-17 ) tescilli Numara
VEpakk2
Armadillo 9.62 (7 Haziran 2013 )  ( 2013-06-07 ) tescilli Evet
ASPack 2.40 (7 Aralık 2018 )  ( 2018-12-07 ) tescilli Evet
ASPR (ASProtect) 2,78 (7 Aralık 2018 )  ( 2018-12-07 ) tescilli Evet
BeRoEXEPacker
BIN-crypter
Kutulu Uygulama Paketleyici 3.3 (26 Temmuz 2015 )  ( 2015-07-26 ) tescilli Evet
CExe 1.0b (20 Temmuz 2001 )  ( 2001-07-20 ) GPL Numara
kıvırcık 2.2 (15 Haziran 2019 )  ( 2019-06-15 ) ücretsiz Evet
noktaBundle 1.3 (4 Nisan 2013 )  ( 2013-04-04 ) tescilli Evet
Enigma Koruyucu 6.60 (21 Ağustos 2019 )  ( 2019-08-21 ) tescilli Evet
Enigma Sanal Kutusu 9.40 (10 Ekim 2019 )  ( 2019-10-10 ) tescilli Evet
exe32 paketi
EXE Paketi 3.11 (7 Ocak 2011 )  ( 2011-01-07 ) tescilli ?
EXECryptor
EXE Gizliliği 4.14 (29 Haziran 2011 )  ( 2011-06-29 ) tescilli ?
eXpressor 1.8.0.1 (14 Ocak 2010 )  ( 2010-01-14 ) tescilli ?
FSG 2.0 (24 Mayıs 2004 )  ( 2004-05-24 ) ücretsiz Numara
kkrunchy src 0.23a4 (Bilinmiyor) Kamu malı Numara
KAFESE KOYMAK 1.1 (Bilinmeyen) ücretsiz Numara
MPRESS 2.19 (2 Ocak 2012 )  ( 2012-01-02 ) ücretsiz Evet
MuCruncher
NeoLite
.netshrink 2.7 (2 Temmuz 2016 )  ( 2016-07-02 ) tescilli Evet
NsPack
obsidyum 1.6 (11 Nisan 2017 )  ( 2017-04-11 ) tescilli Evet
PEKompakt
PELlock 2.06 (15 Ağustos 2016 )  ( 2016-08-15 ) tescilli Numara
PE Paketi
PESpin 1.33 (3 Mayıs 2011 )  ( 2011-05-03 ) ücretsiz Evet
minyon 2.4 (22 Eylül 2016 )  ( 2016-09-22 ) ücretsiz Numara
PKLite32
RLPack Temel 1.21 (31 Ekim 2008 )  ( 2008-10-31 ) GPL Numara
Shrinker32
Akıllı Paketleyici Pro X 2.0.0.1 (3 Haziran 2019 )  ( 2019-06-03 ) tescilli Evet
Themida/WinLicense 3.0 (24 Ekim 2019 )  ( 2019-10-24 ) tescilli Evet
Upack
UPX 3,96 (23 Ocak 2020 )  ( 2020-01-23 ) GPL deneysel
VMProtect 3.4 (3 Ağustos 2019 )  ( 2019-08-03 ) tescilli Evet
WWPack32
XComp/XPack 0.98 (18 Şubat 2007 )  ( 2007-02-18 ) ücretsiz Numara
Yoda'nın Şifresi
YZPack

ELF dosyaları

ELF dosyaları için bilinen yürütülebilir sıkıştırıcılar :

  • gzexe (bir kabuk komut dosyası saplaması ve gzip kullanır , çoğu Unix benzeri sistemde çalışır)
  • HASP Zarfı
  • UPX
  • 624 (Linux/386 için)

CLI montaj dosyaları

CLI montaj dosyaları için bilinen yürütülebilir sıkıştırıcılar :

  • .NETZ
  • NsPack
  • bayan
  • HASP Zarfı
  • .netshrink
  • noktaBundle
  • Exepack.NET
  • DotProtect: .net ve mono için ticari koruyucu/paketleyici. Çevrimiçi doğrulamalar ve "endüstri standardı şifreleme" içerir.

Mac OS Classic uygulama dosyaları

Mac OS Classic uygulama dosyaları için bilinen yürütülebilir sıkıştırıcılar :

  • Uygulama Mengenesi
  • StuffIt InstallerMaker

Mach-O (Apple Mac OS X) dosyaları

Mach-O (Apple Mac OS X) dosyaları için bilinen yürütülebilir sıkıştırıcılar :

  • HASP Zarfı
  • UPX
  • VMProtect

Amiral 64 ve VIC 20

Commodore 64 ve VIC 20'deki yürütülebilir dosyalar için bilinen yürütülebilir kompresörler :

  • PuCrunch
  • Exomizer
  • ByteBoozer

Amiral Amiga

Commodore Amiga serisindeki yürütülebilir dosyalar için bilinen yürütülebilir kompresörler :

  • güç paketleyici
  • Titanik kırıcı
  • içeri fırlatıcı
  • TNM kırıcı
  • küçülen
  • PaketAteş

Java

Java için bilinen yürütülebilir sıkıştırıcılar :

JAR dosyaları:

SAVAŞ dosyaları:

  • HASP Zarfı

JavaScript komut dosyaları

JavaScript komut dosyalarına uygulanabilecek iki tür sıkıştırma vardır :

  • Komut dosyasındaki fazlalığı azaltın (yorumları, boşlukları kaldırarak ve değişken ve işlev adlarını kısaltarak). Bu, betiğin davranışını değiştirmez.
  • Orijinal komut dosyasını sıkıştırın ve açma kodunu ve sıkıştırılmış verileri içeren yeni bir komut dosyası oluşturun. Bu, ikili yürütülebilir sıkıştırmaya benzer.

Kendinden sıkıştırmalı kompresörler

Bunlar, orijinal komut dosyasını sıkıştırır ve bir açıcı ve sıkıştırılmış veri içeren yeni bir komut dosyası çıkarır.

  • JsSfx
  • paketle

Yedekliliği azaltan kompresörler

Bunlar boşlukları kaldırır, yorumları kaldırır ve değişken ve işlev adlarını kısaltır, ancak komut dosyasının davranışını değiştirmez.

  • paketleyici
  • YUI kompresörü
  • Shrinksafe
  • JSMin

Ayrıca bakınız

Referanslar