Mật mã nén UPX này chứa một tiêu đề Mach-O không hợp lệ và không thể tải được.


10

Tôi đang cố gắng khởi chạy một ứng dụng cũ hơn trong macOS Sierra. Nó hoạt động tốt ở El Capitan, tuy nhiên kể từ khi cập nhật lên Sierra, nó bị treo ngay lập tức khi khởi chạy với lỗi lỗi

Nhị phân nén UPX này chứa tiêu đề Mach-O không hợp lệ và không thể tải được.

Sử dụng Homebrew trong El Capitan, tôi đã cài đặt UPX và sử dụng nó để thử giải nén nhị phân, tuy nhiên điều này cho tôi biết rằng nhị phân không được nén ở vị trí đầu tiên.

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

Đây là nhật ký sự cố từ việc mở ứng dụng ở 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

Làm cách nào để mở ứng dụng này ở Sierra?


1
Tôi có cùng một vấn đề.
ɹoƃI

2
Điều không may về suy nghĩ của Apple ở đây là giả sử mọi người sử dụng UPX theo cách tiêu chuẩn hóa. Vì UPX là một dự án nguồn mở, nó có thể được sửa đổi theo những cách cụ thể để phù hợp với những người phát triển. Đã từng có một điều như các ứng dụng được phép phân phối bên ngoài Mac App Store. Đặt ra các hạn chế như vậy là ngây thơ và phản ứng thái quá, tuy nhiên, rõ ràng ý tưởng về điều đó dường như đang ăn mòn bản cập nhật sau khi cập nhật.
Tôi sẽ là

Câu trả lời:


9

Câu trả lời sửa đổi:

Để che giấu dấu vết, những tên cướp biển đã loại bỏ các dấu UPX ra khỏi tệp nhị phân nén, do đó, macOS Sierra không thể giải nén nhị phân. (Hãy thử với: hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPXvà xem, rất có thể không có đầu ra.)

Tuy nhiên, jreiser từ UPX đã chấp nhận thách thức và giải quyết vấn đề này bằng cách thực hiện tìm kiếm mã nén mạnh mẽ hơn. v3.92 sẽ có thể làm cho các ứng dụng này chạy lại khi giải nén các tệp thực thi với upx -d YourApp.app/Contents/MacOS/YourApp.


Đó là điều Apple nên sửa chữa thực sự, vì rõ ràng họ đã phá vỡ những gì hoạt động mà dường như không có lý do.
Tôi sẽ là

Ai đó đã can thiệp với một nhị phân (với nội dung rất có thể nghi ngờ) sau khi nén nó để nó không bắt đầu nữa trên Sierra và Apple có nên sửa nó không? Vâng, hoàn toàn đúng ... bạn vui lòng nói với họ. :)
RyuX51

Này, can thiệp là nền tảng của điện toán ... mà không can thiệp những gì chúng ta có? : p
Tôi sẽ là

Hãy can thiệp với tất cả mọi thứ. Nhưng bạn không thể đổ lỗi cho tất cả mọi thứ trên Apple (mặc dù đôi khi nó thực sự DID trở nên rất hấp dẫn để làm như vậy).
RyuX51

Vâng, đó là một điểm tuyệt vời, và tôi hiểu những gì bạn đang nói, tuy nhiên, lý do đằng sau hành vi hạn chế hiện nay người ta có thể hỏi là gì. Rất khó có khả năng họ đã hoàn thành được nhiều việc trong quá trình ngoài việc lãng phí rất nhiều thời gian của mọi người (bao gồm cả chi phí của họ).
Tôi sẽ là

4

3.92-BETA phiên bản 3 hoạt động ở Sierra và hoạt động cho i386!

https://www.dropbox.com/s/x765t3i42p7hr8b/upx.out?dl=0 hiện cũng hoạt động cho I386.

jreiser trên github.com/upx # 4 bình luận

3,92 hỗ trợ nén nhị phân ở Sierra sao cho chúng có thể chạy ở Sierra và cũng hỗ trợ giải nén nhị phân ở Sierra. 3,92-BETA cũng hỗ trợ giải nén nhị phân đã được sửa đổi sau khi nén, chẳng hạn như với chữ ký mã.

Giải nén nhị phân của ứng dụng bằng -dtùy chọn này hoạt động rất tốt!

$ 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: "Chạy nó trên nhị phân ứng dụng và nó đã hoạt động!", Điều này có bao gồm các nhị phân đóng gói không - như trong các nhị phân đóng gói khởi chạy ngay bây giờ hay chúng ta phải giải nén mọi thứ chúng ta mong đợi để chạy?
Tôi sẽ là

@ Tôi không hoàn toàn chắc chắn về ý bạn - các tệp nhị phân được nén với upx trước 3,92 cần giải nén với -d pathmột lần sử dụng 3,92-BETAr3 trở lên để chúng có thể chạy được.
grg

Những gì tôi đang hỏi là bạn có thể khởi chạy một tệp nhị phân nén ngay bây giờ bằng cách sử dụng bản beta mới nhất mà bạn đã đề cập.
Tôi sẽ là

@ Tôi xin lỗi, tôi không theo dõi chính xác, tôi nghĩ câu trả lời cho câu hỏi của bạn là: Có nhưng bạn phải giải nén chúng trước. Sau khi giải nén bằng phiên bản UPX mới này, chúng có thể được chạy hoặc nén lại bằng phiên bản mới này và vẫn chạy trong khi được nén.
grg

Vâng, đó là những gì tôi đã hỏi, mặc dù khi thử chạy một thứ gì đó được đóng gói (với BETA mới nhất), ứng dụng đã bị sập (10.11.6). Tôi không chắc liệu bạn đã thử đóng gói bất cứ thứ gì và chạy nó chưa, nhưng có vẻ như vẫn còn một số vấn đề ở đó.
Tôi sẽ là

4
brew install upx

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

đã làm cho tôi.


1

Tôi không nhận ra mã của bạn nói riêng mặc dù đây là vấn đề phổ biến với bản phát hành HĐH mới (khả năng tương thích phần mềm cũ).

  • Bước đầu tiên, hãy xem trang web của nhà phát triển để biết dấu hiệu họ sẽ vá cho Sierra. Họ có thể đã đăng một bản vá beta chưa có sẵn thông qua Cập nhật phần mềm.

  • Gửi cho Dev một email hỏi họ trực tiếp. Có thể họ sẽ mất một thời gian để bắt kịp đặc biệt nếu họ có nhiều ứng dụng trên nhiều nền tảng.

  • Cân nhắc việc có Mac khởi động kép. Tôi thường giữ một bản sao của hệ thống hiện tại của mình trên một ổ đĩa (hoặc phân vùng) khác sau khi cài đặt hệ điều hành mới, sau đó tôi có thể nhanh chóng khởi động lại và tiếp tục sử dụng phần mềm. Tôi thực sự giữ một máy Mac cũ trong những ngày này chạy 10.6 và 10.8 chỉ để hỗ trợ này.

  • Hãy xem xét một máy ảo. Bạn có thể sử dụng trình giả lập trên OSX và cài đặt phiên bản HĐH mà bạn thích (bao gồm cả Windows). Không chắc chắn nếu trình giả lập được phát hành cho Sierra mặc dù.


1

Vấn đề đã được báo cáo là UPX là cách, cách phá vỡ bởi Darwin 16 / OS X Sierra. # 4 .

Có vẻ như upx 3,92 sẽ giải quyết vấn đề này.


1
Nó rất có thể sẽ không, bởi vì thực thi rất có thể không được đóng gói bởi UPX.
RyuX51

Nhưng thông báo lỗi chỉ ra như vậy. Ngoài ra còn có điều với certificatea, vv cũng có trong cách giải nén.
ɹoƃı

2
Nó làm, nhưng nó rõ ràng là sai. Chạy hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPX và tự mình xem. Đối với các chứng chỉ: Đọc kỹ liên kết của bạn và bạn sẽ thấy rằng nó không có sự khác biệt nếu nhị phân được ký hay không khi giải nén.
RyuX51
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.