“此UPX压缩二进制文件包含无效的Mach-O标头,无法加载。”


10

我正在尝试在macOS Sierra中启动一个较旧的应用程序。它在El Capitan上运行良好,但是自从对Sierra进行更新以来,它在启动时立即崩溃并显示错误信息…

此UPX压缩二进制文件包含无效的Mach-O标头,无法加载。

在El Capitan中使用Homebrew,我安装了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

我如何才能在Sierra中打开此应用程序?


1
我有同样的问题。
ɹoƃı

2
关于Apple想法的不幸部分是假设每个人都以标准化方式使用UPX。由于UPX是一个开放源代码项目,因此可以通过特殊方式对其进行修改以适合开发人员的需求。曾经有过这样的事情,即允许将应用程序分发到Mac App Store之外。对这样的限制设置是幼稚的和过度的,但是,这种想法似乎正在逐渐消失,逐渐被更新所取代。
l'l'l

Answers:


9

修改后的答案:

为了隐藏痕迹,海盗将UPX标记从压缩的二进制文件中清零,因此macOS Sierra无法解压缩二进制文件。(尝试:hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPX查看,很可能没有输出。)

但是,UPX的jreiser接受了挑战,并通过实施更强大的压缩代码搜索来解决此问题。使用来解压缩可执行文件时,v3.92可以使这些应用再次运行upx -d YourApp.app/Contents/MacOS/YourApp


苹果实际上应该修复此问题,因为它们显然无缘无故地破坏了工作。
l'l'l

有人在压缩后干预了二进制文件(其内容很可能是可疑的),这样它就不能在Sierra上启动了,Apple应该修复它吗?是的,绝对正确...请告诉他们。:)
RyuX51 '16

嘿,干预是计算的基础...而无需干预我们得到了什么?:p
l'L'l

随意混入一切。但是您不能将所有事情都归咎于苹果公司(尽管有时这样做确实很吸引人)。
RyuX51 2016年

是的,这很重要,我理解您的意思,但是,人们现在可能会问这种限制性行为背后的原因是什么。除了浪费每个人的很多时间(包括自己付出一些时间)以外,他们在此过程中几乎不可能完成很多事情。
l'l'l

4

3.92-BETA版本3在Sierra中适用于i386!

https://www.dropbox.com/s/x765t3i42p7hr8b/upx.out?dl=0现在也适用于I386。

github.com/upx上的jreiser#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.

回复:“将其运行在应用程序的二进制文件上并且可以正常工作!”,这是否包括打包的二进制文件—如打包的二进制文件现在启动一样,还是我们必须解压缩我们希望运行的所有文件?
l'l'l

@ l'L'l我不确定您的意思-在3.92之前使用upx压缩的二进制文件需要-d path使用3.92-BETAr3或更高版本进行一次解压缩,然后才能运行。
grg

我要问的是,您现在是否可以使用您提到的最新Beta版本启动压缩二进制文件。
l'L'l

@ l'L'l抱歉,我没有完全遵循,我认为您的问题的答案是:是的,但是您必须先将其解压缩。使用此新版本的UPX解压缩后,它们可以运行,或使用此新版本再次压缩,并且在压缩后仍可以运行。
grg

是的,这就是我的问题,尽管尝试运行打包的内容(使用最新的BETA)时,应用崩溃了(10.11.6)。我不确定您是否尝试过打包并运行它,但是似乎仍然存在一些问题。
l'l'l

4
brew install upx

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

为我工作。


1

尽管这是新OS发行版中的常见问题(与旧版软件兼容),但我无法识别您的代码。

  • 第一步,请查看开发者网站,以表明他们将为Sierra进行补丁。他们可能已经发布了Beta补丁程序,该补丁程序无法通过软件更新获得。

  • 向开发人员发送电子邮件,直接询问他们。如果他们在多个平台上拥有多个应用程序,可能要花一些时间才能赶上。

  • 考虑使用双启动Mac。通常,在安装新的操作系统后,我会将当前系统的副本保留在另一个驱动器(或分区)上,然后可以快速重新启动并继续使用该软件。实际上,这些天我实际上一直在运行10.6和10.8的旧版Mac,仅用于此支持。

  • 考虑一个虚拟机。您可以在OSX上使用仿真器并安装所需的OS版本(包括Windows)。不过,不确定是否为Sierra发布了仿真器。


1

由于UPX被达尔文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 2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.