Sunday, January 10, 2016

How to fix Unibeast's "Selected Mac OS X Installer is Incomplete" error

Selected Mac OS X Installer is Incomplete

Your selected Mac OS X Installer is incomplete. Please delete all copies of the installer from all mounted volumes and redownload it again from the Mac App Store.

Do you receive above error message when you try to prepare a bootable USB  using Unibeast and a OS X installer downloaded from another machine, or a torrent? and you are 100% sure the downloaded installer is genuine copy?

Actually you can resolve this by doing either,
1. Simply changing the system time or
2. Patching Unibeast to remove a validation. 
(Changing 0000000100003262         je         0x1000032a2 to a NOP in Unibeast 6.1.1)

Both can be done easily. But I'm going to describe only the first option here. 

First let me explain few validations which are done by Unibeast before it allows you to create the bootable USB.

1. First validation it does is the Installer name and the path. Installer should be available at the /Applications directory with the correct name.

E.g.: 
/Applications/Install OS X Yosemite.app
/Applications/Install OS X El Capitan.app

2. Second validation is that,

If the installer is for Yosemite, then it checks for the string "com.apple.InstallAssistant.Yosemite" in the /Applications/Install OS X Yosemite.app/Contents/_MASReceipt/receipt file using "grep -q" command.

If the installer is for El Capitan, then it checks for "
com.apple.InstallAssistant.ElCapitan" in the /Applications/Install OS X El Capitan.app/Contents/_MASReceipt/receipt file using "grep -q" command.

3. The third validation is that it validates the signature of the receipt. This is the moment you get the "Installer is Incomplete" error message. This can happen either your receipt file is actually changed by someone or the certificates included in the receipt file are expired.

You can view the certificate information executing below command, (first change directory to /Applications/Install OS X xxx.app/Contents/_MASReceipt/ directory)

openssl pkcs7 -inform der -in receipt -print_certs -text

If your machine time is not within the validity period of the certificates, the signature validation is failed and Unibeast prompts the "Installer is Incomplete" error message.

e.g.:
openssl pkcs7 -inform der -in receipt -print_certs -text | egrep 'Not Before|Not After'
            Not Before: Nov 11 21:58:01 2010 GMT
            Not After : Nov 11 21:58:01 2015 GMT
            Not Before: Feb 14 18:56:35 2008 GMT
            Not After : Feb 14 18:56:35 2016 GMT
            Not Before: Apr 25 21:40:36 2006 GMT
            Not After : Feb  9 21:40:36 2035 GMT

In this case, the lowest "Not After time" is Nov 11 21:58:01 2015 GMT and the highest "Not Before time" is Nov 11 21:58:01 2010 GMT. Therefore the time of your machines should be within Nov 11 21:58:01 2010 GMT and Nov 11 21:58:01 2015 GMT.

Therefore if you change the machine time appropriately, let's say 2015/01/01 then Unibeast will proceed without prompting the  "Installer is Incomplete" error message. :)

Note: I think above validation was introduced by Unibeast developers to address a legal issue rather than making sure you have a genuine copy, because you can still have a modified installer files even when the receipt validation is passed.  So if you download the MAC OS X Installer from a torrent site or any other place, check the MD5 or SHA1 of the InstallESD.dmg file.

For Further reads about apple receipts,

42 comments:

  1. This is an excellent post!

    I replaced a single byte with this command:
    printf '\x90' | dd of=UniBeast.app/Contents/MacOS/UniBeast seek=12898 bs=1 conv=notrunc

    Now I can create the installer usb by creating a directory ('/Applications/Install OS X Yosemite.app/Contents/SharedSupport') and copying the Yosemite InstallESD.dmg there.

    What is the 'jump if zero' offset for Unibeast 5.2.0 so I can use chimera?

    ReplyDelete
    Replies
    1. ^^ Wow. That's a nice way to patch it.
      Unfortunately I have removed the OSX installation from my PC. But I'll try to check 5.2.0 soon. Thanks for your input.

      Delete
  2. X-tremly helpful. Thank You!

    ReplyDelete
  3. This was a lifesaver. Thank you so much

    ReplyDelete
  4. bloody brilliant indeed, thanks a ton for posting this

    ReplyDelete
  5. I finally figured out how to patch Unibeast 5.2.0, so now I can use Chimera with my older PC.

    This works the same as the above method and you only need one InstallESD.dmg file in the proper directory. The offset is 2ca1 (hex) or 11425 (decimal). I tried replacing the JE with a NOP, but Unibeast crashes. So I tried replacing it with a JNE and it worked!

    printf '\x75' | dd of=UniBeast.app/Contents/MacOS/UniBeast seek=$((0x2ca1)) bs=1 conv=notrunc

    ReplyDelete
    Replies
    1. Nice work. Thanks for sharing your experience.

      Delete
    2. You are a lifesaver! I have old hardware that an OS newer than Lion won't work on (including the "early 2008" MacBook I'm typing this on, also stuck on Lion). UniBeast 5.2.0 is the last one to support Lion. Apple seems to no longer let people buy Lion in the App Store, but instead only through some strange checkout process that involves "1-2 days" processing time to SEND A LINK in email (like some shady eBay seller). I DID shell out the cash to Apple for it, but got tired of waiting. This patch finally made it accept my patched installer .app... ultimate hooray!

      Really hate how Apple throws away good, old hardware by making it entirely unsupportable...

      Delete
    3. This comment has been removed by the author.

      Delete
  6. Hi, I am just new here and in Mac patching...Can someone further help me explaining what to edit, how to edit.

    Regards

    ReplyDelete
    Replies
    1. Just open the terminal and go in the same directory where Unibeast is located and write this:

      printf '\x75' | dd of=UniBeast.app/Contents/MacOS/UniBeast seek=$((0x2ca1)) bs=1 conv=notrunc

      Delete
  7. Plz any one have the unibeast alrdy modified plz share it! im stuck with my computer ><

    ReplyDelete
    Replies
    1. Just open the terminal and go in the same directory where Unibeast is located and write this:

      printf '\x75' | dd of=UniBeast.app/Contents/MacOS/UniBeast seek=$((0x2ca1)) bs=1 conv=notrunc

      Delete
  8. This comment has been removed by the author.

    ReplyDelete
  9. Can you tell me how to patch unibeast 6 because changing date is not working.
    Thanks in advance.

    ReplyDelete
  10. Please explain how to patch from the start

    ReplyDelete
    Replies
    1. Just open the terminal and go in the same directory where Unibeast is located and write this:

      printf '\x75' | dd of=UniBeast.app/Contents/MacOS/UniBeast seek=$((0x2ca1)) bs=1 conv=notrunc

      Delete
    2. Still works till this day, thank you!

      Delete
  11. Replies
    1. Can you please elaborate your procedure?
      Where did you download the sierra from and etc

      Delete
  12. These don't work with the new unibeasts. Anyone have a fix?

    ReplyDelete
  13. I am trying to install Yosemite but only saved the InstallESD.dmg file in my files of ancient history. Unfortunately, the os selection remains grayed out even after patching unibeast 5.2. Since unibeast is probably just using the InstallESD.dmg file in the app to create the bootable usb, how can i get it to use the 'raw' InstallESD.dmg?

    ReplyDelete
    Replies
    1. open the install ESD And Show Hidden Files and you will See a Install OS X Yosemite.app and copy it to /Applications And Now open it and go and create a folder Called SharedSupport and put that install esd there you go :)

      Delete
  14. hello i am using unibeast 6.2.0. i try this terminal. but it doesn't help.
    what to do ?

    ReplyDelete
  15. for unibeast 6.2.0
    printf '\x75' | dd of=UniBeast.app/Contents/MacOS/UniBeast seek=$((0x2b3a)) bs=1 conv=notrunc

    ReplyDelete
  16. This is awesome.
    Clearing...

    Unibeast nn:
    printf '\x90' | dd of=UniBeast.app/Contents/MacOS/UniBeast seek=12898 bs=1 conv=notrunc
    Unibeast 5.2.0
    printf '\x75' | dd of=UniBeast.app/Contents/MacOS/UniBeast seek=$((0x2ca1)) bs=1 conv=notrunc
    Unibeast 6.2.0
    printf '\x75' | dd of=UniBeast.app/Contents/MacOS/UniBeast seek=$((0x2b3a)) bs=1 conv=notrunc

    Any idea of how to patch unibeast 7.1.1?

    ReplyDelete
  17. Perfect answer. You are a life saver. Thank YOU.

    ReplyDelete
  18. Holy cow this still works, thank you all!

    ReplyDelete
  19. lo unico que me funciono fue leeer este articulo ... gracias infinitas

    ReplyDelete