"इस UPX संपीड़ित बाइनरी में एक अमान्य माच-ओ हेडर होता है और इसे लोड नहीं किया जा सकता है।"


10

मैं macOS Sierra में एक पुराना ऐप लॉन्च करने की कोशिश कर रहा हूं। यह एल Capitan में ठीक काम किया, लेकिन सिएरा के अद्यतन के बाद से यह त्रुटि के साथ लॉन्च पर तुरंत क्रैश हो जाता है ...

इस UPX संपीड़ित बाइनरी में एक अमान्य माच-ओ हेडर होता है और इसे लोड नहीं किया जा सकता है।

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.

यह सिएरा में ऐप खोलने से क्रैश लॉग है।

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
मेरे पास एक ही मुद्दा है।
07o .ı

2
Apple की सोच के बारे में दुर्भाग्यपूर्ण हिस्सा यह मान रहा है कि हर कोई मानकीकृत तरीके से UPX का उपयोग करता है। चूंकि UPX एक ओपन सोर्स प्रोजेक्ट है, इसलिए इसे डेवलपर के अनुरूप विशेष तरीके से संशोधित किया जा सकता है। मैक ऐप स्टोर के बाहर वितरित किए जाने वाले ऐप्स के रूप में एक बार ऐसा था। इस तरह की पाबंदी लगाना बहुत ही भोली और गलत बात है, हालांकि, इस बात का अंदाजा इस बात से जाहिर हो रहा है कि अपडेट के बाद इसका अपडेट काफी कम हो रहा है।
l'L'l

जवाबों:


9

संशोधित उत्तर:

निशान छिपाने के लिए, समुद्री डाकू ने संपीड़ित बाइनरी से यूपीएक्स मार्करों को शून्य कर दिया, इसलिए बाइनरी को डिकम्पोज करने के लिए मैकओएस सिएरा के लिए संभव नहीं है। (साथ प्रयास करें: hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPXऔर देखें, कि सबसे अधिक संभावना है कि कोई आउटपुट न हो।)

हालांकि, यूपीएक्स के जेलर ने चुनौती को स्वीकार किया और संपीड़ित कोड के लिए अधिक मजबूत खोज को लागू करने के साथ इस मुद्दे को संबोधित किया। v3.92 इन एप्स को फिर से चालू करने के लिए संभव होगा, जब निष्पादन योग्य के साथ डिकम्प्रेसिंग होता है upx -d YourApp.app/Contents/MacOS/YourApp


यह कुछ ऐसा है जिसे Apple को वास्तव में ठीक करना चाहिए, क्योंकि उन्होंने स्पष्ट रूप से तोड़ दिया जो कि बिना किसी कारण के काम किया।
l'L'l

किसी ने एक द्विआधारी (सबसे अधिक संभावित संदिग्ध सामग्री के साथ) को संकुचित करने के बाद ध्यान केंद्रित किया ताकि यह सिएरा पर अब शुरू न हो और Apple को इसे ठीक करना चाहिए? ठीक है, बिल्कुल सही ... आप कृपया उन्हें बताएं। :)
RyuX51

अरे, मेडलिंग कंप्यूटिंग की बुनियाद है ... मेडडलिंग के बिना हमें क्या मिला है? : p
l'L'l

बेझिझक हर चीज से ध्यान हटाएं। लेकिन आप एप्पल पर सब कुछ दोष नहीं दे सकते हैं (हालांकि समय-समय पर यह वास्तव में ऐसा करने के लिए बहुत आकर्षक हो जाता है)।
RyuX51

हाँ, यह एक महान बिंदु है, और मैं समझता हूँ कि आप क्या कह रहे हैं, हालांकि, अब प्रतिबंधात्मक व्यवहार के पीछे क्या कारण हो सकता है, यह कोई भी पूछ सकता है। यह अत्यधिक संभावना नहीं है कि उन्होंने सभी के समय को बर्बाद करने के अलावा इस प्रक्रिया में बहुत कुछ पूरा किया है (कुछ खर्चों में खुद के सहित)।
l'L'l

4

3.92-बीटा रीविजन 3 सिएरा में काम करता है और i386 के लिए काम करता है!

https://www.dropbox.com/s/x765t3i42p7hr8b/upx.out?dl=0 अब I386 के लिए भी काम करता है।

jithiser on github.com/upx # 4 टिप्पणी

3.92 सिएरा में कंप्रेशिंग बायनेरिज़ का समर्थन करता है ताकि उन्हें सिएरा में चलाया जा सके, और सिएरा में डीकंप्रेसिंग बायनेरिज़ का भी समर्थन करता है। 3.92-बीटा भी डीकंप्रेसिंग बायनेरिज़ का समर्थन करता है जिसे एक कोड हस्ताक्षर के साथ संपीड़न के बाद संशोधित किया गया है।

-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 से पहले के अपैक्स के साथ बायनेरिज़ को -d path3.92-BETAr3 या बाद में एक बार उपयोग करने के साथ डिकम्प्रेसिंग की आवश्यकता होती है ताकि उन्हें चलाया जा सके।
GRG

जो मैं पूछ रहा हूं वह यह है कि क्या आप अपने द्वारा बताए गए नवीनतम बीटा का उपयोग करके एक संपीड़ित बाइनरी लॉन्च कर सकते हैं।
l'L'l

@ l'L'l क्षमा करें, मैं वास्तव में अनुसरण नहीं कर रहा हूं, मुझे लगता है कि आपके प्रश्न का उत्तर है: हां, लेकिन आपको पहले उन्हें डिकम्प्रेस करना होगा। एक बार UPX के इस नए संस्करण का उपयोग करने के बाद, वे चलाए जा सकते हैं, या फिर से इस नए संस्करण का उपयोग करके संपीड़ित किया जा सकता है और अभी भी संपीड़ित चला सकते हैं।
GRG

हां, यह वही है जो मैं पूछ रहा था, हालांकि जब कुछ पैक चलाने की कोशिश कर रहा था (नवीनतम बीटा के साथ) तो ऐप क्रैश हो गया (10.11.6)। मुझे यकीन नहीं है कि आपने कुछ भी पैक करने और इसे चलाने की कोशिश की है, लेकिन ऐसा लगता है कि अभी भी कुछ समस्या है।
l'L'l


1

मैं विशेष रूप से आपके कोड को नहीं पहचानता, हालांकि यह एक नया OS रिलीज़ (विरासत सॉफ़्टवेयर संगतता) के साथ एक सामान्य समस्या है।

  • पहला कदम, डेवलपर्स वेबसाइट पर एक संकेत के लिए देखें कि वे सिएरा के लिए पैचिंग होंगे। उन्होंने पहले से ही एक बीटा पैच पोस्ट किया हो सकता है जो सॉफ्टवेयर अपडेट के माध्यम से उपलब्ध नहीं है।

  • देव को एक ईमेल भेजें जो उन्हें सीधे पूछ रहा है। विशेषकर यदि उनके पास कई प्लेटफ़ॉर्म पर एक से अधिक एप्लिकेशन हैं, तो उन्हें पकड़ने में थोड़ा समय लग सकता है।

  • एक दोहरे बूट मैक होने पर विचार करें। मैं आम तौर पर एक नए ओएस इंस्टॉलेशन के बाद अपने मौजूदा सिस्टम का एक और ड्राइव (या विभाजन) पर क्लोन रखता हूं, फिर मैं जल्दी से फिर से बूट कर सकता हूं और सॉफ्टवेयर का उपयोग करना जारी रख सकता हूं। मैं वास्तव में एक विरासत मैक इन दिनों केवल 10.6 और 10.8 इस समर्थन के लिए रख रहा हूं।

  • एक वर्चुअल मशीन पर विचार करें। आप OSX पर एक एमुलेटर का उपयोग कर सकते हैं और आपके द्वारा पसंद किया जाने वाला ओएस संस्करण (विंडोज सहित) स्थापित कर सकते हैं। यकीन नहीं है कि इम्यूलेटर सिएरा के लिए अभी तक जारी किए गए हैं।


1

इस मुद्दे को यूपीएक्स के रूप में रिपोर्ट किया गया है, जिस तरह से डार्विन 16 / ओएस एक्स सिएरा द्वारा तोड़ दिया गया है। # ४

ऐसा लग रहा है कि 3.92 इस मुद्दे को संबोधित करेगा।


1
यह सबसे अधिक संभावना नहीं है, क्योंकि निष्पादन योग्य सबसे शायद UPX द्वारा पैक नहीं किया गया है।
RyuX51

लेकिन त्रुटि संदेश इंगित करता है। प्रमाणिकता आदि के साथ वह चीज भी है जो अपघटन के रास्ते में भी आती है।
21o .ı

2
यह करता है, लेकिन यह स्पष्ट रूप से गलत है। Run hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPX और अपने लिए देखें। प्रमाण पत्र के लिए: अपने लिंक को अच्छी तरह से पढ़ें और आप देखेंगे कि द्विआधारी हस्ताक्षर करने या डिकम्प्रेसिंग के समय नहीं होने से कोई फर्क नहीं पड़ता है।
RyuX51
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.