«Этот сжатый двоичный файл UPX содержит недопустимый заголовок Mach-O и не может быть загружен».

10

Я пытаюсь запустить старое приложение в macOS Sierra. В El Capitan все работало нормально, однако после обновления до 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.

Это журнал сбоев при открытии приложения в 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

Как я могу получить это приложение, чтобы открыть в Сьерре?

Grg
источник
1
У меня та же проблема.
ɹoƃı
2
Неудачная часть мышления Apple здесь предполагает, что все используют UPX стандартизированным способом. Поскольку UPX - это проект с открытым исходным кодом, его можно модифицировать особым образом в соответствии с требованиями разработчика. Когда-то была такая вещь, как приложения, разрешенные для распространения за пределами Mac App Store. Установка таких ограничений наивна и чрезмерна, однако становится очевидной идея, которая, по-видимому, размывает обновление за обновлением.
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.

RyuX51
источник
Это то, что Apple должна исправить на самом деле, так как они явно сломали то, что работало без видимой причины.
l'l'l
Кто-то вмешался в двоичный файл (скорее всего, с сомнительным содержанием) после его сжатия, чтобы он больше не запускался в Sierra, и Apple должна это исправить? Ну да, абсолютно верно ... пожалуйста, скажи им. :)
RyuX51
Эй, вмешательство - это основа вычислений ... без вмешательства, что мы получили? : p
l'l'l
Не стесняйтесь вмешиваться во все. Но вы не можете просто винить во всем Apple (хотя время от времени это действительно становилось очень привлекательным).
RyuX51 22.09.16
Да, это замечательный момент, и я понимаю, что вы говорите, однако, в чем причина такого ограничительного поведения, которое можно спросить. Крайне маловероятно, что они достигли многого в этом процессе, кроме того, что потратили много времени у всех (включая свое собственное за определенную плату).
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 поддерживает сжатие двоичных файлов в Sierra таким образом, чтобы их можно было запускать в Sierra, а также поддерживает распаковку двоичных файлов в Sierra. 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.
Grg
источник
Re: «Запустил его в двоичном файле приложения, и оно сработало!», Включает ли оно упакованные двоичные файлы - как в запусках упакованных двоичных файлов сейчас, или нам нужно распаковать все, что мы ожидаем запустить?
L'L'л
@ l'L'l Я не совсем уверен, что вы имеете в виду - двоичные файлы, сжатые с помощью upx до 3.92, необходимо распаковать с -d pathпомощью одного раза, используя 3.92-BETAr3 или более позднюю версию, чтобы их можно было запустить.
grg
Я спрашиваю, можете ли вы запустить сжатый бинарный файл с использованием последней бета-версии, о которой вы упомянули.
L'L'л
@ l'L'l Извините, я не совсем понимаю, я думаю, что ответ на ваш вопрос: да, но вы должны сначала распаковать их. После распаковки с использованием этой новой версии UPX они могут быть запущены или снова сжаты с использованием этой новой версии и по-прежнему работать во время сжатия.
grg
Да, это то, что я спрашивал, хотя при попытке запустить что-то упакованное (с последней бета-версией) приложение зависало (10.11.6). Я не уверен, что вы пытались что-то упаковать и запустить, но, похоже, проблема еще есть.
L'L'л
4
brew install upx

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

работал на меня.

гранула
источник
1

В частности, я не узнаю ваш код, хотя это является распространенной проблемой в новой версии ОС (совместимость с устаревшим программным обеспечением).

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

  • Отправьте разработчику электронное письмо с просьбой напрямую. Это может занять некоторое время, особенно если у них есть несколько приложений на разных платформах.

  • Рассмотрите возможность использования Mac с двойной загрузкой. Я обычно сохраняю клон моей текущей системы на другом диске (или разделе) после установки новой ОС, затем я могу быстро перезагрузиться и продолжить использовать программное обеспечение. Я на самом деле держу устаревший Mac с 10.6 и 10.8 только для этой поддержки.

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

Applefanboy
источник
1

Сообщалось, что проблема заключается в том, что UPX - это путь, который сломал Darwin 16 / OS X Sierra. # 4 .

Похоже, что upx 3.92 решит эту проблему.

ɹoƃı
источник
1
Скорее всего, нет, потому что исполняемый файл, скорее всего, не упакован UPX.
RyuX51
Но сообщение об ошибке указывает на это. Есть также вещь с сертификатами и т. Д., Которая также мешает декомпрессии.
ɹoƃı
2
Да, но это, очевидно, неправильно. Запустите hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPX и убедитесь сами. Что касается сертификатов: внимательно прочитайте вашу ссылку, и вы увидите, что не имеет значения, подписан бинарный файл или нет при распаковке.
RyuX51