Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

Wowfunhappy

macrumors 68000
Original poster
Mar 12, 2019
1,822
2,115
For a few years now, Apple has provided links to download installers for OS X Lion (10.7) through macOS Sequoia (15), but for whatever reason OS X Mavericks (10.9) is missing from their list. Although there are various copies of Mavericks floating around the internet, it's hard to know for certain what is genuine. There is no way to download a copy of Mavericks directly from Apple, unless you already have the OS in your app store purchase history.

Over in the Mavericks subforum, a few of us have been trying to put together a shell script which anyone could use to download an official copy of Mavericks from Apple's OS recovery server. However, there is one thing we're missing!

In order to download from Apple's recovery server, you need to make a network request with a board serial number and ROM ID taken from a genuine Mac manufactured some time around 2013-2014.

Would anyone be willing to donate their Mac's board serial number and ROM ID for public use?

This information should be taken from either:
  1. A Mac that is not used with Apple services. For example, a Mac that exclusively runs Windows or Linux, or which only acts as a NAS server.
  2. A Mac you don't use anymore, perhaps because it's partially broken. For example, a laptop with a broken screen, speakers, or keyboard, or one that randomly kernel panics or overheats.
This is because there is some chance Apple will block this Mac from accessing their services. I mostly don't expect this to actually happen, because I don't think Apple cares that much, but it is absolutely possible. However, if your Mac mostly doesn't work or isn't used with Apple software, this wouldn't affect you at all, and you could potentially help a lot of people!

All you would have to do is run the following Terminal commands, and post or PM me the output alongside your exact Mac model:

Code:
nvram 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:ROM

nvram 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:MLB


We're not sure exactly which Mac models will work; we know for sure that a 2014 Macbook Air will, and that a 2012 Macbook Air will not. However, you can always PM me the information and I will try it out; I'll keep the data private if it can't be used.

Thank you for considering!
 
Last edited:
  • Like
Reactions: Jazzzny
All you would have to do is run the attached binary

1734199450861.png
 
  • Haha
Reactions: Basic75

You don't necessarily need to run macserial (which comes from here, by the way) please feel free to retrieve the data however is easiest for you.

If you have a development environment set up, you can retrieve the ROM via this Objective-C code:

Objective-C:
#import <Foundation/Foundation.h>

int main(int argc, char *argv[]) {
    unsigned char buffer[4] = {0x2d, 0x30, 0x32, 0};
    for (int i = 0; i < 3; i++) {
        buffer[i] ^= 0x7F;
    }
 
    NSString *registryKey = [NSString stringWithFormat:@"%@:%s", @"4D1EDE05-38C7-4a6a-9CC6-4BCCA8B38C14", buffer];
    io_registry_entry_t entry = IORegistryEntryFromPath(kIOMasterPortDefault, "IODeviceTree:/options");
    NSData *result = nil;
    CFTypeRef property = IORegistryEntryCreateCFProperty(entry, (CFStringRef) registryKey, kCFAllocatorDefault, 0);
 
    NSLog(@"Rom: %@", (NSData *) property);
}

And the board serial number / MLB via:

Objective-C:
#import <Foundation/Foundation.h>

int main(int argc, char *argv[]) {
    char bytes[4] = {0x32, 0x33, 0x3d, 0};  // "23="
    for (int i = 0; i < 3; i++) {
        bytes[i] ^= 0x7F;
    }
 
    NSString *registryKey = [NSString stringWithFormat:@"%@:%s", @"4D1EDE05-38C7-4a6a-9CC6-4BCCA8B38C14", bytes];
    io_registry_entry_t entry = IORegistryEntryFromPath(kIOMasterPortDefault, "IODeviceTree:/options");
    NSString *result = nil;
 
    CFTypeRef property = IORegistryEntryCreateCFProperty(entry, (CFStringRef)registryKey, kCFAllocatorDefault, 0);
    NSData *propertyData = (NSData *)property;
    NSError *error = nil;
    id propertyList = [NSPropertyListSerialization propertyListWithData:propertyData options:0 format:NULL error:&error];
 
    NSLog(@"Board serial number: %@", propertyList);
}

Compile either with:

clang -o OutputBinaryName WhereYouSavedTheCode.m -framework Foundation -framework IOKit

(Code comes from f54da based on reverse-engineered Apple code, I attempted to clean it up and any errors are mine.)

The Board ID just depends on the model of Mac you have, see: https://dortania.github.io/OpenCore-Install-Guide/extras/smbios-support.html#macbook

Please let me know if you have any questions or if there is a way I could make this process more trustworthy.
 
Last edited:
  • Like
Reactions: Basic75
>you can retrieve the ROM via this Objective-C code

You can do it much easier just by doing
"nvram 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:ROM"
"nvram 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:MLB"

in terminal. I kind of wonder which exact machines are required, even machines that were released with mountain lion eventually came factory-installed with mavericks once that was released.
 
For a few years now, Apple has provided links to download installers for OS X Lion (10.7) through macOS Sequoia (15), but for whatever reason OS X Mavericks (10.9) is missing from their list. Although there are various copies of Mavericks floating around the internet, it's hard to know for certain what is genuine. There is no way to download a copy of Mavericks directly from Apple, unless you already have the OS in your app store purchase history.
....
Have you tried macOS Mavericks 10.9.5 ?
 
Last edited:
>you can retrieve the ROM via this Objective-C code

You can do it much easier just by doing
"nvram 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:ROM"
"nvram 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:MLB"

in terminal.
Thank you! I changed the first post to this method.
 
We have a donor thanks to dosdude1! Thanks all!

(If anyone else is just itching to share as well, please feel free! I will put both sets of identifiers in the script and have it pick randomly each time. It might be good to not have every request use the exact same board id and serial. However, this is absolutely not necessary!)
 
Last edited:
  • Love
Reactions: spacebyte
Why is the timing / limit of boards and such so narrow? I know for a fact that my Late 2008 Unibody (MB470LL/A) supported Mavericks and I for sure did an App Store download of the software on that system when the OS came out.
 
Why is the timing / limit of boards and such so narrow? I know for a fact that my Late 2008 Unibody (MB470LL/A) supported Mavericks and I for sure did an App Store download of the software on that system when the OS came out.

We don't entirely know. But, when you boot network recovery, Apple gives you two options depending on which keys you hold down at startup: (1) install the latest compatible version of macOS or (2) install (usually?) the version of macOS that originally shipped with your Mac.

To my knowledge (?), #1 will never be Mavericks, so we need a model of Mac where #2 will be Mavericks.
 
We don't entirely know. But, when you boot network recovery, Apple gives you two options depending on which keys you hold down at startup: (1) install the latest compatible version of macOS or (2) install (usually?) the version of macOS that originally shipped with your Mac.

To my knowledge (?), #1 will never be Mavericks, so we need a model of Mac where #2 will be Mavericks.
Interesting to know, and kinda makes sense.

If the method of downloading is from Recovery mode only, that requirement makes sense. I am curious if I can selectively download that OS from that system if booted into an earlier version of MacOS now...

Anyway, I have a dead Unibody logic board from 2008, but it doesn't sound like numbers from that would be of any help to you.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.