“ ไบนารีที่ถูกบีบอัดของ 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.

นี่คือบันทึกข้อผิดพลาดจากการเปิดแอปในเซียร์รา

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
ฉันมีปัญหาเดียวกันมาก
ɹoƃı

2
ส่วนที่โชคร้ายเกี่ยวกับการคิดของ Apple ที่นี่คือสมมติว่าทุกคนใช้ UPX อย่างเป็นมาตรฐาน เนื่องจาก UPX เป็นโครงการโอเพ่นซอร์สจึงสามารถแก้ไขได้ในรูปแบบเฉพาะเพื่อให้เหมาะกับผู้พัฒนา ครั้งหนึ่งเคยมีเรื่องแบบนี้ที่อนุญาตให้แอพแจกจ่ายนอก Mac App Store การตั้งค่าข้อ จำกัด เกี่ยวกับเรื่องนี้นั้นไร้เดียงสาและเกินความจริงอย่างไรก็ตามมันก็เห็นได้ชัดว่าความคิดที่ดูเหมือนจะกัดเซาะการอัปเดตหลังจากการอัพเดต
l'L'l

คำตอบ:


9

คำตอบที่แก้ไขแล้ว:

สำหรับการซ่อนร่องรอยโจรสลัดใช้ zeroed markers ออกจากไบนารีที่บีบอัดดังนั้น MacOS Sierra จึงไม่สามารถขยายขนาดไบนารีได้ (ลองด้วย: hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPXและดูว่าไม่มีผลลัพธ์มากที่สุด)

อย่างไรก็ตาม jreiser จาก UPX ยอมรับความท้าทายและแก้ไขปัญหานี้ด้วยการใช้การค้นหาที่มีประสิทธิภาพยิ่งขึ้นสำหรับรหัสที่บีบอัด v3.92 จะเป็นไปได้ที่จะทำให้ปพลิเคชันเหล่านี้ทำงานอีกครั้งเมื่อคลาย executables upx -d YourApp.app/Contents/MacOS/YourAppด้วย


มันเป็นสิ่งที่ Apple ควรแก้ไขจริง ๆ เพราะเห็นได้ชัดว่าสิ่งที่ทำงานให้กับไม่มีเหตุผลที่เห็นได้ชัด
l'L'l

บางคนยุ่งกับไบนารี (มีเนื้อหาที่น่าสงสัยที่สุด) หลังจากบีบอัดข้อมูลแล้วจึงไม่เริ่มต้นอีกต่อไปที่ Sierra และ Apple ควรแก้ไขหรือไม่ ใช่ถูกต้องแน่นอน ... คุณโปรดบอกพวกเขา :)
RyuX51

เฮ้การแทรกแซงเป็นพื้นฐานของการคำนวณ ... โดยไม่เข้าไปยุ่งอะไรเราได้? : p
l'L'l

อย่าลังเลที่จะเข้าไปยุ่งกับทุกสิ่ง แต่คุณไม่สามารถตำหนิทุกอย่างบน Apple (แต่บางครั้งมันก็น่าดึงดูดมากที่จะทำเช่นนั้น)
RyuX51

ใช่ว่าเป็นจุดที่ดีและฉันเข้าใจสิ่งที่คุณพูด แต่อะไรคือเหตุผลที่อยู่เบื้องหลังพฤติกรรมที่ จำกัด ในขณะนี้ที่อาจถาม ไม่น่าเป็นไปได้สูงที่พวกเขาจะประสบความสำเร็จอย่างมากในกระบวนการอื่นนอกเหนือจากการเสียเวลามากของทุกคน (รวมถึงค่าใช้จ่ายของตัวเองด้วย)
l'L'l

4

3.92-BETA revision 3 ใช้งานได้ใน Sierra และทำงานกับ i386!

https://www.dropbox.com/s/x765t3i42p7hr8b/upx.out?dl=0ตอนนี้ใช้งานได้กับ I386 เช่นกัน

jreiser บน github.com/upx # 4 ความคิดเห็น

3.92 รองรับการบีบอัดไบนารีในเซียร่าเช่นที่พวกเขาสามารถทำงานในเซียร์ราและยังสนับสนุนการบีบอัดไบนารีในเซียร์รา 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: "Ran it บนไบนารีของแอพและใช้งานได้!" ซึ่งรวมถึงไบนารีที่บรรจุแล้วเช่นเดียวกับที่ไบนารีแบบเต็มเปิดใช้งานในขณะนี้หรือไม่หรือเราต้องเปิดทุกสิ่งที่เราคาดว่าจะเปิดหรือไม่
l'L'l

@ l'L'l ฉันไม่แน่ใจว่าคุณหมายถึงอะไร - ไบนารีที่ถูกบีบอัดด้วย upx ก่อน 3.92 ต้องคลายการบีบอัด-d pathเมื่อใช้ 3.92-BETAr3 หรือใหม่กว่าเพื่อให้สามารถทำงานได้
grg

สิ่งที่ฉันถามคือคุณสามารถเปิดไบนารีที่ถูกบีบอัดได้แล้วโดยใช้เบต้าล่าสุดที่คุณพูดถึง
l'L'l

@ l'L'l ขออภัยฉันไม่ได้ทำตามฉันคิดว่าคำตอบสำหรับคำถามของคุณคือ: ใช่ แต่คุณต้องขยายพวกเขาก่อน เมื่อคลายการบีบอัดโดยใช้รุ่นใหม่ของ UPX พวกเขาสามารถเรียกใช้หรือบีบอัดอีกครั้งโดยใช้รุ่นใหม่นี้และยังคงทำงานในขณะที่บีบอัด
grg

ใช่นั่นคือสิ่งที่ฉันถามถึงแม้ว่าเมื่อพยายามเรียกใช้บางสิ่งบางอย่างที่บรรจุไว้ (ด้วยเบต้าล่าสุด) แอปขัดข้อง (10.11.6) ฉันไม่แน่ใจว่าคุณได้ลองบรรจุอะไรแล้วเปิดใช้ แต่ดูเหมือนว่ายังมีปัญหาอยู่
l'L'l


1

ฉันไม่รู้จักรหัสของคุณโดยเฉพาะแม้ว่าจะเป็นปัญหาทั่วไปของระบบปฏิบัติการรุ่นใหม่ (ความเข้ากันได้ของซอฟต์แวร์รุ่นเก่า)

  • ขั้นแรกดูที่เว็บไซต์ของนักพัฒนาเพื่อดูว่าพวกเขากำลังทำการแก้ไขสำหรับเซียร์รา พวกเขาอาจโพสต์แพทช์เบต้าแล้วซึ่งไม่สามารถใช้งานได้ผ่านการอัพเดตซอฟต์แวร์

  • ส่งอีเมล Dev เพื่อขอให้พวกเขาโดยตรง มันอาจใช้เวลาสักครู่ในการติดตามโดยเฉพาะอย่างยิ่งหากมีแอพพลิเคชั่นหลายตัวในหลายแพลตฟอร์ม

  • ลองพิจารณาดูว่ามี dual boot Mac หรือไม่ โดยทั่วไปฉันจะทำการโคลนระบบปัจจุบันของฉันบนไดรฟ์อื่น (หรือพาร์ติชัน) หลังจากการติดตั้งระบบปฏิบัติการใหม่จากนั้นฉันสามารถบูตใหม่ได้อย่างรวดเร็วและใช้ซอฟต์แวร์ต่อไป ฉันยังคงใช้ Mac รุ่นเก่า ๆ อยู่ทุกวันนี้รันที่ 10.6 และ 10.8 สำหรับการสนับสนุนนี้

  • พิจารณาเครื่องเสมือน คุณสามารถใช้อีมูเลเตอร์บน OSX และติดตั้งเวอร์ชั่นระบบปฏิบัติการที่คุณต้องการ (รวมถึง Windows) ไม่แน่ใจว่าอีมูเลเตอร์ถูกปล่อยให้เซียร่าหรือยัง


1

ปัญหาได้รับการรายงานว่าเป็นUPX เป็นวิธีการที่แตกโดย Darwin 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.