"이 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
여기서 애플의 생각에 대한 불행한 부분은 모두가 표준화 된 방식으로 UPX를 사용한다고 가정하는 것입니다. UPX는 오픈 소스 프로젝트이므로 특정 방식으로 개발자의 프로젝트에 맞게 수정할 수 있습니다. Mac App Store 외부에 앱을 배포 할 수있는 것이 한 번있었습니다. 이에 대한 제한을 설정하는 것은 순진하고 지나치지 만 업데이트 후 업데이트가 사라지고 있다는 생각이 분명 해지고 있습니다.
l' L' l

답변:


9

수정 된 답변 :

추적을 숨기려면 해적들이 압축 바이너리에서 UPX 마커를 0으로 만들었으므로 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

헤들 링은 컴퓨팅의 기초입니다. : p
l' L' l 's

모든 것에 자유롭게 참여하십시오. 그러나 Apple의 모든 것을 비난 할 수는 없습니다 (때로는 실제로 그렇게하는 것이 매우 매력적이었습니다).
RyuX51

그렇습니다. 좋은 지적입니다. 그러나 여러분이하는 말을 이해합니다. 그러나 지금 제한적인 행동의 원인이 무엇인지 묻습니다. 그들이 모든 사람의 시간을 낭비하는 것 (일부 비용으로 자신의 시간을 포함하여)을 낭비하는 것 이외의 과정에서 많은 것을 성취했을 가능성은 거의 없습니다.
l' L' l

4

3.92-BETA 개정 3은 Sierra에서 작동하며 i386에서 작동합니다!

https://www.dropbox.com/s/x765t3i42p7hr8b/upx.out?dl=0도 이제 I386에서도 작동합니다.

github.com/upx # 4 코멘트의 jreiser

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.

Re : "앱 바이너리로 가져 와서 작동했습니다!", 여기에는 압축 바이너리가 포함되어 있습니까? 압축 바이너리는 이제 시작되거나 실행해야하는 모든 것을 압축 해제해야합니까?
l' L' l

@ l' L' l 나는 당신이 무슨 뜻인지 잘 모르겠습니다. 3.92 이전에 upx로 압축 된 바이너리는 -d path3.92-BETAr3 이상을 사용하여 압축을 풀어야 실행 할 수 있습니다.
grg

내가 묻는 것은 지금까지 언급 한 최신 베타를 사용하여 압축 바이너리를 시작할 수 있다는 것입니다.
l' L' l

@ l' L' l 죄송합니다. 다음 내용을 정확히 따르지는 않습니다. 귀하의 질문에 대한 답변은 다음과 같습니다. 네, 그러나 먼저 압축을 풀어야합니다. 이 새 UPX 버전을 사용하여 압축을 풀면이 새 버전을 사용하여 다시 압축하거나 다시 압축 할 수 있습니다.
grg

그렇습니다. 최신 베타로 포장 된 것을 실행하려고 할 때 앱이 다운되었습니다 (10.11.6). 포장하고 실행 해 보았는지 확실하지 않지만 여전히 문제가있는 것 같습니다.
l' L' l

4
brew install upx

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

나를 위해 일했다.


1

새로운 OS 릴리스 (레거시 소프트웨어 호환성)와 관련된 일반적인 문제이지만 특히 코드를 인식하지 못합니다.

  • 첫 번째 단계는 개발자 웹 사이트에서 Sierra 용으로 패치 할 예정인지 확인하십시오. 소프트웨어 업데이트를 통해 제공되지 않는 베타 패치를 이미 게시했을 수 있습니다.

  • 개발자에게 직접 묻는 이메일을 보내십시오. 여러 플랫폼에 여러 응용 프로그램이있는 경우 특히 따라 잡는 데 시간이 걸릴 수 있습니다.

  • 듀얼 부팅 Mac 사용을 고려하십시오. 일반적으로 새 OS 설치 후 현재 시스템의 복제본을 다른 드라이브 (또는 파티션)에 보관 한 다음 빠르게 재부팅하고 소프트웨어를 계속 사용할 수 있습니다. 실제로이 지원을 위해 요즘 레거시 Mac을 10.6 및 10.8로 실행합니다.

  • 가상 머신을 고려하십시오. OSX에서 에뮬레이터를 사용하고 원하는 OS 버전 (Windows 포함)을 설치할 수 있습니다. 그래도 시에라 용 에뮬레이터가 출시되는지 확실하지 않습니다.


1

이 문제는 Darwin 16 / OS X Sierra에 의해 UPX가 중단 된 것으로보고되었습니다 . # 4 .

upx 3.92 가이 문제를 해결하는 것처럼 보입니다 .


1
실행 파일은 아마도 UPX에 의해 압축되지 않았기 때문에 가능하지 않을 것입니다.
RyuX51

그러나 오류 메시지가이를 나타냅니다. 감압 등의 방해가되는 증명서 등도 있습니다.
ɹoƃı

2
하지만 그렇지 않습니다. hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPX를 참조하십시오. 인증서에 관해서 : 링크를 철저히 읽으면 압축을 풀 때 바이너리가 서명되는지 여부에 차이가 없음을 알 수 있습니다.
RyuX51
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.