"Цей стислий двійковий файл 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.