“Bu UPX sıkıştırılmış ikili geçersiz bir Mach-O başlığı içeriyor ve yüklenemiyor.”


9

MacOS Sierra'da eski bir uygulamayı başlatmaya çalışıyorum. El Capitan'da iyi çalıştı, ancak Sierra güncellemesinden bu yana hatayla başlatıldığında hemen çöküyor

Bu UPX sıkıştırılmış ikili geçersiz bir Mach-O başlığı içeriyor ve yüklenemiyor.

El Capitan'da Homebrew kullanarak, UPX'i kurdum ve onu ikiliyi açmayı denemek için kullandım, ancak bu bana ikiliin sıkıştırılmadığını söylüyor.

$ upx -d /tmp/Run.app/Contents/MacOS/Run
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2013
UPX 3.91        Markus Oberhumer, Laszlo Molnar & John Reiser   Sep 30th 2013

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
upx: /tmp/Run.app/Contents/MacOS/Run: NotPackedException: not packed by UPX

Unpacked 0 files.

Bu, uygulamanın Sierra'da açılmasından kaynaklanan kilitlenme günlüğü.

Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_CRASH (SIGKILL)
Exception Codes:       0x0000000000000000, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Termination Reason:    EXEC, [0xc] This UPX compressed binary contains an invalid Mach-O header and cannot be loaded.

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libsystem_kernel.dylib          0x00007fffcffeabb2 __posix_spawn + 10
1   libsystem_kernel.dylib          0x00007fffcffe5ef2 posix_spawn + 386
2   xpcproxy                        0x000000010dbb2d75 0x10dbb0000 + 11637
3   xpcproxy                        0x000000010dbb3992 0x10dbb0000 + 14738
4   libdyld.dylib                   0x00007fffcfebc255 start + 1

Bu uygulamanın Sierra'da açılmasını nasıl sağlayabilirim?


1
Bende de aynı sorun var.
ɹoƃı

2
Apple'ın buradaki düşüncesi hakkındaki talihsiz kısım, herkesin UPX'i standart bir şekilde kullandığını varsaymak. UPX açık kaynaklı bir proje olduğundan, geliştiricinin ihtiyaçlarına uygun şekilde değiştirilebilir. Bir zamanlar uygulamaların Mac App Store dışında dağıtılmasına izin verilen bir şey vardı. Bu tür kısıtlamalar koymak naif ve aşırı ulaşılabilir olmakla birlikte, güncellemeden sonra güncelleme görünüşte ortadan kalkıyor gibi görünüyor.
l'L'l

Yanıtlar:


7

Cevap cevap:

İzleri gizlemek için, korsanlar UPX işaretlerini sıkıştırılmış ikili sistemden sıfırladılar, bu nedenle macOS Sierra'nın ikili dosyayı açması mümkün değildir. (Şununla deneyin: hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPX ve bakın, büyük olasılıkla hiçbir çıktı yoktur.)

Bununla birlikte, UPX'ten jreiser bu sorunu kabul etti ve sıkıştırılmış kod için daha sağlam bir arama yaparak bu konuyu ele aldı. v3.92 bu uygulamaların çalıştırılabilir dosyaları açarken yeniden çalıştırılmasını sağlamak için mümkün olacak upx -d YourApp.app/Contents/MacOS/YourApp.

3.92 beta al İşte .


Bu, Apple'ın düzeltmesi gereken bir şeydi, çünkü açık bir şekilde sebepsiz yere çalıştığını açıkladı.
l'L'l

Birisi sıkıştırdıktan sonra bir ikili (büyük olasılıkla şüpheli içerikli) ile karışmış ve Sierra ve Apple'da artık başlamaması için düzeltmeli mi? Evet, kesinlikle doğru ... lütfen onlara söyleyin. :)
RyuX51

Hey, karışmak bilgisayarların temelidir ... karışmadan da elimizde ne var? : p
l'L'l

Her şeyle karışmaktan çekinmeyin. Ancak yalnızca Apple'daki her şeyi suçlayamazsınız (zaman zaman bunu yapmak çok çekici bir hale geldi olsa da).
RyuX51

Evet, bu harika bir nokta ve ne dediğinizi anlıyorum, ancak şu an için kısıtlayıcı davranışın arkasındaki neden ne olabilir? Bu süreçte, herkesin zamanını boşa harcamaktan başka bir şey yapmamış olma ihtimalleri çok düşük (kendi masrafları da dahil).
l'L'l

4

3.92-BETA revizyonu 3 Sierra'da çalışıyor ve i386 için çalışıyor!

https://www.dropbox.com/s/x765t3i42p7hr8b/upx.out?dl=0 şimdi de I386 için çalışıyor.

jreiser github.com/upx # 4 hakkında yorum

3.92 Sierra'da çalıştırılabilecekleri şekilde Sierra'daki ikili dosyaların sıkıştırılmasını desteklemektedir ve aynı zamanda Sierra'da dekompresyon yapan ikili dosyaları desteklemektedir. 3.92-BETA ayrıca bir kod imzası gibi sıkıştırma sonrasında değiştirilmiş açma dosyalarının sıkıştırılmasını da destekler.

Kullanarak uygulamanın ikili kodunu açma -d seçenek harika çalışıyor!

$ chmod +x upx.out 
$ ./upx.out -d /tmp/Run.app/Contents/MacOS/Run
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2016
UPX 3.92-BETA   Markus Oberhumer, Laszlo Molnar & John Reiser   Sep 22nd 2016

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
     57444 <-     24576   42.78%   macho/i386    Run

Unpacked 1 file.

Re: "Uygulama ikilisinde çalıştırıldı ve çalıştı!", Buna paketlenmiş ikili dosyalar da dahil mi - paketlenmiş ikili dosyalar şimdi başlatılıyor mu yoksa çalıştırmayı umduğumuz her şeyi açmak zorunda mıyız?
l'L'l

@ l'L'l Ne demek istediğinden tam olarak emin değilim - 3.92'den önce upx ile sıkıştırılmış ikililerin sıkıştırması gerekiyor -d path bir kez 3.92-BETAr3 veya daha yenisini kullanarak çalıştırılabilirler.
grg

İstediğim şu ki, bahsettiğiniz en son beta sürümünü kullanarak şu andan itibaren sıkıştırılmış bir ikili dosya başlatabilirsiniz.
l'L'l

@ l'L Üzgünüm, tam olarak takip etmiyorum, sorunuzun cevabı bence: Evet ama önce onları sıkıştırmanız gerekir. UPX'in bu yeni sürümünü kullanarak bir kez açıldığında, bu yeni sürümü kullanarak tekrar çalıştırılabilir veya sıkıştırılabilir ve sıkıştırılmış halde çalışabilir.
grg

Evet, sorduğum şey buydu, ancak paketlenmiş bir şeyi çalıştırmaya çalışırken (en son BETA ile) uygulama çöktü (10.11.6). Herhangi bir şeyi paketlemeye ve çalıştırmaya çalıştığınızdan emin değilim, ama hala orada bir sorun var gibi görünüyor.
l'L'l

3
brew install upx

upx -d YourApp.app/Contents/MacOS/YourApp

benim için çalıştı.


1
çok teşekkürler! bu benim için de işe yaradı.
Opossum

1

Özellikle yeni bir işletim sistemi sürümü (eski yazılım uyumluluğu) ile ortak bir sorun olmasına rağmen kodunuzu tanımıyorum.

  • İlk adım, geliştiricilerin web sitesine Sierra için yamaları olacak bir endikasyon için bakın. Yazılım Güncellemesi ile henüz mevcut olmayan bir beta yamasını yayınlamış olabilirler.

  • Dev'e doğrudan onları soran bir e-posta gönderin. Özellikle birden fazla platformda birden fazla uygulamaları varsa, onları yakalamak biraz zaman alabilir.

  • Bir çift önyükleme Mac sahip düşünün. Yeni bir işletim sistemi kurulumundan sonra genel olarak mevcut sistemimin bir kopyasını başka bir sürücüde (veya bölümde) tutuyorum, ardından yazılımı hızla yeniden başlatabilir ve kullanmaya devam edebilirim. Aslında bugünlerde sadece Mac için 10.6 ve 10.8 çalışan eski bir Mac tutuyorum.

  • Sanal bir makine düşünün. OSX'te bir emülatör kullanabilir ve tercih ettiğiniz işletim sistemi sürümünü yükleyebilirsiniz (Windows dahil). Yine de öykünücüler Sierra için serbest bırakıldığından emin değil.


1

Sorun olarak bildirildi UPX, Darwin 16 / OS X Sierra'nın yoludur 4. .

Benziyor upx 3.92 bu konuyu ele alacaktır.


1
Büyük olasılıkla, çünkü çalıştırılabilir dosya büyük olasılıkla UPX tarafından paketlenmemiş.
RyuX51

Ancak hata mesajı bunu gösterir. Sertifika vb. İle dekompresyon yoluna giren bir şey de vardır.
ɹoƃı

2
Olur, ama belli ki yanlıştır. Hexdump -C çalıştırın YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPX ve kendiniz görün. Sertifikalara gelince: Bağlantınızı baştan sona okuyun ve ikili sıkıştırmanın imzalanıp imzalanmaması durumunda hiçbir fark yaratmadığını göreceksiniz.
RyuX51
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.