"Biner terkompresi UPX ini berisi header Mach-O yang tidak valid dan tidak dapat dimuat."

10

Saya mencoba meluncurkan aplikasi yang lebih lama di macOS Sierra. Ini berfungsi dengan baik di El Capitan, namun karena pembaruan ke Sierra langsung macet saat diluncurkan dengan kesalahan ...

Biner terkompresi UPX ini berisi header Mach-O yang tidak valid dan tidak dapat dimuat.

Menggunakan Homebrew di El Capitan, saya menginstal UPX dan menggunakannya untuk mencoba mengompresi biner, namun ini memberitahu saya bahwa biner tidak dikompresi di tempat pertama.

$ 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.

Ini adalah log mogok dari membuka aplikasi di Sierra.

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

Bagaimana saya bisa membuka aplikasi ini di Sierra?

GRG
sumber
1
Saya memiliki masalah yang sama.
ɹoƃı
2
Bagian yang disayangkan tentang pemikiran Apple di sini adalah mengasumsikan semua orang menggunakan UPX dengan cara standar. Karena UPX adalah proyek open source, maka dapat dimodifikasi dengan cara tertentu yang sesuai dengan pengembang. Pernah ada aplikasi yang diizinkan didistribusikan di luar Mac App Store. Menetapkan pembatasan pada hal tersebut adalah naif dan terlalu banyak menjangkau, namun, menjadi jelas gagasan yang tampaknya mengikis pembaruan setelah pembaruan.
l'L'l
Solusi
GRG

Jawaban:

9

Jawaban yang direvisi:

Untuk menyembunyikan jejak, bajak laut memusatkan penanda UPX dari biner yang dikompresi, jadi macOS Sierra tidak dapat mendekompresi biner. (Coba dengan: hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPXdan lihat, kemungkinan besar tidak ada output.)

Namun, jreiser dari UPX menerima tantangan dan mengatasi masalah ini dengan mengimplementasikan pencarian yang lebih kuat untuk kode terkompresi. v3.92 akan memungkinkan aplikasi ini berjalan lagi saat mendekompresi executable upx -d YourApp.app/Contents/MacOS/YourApp.

RyuX51
sumber
Ini adalah sesuatu yang Apple harus perbaiki sebenarnya, karena mereka jelas memecahkan apa yang berhasil tanpa alasan.
l'L'l
Seseorang mencampuri biner (dengan konten yang kemungkinan besar dipertanyakan) setelah mengompresnya sehingga tidak mulai lagi di Sierra dan Apple harus memperbaikinya? Ya, benar sekali ... tolong beri tahu mereka. :)
RyuX51
Hei, campur tangan adalah dasar komputasi ... tanpa campur tangan apa yang kita punya? : p
l'L'l
Merasa ikut campur dengan segalanya. Tetapi Anda tidak bisa begitu saja menyalahkan segala sesuatu pada Apple (meskipun dari waktu ke waktu benar-benar menjadi sangat menarik untuk melakukannya).
RyuX51
Ya itu poin yang bagus, dan saya mengerti apa yang Anda katakan, bagaimanapun, apa alasan di balik perilaku membatasi yang sekarang mungkin ditanyakan. Sangat tidak mungkin mereka telah mencapai banyak hal dalam proses ini selain menghabiskan banyak waktu semua orang (termasuk waktu mereka sendiri dengan biaya tertentu).
l'L'l
4

3.92-BETA revisi 3 berfungsi di Sierra dan berfungsi untuk i386!

https://www.dropbox.com/s/x765t3i42p7hr8b/upx.out?dl=0 sekarang juga berfungsi untuk I386.

jreiser di github.com/upx # 4 komentar

3.92 mendukung pemadatan binari di Sierra sehingga dapat dijalankan di Sierra, dan juga mendukung binari yang dikompres di Sierra. 3.92-BETA juga mendukung binari dekompresi yang telah dimodifikasi setelah kompresi seperti dengan tanda tangan kode.

Mengekompresi biner aplikasi menggunakan -dopsi ini sangat bagus!

$ 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.
GRG
sumber
Re: "Jalankan di biner aplikasi dan berhasil!", Apakah ini termasuk binari penuh paket - seperti apakah binari penuh paket diluncurkan sekarang atau apakah kita harus membongkar semua yang kita harapkan berjalan?
l'L'l
@ l'L'l Saya tidak sepenuhnya yakin apa yang Anda maksud - binari yang dikompresi dengan upx sebelum 3,92 perlu didekompresi dengan -d pathsekali menggunakan 3,92-BETAr3 atau lebih baru sehingga mereka dapat dijalankan.
GRG
Yang saya minta adalah Anda dapat meluncurkan biner terkompresi seperti yang sekarang menggunakan beta terbaru yang Anda sebutkan.
l'L'l
@ l'L'l Maaf, saya tidak benar-benar mengikuti, saya pikir jawaban untuk pertanyaan Anda adalah: Ya tetapi Anda harus mendekompres mereka terlebih dahulu. Setelah didekompresi menggunakan versi baru UPX ini, mereka dapat dijalankan, atau dikompres lagi menggunakan versi baru ini dan masih berjalan saat dikompresi.
GRG
Ya, itulah yang saya tanyakan, meskipun ketika mencoba menjalankan sesuatu yang dikemas (dengan BETA terbaru) aplikasi macet (10.11.6). Saya tidak yakin apakah Anda sudah mencoba mengemas sesuatu dan menjalankannya, tetapi sepertinya masih ada beberapa masalah di sana.
l'L'l
4
brew install upx

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

bekerja untukku.

Pelet
sumber
1

Saya tidak mengenali kode Anda khususnya meskipun ini adalah masalah umum dengan rilis OS baru (kompatibilitas perangkat lunak lama).

  • Langkah pertama, lihat situs web pengembang untuk indikasi mereka akan menambal untuk Sierra. Mereka mungkin telah memasang tambalan beta yang belum tersedia melalui Pembaruan Perangkat Lunak.

  • Kirim Dev email dan tanyakan langsung kepada mereka. Mungkin perlu waktu bagi mereka untuk mengejar ketinggalan, terutama jika mereka memiliki banyak aplikasi pada banyak platform.

  • Pertimbangkan memiliki dual boot Mac. Saya biasanya menyimpan klon dari sistem saya saat ini di drive lain (atau partisi) setelah instalasi OS baru, maka saya dapat dengan cepat mem-boot ulang dan terus menggunakan perangkat lunak. Saya benar-benar menjaga Mac lama ini berjalan 10.6 dan 10.8 hanya untuk dukungan ini.

  • Pertimbangkan mesin virtual. Anda dapat menggunakan emulator di OSX dan menginstal versi OS yang Anda inginkan (termasuk Windows). Namun tidak yakin apakah emulator dirilis untuk Sierra.

Applefanboy
sumber
1

Masalah ini telah dilaporkan sebagai cara UPX, cara rusak oleh Darwin 16 / OS X Sierra. # 4 .

Sepertinya upx 3.92 akan mengatasi masalah ini.

ɹoƃı
sumber
1
Kemungkinan besar tidak, karena executable kemungkinan besar tidak dikemas oleh UPX.
RyuX51
Tetapi pesan kesalahan menunjukkan demikian. Ada juga hal-hal dengan sertifikat dll yang juga menghalangi dekompresi.
ɹoƃı
2
Memang, tetapi jelas salah. Jalankan hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPX dan lihat sendiri. Adapun sertifikat: Baca tautan Anda secara menyeluruh dan Anda akan melihat bahwa tidak ada bedanya jika biner ditandatangani atau tidak saat didekompresi.
RyuX51