"Цей стислий двійковий файл UPX містить недійсний заголовок Mach-O і не може бути завантажений."


10

Я намагаюся запустити старіший додаток у macOS Sierra. Він працював чудово в Ель-Капітані, однак після оновлення до Сьєрри він виходить з ладу відразу після запуску з помилкою ...

Цей стислий двійковий файл UPX містить недійсний заголовок Mach-O і не може бути завантажений.

Використовуючи Homebrew в El Capitan, я встановив UPX і використовував його, щоб спробувати розпаковувати бінарне, однак це говорить мені про те, що двійковий файл не стискається в першу чергу.

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

Це журнал аварій після відкриття програми в Сьєррі.

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

Як я можу змусити цей додаток відкриватися в Сьєррі?


1
У мене це саме питання.
ƃoƃı

2
Прикрою частиною мислення Apple є припущення, що всі використовують UPX у стандартизованому вигляді. Оскільки UPX - проект з відкритим кодом, його можна модифікувати, зокрема, таким чином, щоб він відповідав розробникам. Колись існувало таке поняття, як дозволено розповсюджувати програми поза межами магазину додатків Mac. Встановлення обмежень на таке є наївним та надмірним, однак, стає очевидною думка про те, що, здавалося б, розмиває оновлення після оновлення.
l'L'l

Відповіді:


9

Переглянута відповідь:

Для приховування слідів пірати нулювали маркери UPX із стисненого бінарного файлу, тому для macOS Sierra декомпресія бінарного файлу неможлива. (Спробуйте: hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPXі переконайтеся, що, швидше за все, немає результату.)

Однак jreiser з UPX прийняв виклик і вирішив це питання, застосовуючи більш надійний пошук стисненого коду. v3.92 можна буде змусити ці додатки запустити знову при розпакуванні виконуваних файлів upx -d YourApp.app/Contents/MacOS/YourApp.


Це те, що Apple має виправити насправді, оскільки вони, очевидно, порушили те, що працювало, мабуть, без причин.
l'L'l

Хтось втрутився у бінарний файл (з найімовірнішим сумнівним вмістом) після його стискання, щоб він більше не запускався на Сьєррі, і Apple має це виправити? Ну так, абсолютно вірно ... скажіть, будь ласка. :)
RyuX51

Гей, втручання - це основа обчислень ... не втручаючись, що ми маємо? : p
l'L'l

Не соромтеся втручатися у все. Але ви не можете просто звинувачувати все в Apple (хоча час від часу це дійсно DID стає дуже привабливим).
RyuX51

Так, це чудовий момент, і я розумію, що ви говорите, однак, що міркує про обмежувальну поведінку, яку зараз можна запитати. Навряд чи вони багато чого досягли, крім того, щоб витрачати багато часу кожному (включаючи власний за певні кошти).
l'L'l

4

3.92-БЕТА версія 3 працює у Сьєррі та працює для i386!

https://www.dropbox.com/s/x765t3i42p7hr8b/upx.out?dl=0 зараз працює і для I386.

jreiser на коментарі github.com/upx # 4

3.92 підтримує стиснення бінарних файлів у Сьєррі, таким чином, що вони можуть бути запущені в Сьєррі, а також підтримує розпакування двійкових файлів у Сьєррі. 3.92-BETA також підтримує розпаковування бінарних файлів, які були змінені після стиснення, наприклад, з підписом коду.

Декомпресія двійкового додатка за допомогою -dпараметра чудово працює!

$ 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: "Перемістіть його на додаток бінарний, і він працював!", Чи включає це упаковані двійкові файли - як у запущених бінарних файлах запуску зараз, чи нам потрібно розпакувати все, що ми очікуємо запустити?
l'L'l

@ l'L'l Я не зовсім впевнений, що ви маєте на увазі - бінарні файли, стиснуті upx до 3,92, потребують декомпресії з -d pathвикористанням одного разу 3,92-BETAr3 або пізніше, щоб їх можна було запустити.
гр

Що я запитую, чи можна запустити стислий двійковий файл, використовуючи останню бета-версію, яку ви згадали.
l'L'l

@ l'L'l Вибачте, я точно не слідую, я думаю, що відповідь на ваше запитання: Так, але ви повинні спершу розпакувати їх. Після декомпресії за допомогою цієї нової версії UPX вони можуть бути запущені або стиснуті знову, використовуючи цю нову версію, і все ще запускатись при стисненні.
гр

Так, про це я питав, хоча при спробі запуску чогось упакованого (з останнім BETA) додаток вийшов з ладу (10.11.6). Я не впевнений, чи спробували ви щось упакувати і запустити, але, здається, все ще є проблема.
l'L'l


1

Я особливо не розпізнаю ваш код, хоча це проблема, яка часто виникає з новим випуском ОС (сумісність із застарілим програмним забезпеченням).

  • Перший крок, перегляньте веб-сайт розробників, щоб вказати, що вони будуть виправлені для Sierra. Можливо, вони вже розмістили бета-патч, який недоступний через оновлення програмного забезпечення.

  • Відправте розробнику електронний лист із запитом безпосередньо. Це може зайняти певний час, особливо якщо вони мають кілька додатків на декількох платформах.

  • Подумайте про наявність подвійного завантажувального Mac. Я зазвичай зберігаю клон моєї поточної системи на іншому диску (або розділі) після нової установки ОС, тоді я можу швидко перезавантажитись і продовжувати використовувати програмне забезпечення. Я фактично зберігаю спадщину Mac у ці дні з 10.6 та 10.8 саме для цієї підтримки.

  • Розглянемо віртуальну машину. Ви можете використовувати емулятор на OSX та встановити бажану версію ОС (включаючи Windows). Не впевнений, чи не випущено емуляторів для Sierra.


1

Про проблему повідомлялося, що UPX є способом, розбитий Darwin 16 / OS X Sierra. №4 .

Виглядає, що upx 3,92 вирішить це питання.


1
Це, швидше за все, не буде, тому що виконуваний файл, швидше за все, не упакований UPX.
RyuX51

Але повідомлення про помилку вказує так. Існує також річ із сертифікатами тощо, що також перешкоджає декомпресії.
ƃoƃı

2
Так, але це, очевидно, неправильно. Запустіть hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPX і переконайтеся самі. Що стосується сертифікатів: уважно прочитайте своє посилання, і ви побачите, що це не має значення, якщо двійковий файл підписаний чи ні під час розпакування.
RyuX51
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.