Skip to content

Commit 4bc6522

Browse files
authored
Add files via upload
1 parent da2a825 commit 4bc6522

2 files changed

Lines changed: 553 additions & 107 deletions

File tree

fetch_macos.py

Lines changed: 37 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -3,68 +3,65 @@
33
import sys
44
import subprocess
55

6-
# OSX4VM - Master Recovery Engine (Personal Edition)
6+
# OSX4VM - Master Recovery Engine (Mastered Edition)
77
# ------------------------------------------------
88
# Supports macOS 10.7 (Lion) to 26.0 (Tahoe)
9-
# Uses robust Board ID / MLB matching for official Apple downloads.
9+
# Powered by official acidanthera/macrecovery logic.
1010

11-
RECOVERY_DATA = {
12-
"1": {"name": "Lion (10.7)", "bid": "Mac-2E6FAB96566FE58C", "m": "00000000000F25Y00"},
13-
"2": {"name": "Mountain Lion (10.8)", "bid": "Mac-7DF2A3B5E5D671ED", "m": "00000000000F65100"},
14-
"3": {"name": "Mavericks (10.9)", "bid": "Mac-F60DEB81FF30ACF6", "m": "00000000000FNN100"},
15-
"4": {"name": "Yosemite (10.10)", "bid": "Mac-E43C1C25D4880AD6", "m": "00000000000GDVW00"},
16-
"5": {"name": "El Capitan (10.11)", "bid": "Mac-FFE5EF870D7BA81A", "m": "00000000000GQRX00"},
17-
"6": {"name": "Sierra (10.12)", "bid": "Mac-77F17D7DA9285301", "m": "00000000000J0DX00"},
18-
"7": {"name": "High Sierra (10.13)", "bid": "Mac-7BA5B2D9E42DDD94", "m": "00000000000J80300"},
19-
"8": {"name": "Mojave (10.14)", "bid": "Mac-7BA5B2DFE22DDD8C", "m": "00000000000KXPG00"},
20-
"9": {"name": "Catalina (10.15)", "bid": "Mac-CFF7D910A743CAAF", "m": "00000000000PHCD00"},
21-
"10": {"name": "Big Sur (11)", "bid": "Mac-2BD1B31983FE1663", "m": "00000000000000000"},
22-
"11": {"name": "Monterey (12)", "bid": "Mac-E43C1C25D4880AD6", "m": "00000000000000000"},
23-
"12": {"name": "Ventura (13)", "bid": "Mac-B4831CEBD52A0C4C", "m": "00000000000000000"},
24-
"13": {"name": "Sonoma (14)", "bid": "Mac-827FAC58A8FDFA22", "m": "00000000000000000"},
25-
"14": {"name": "Sequoia (15)", "bid": "Mac-7BA5B2D9E42DDD94", "m": "00000000000000000"},
26-
"15": {"name": "Tahoe (26, Latest)", "bid": "Mac-CFF7D910A743CAAF", "m": "00000000000000000", "latest": True},
27-
}
11+
RECOVERY_DATA = [
12+
{"name": "Lion (10.7)", "bid": "Mac-2E6FAB96566FE58C", "m": "00000000000F25Y00"},
13+
{"name": "Mountain Lion (10.8)", "bid": "Mac-7DF2A3B5E5D671ED", "m": "00000000000F65100"},
14+
{"name": "Mavericks (10.9)", "bid": "Mac-F60DEB81FF30ACF6", "m": "00000000000FNN100"},
15+
{"name": "Yosemite (10.10)", "bid": "Mac-E43C1C25D4880AD6", "m": "00000000000GDVW00"},
16+
{"name": "El Capitan (10.11)", "bid": "Mac-FFE5EF870D7BA81A", "m": "00000000000GQRX00"},
17+
{"name": "Sierra (10.12)", "bid": "Mac-77F17D7DA9285301", "m": "00000000000J0DX00"},
18+
{"name": "High Sierra (10.13)", "bid": "Mac-7BA5B2D9E42DDD94", "m": "00000000000J80300"},
19+
{"name": "Mojave (10.14)", "bid": "Mac-7BA5B2DFE22DDD8C", "m": "00000000000KXPG00"},
20+
{"name": "Catalina (10.15)", "bid": "Mac-00BE6ED71E35EB86", "m": "00000000000000000"},
21+
{"name": "Big Sur (11)", "bid": "Mac-2BD1B31983FE1663", "m": "00000000000000000"},
22+
{"name": "Monterey (12)", "bid": "Mac-E43C1C25D4880AD6", "m": "00000000000000000"},
23+
{"name": "Ventura (13)", "bid": "Mac-B4831CEBD52A0C4C", "m": "00000000000000000"},
24+
{"name": "Sonoma (14)", "bid": "Mac-827FAC58A8FDFA22", "m": "00000000000000000"},
25+
{"name": "Sequoia (15)", "bid": "Mac-7BA5B2D9E42DDD94", "m": "00000000000000000"},
26+
{"name": "Tahoe (26)", "bid": "Mac-CFF7D910A743CAAF", "m": "00000000000000000", "os": "latest"},
27+
]
2828

2929
def main():
3030
print("\033[1;36mOSX4VM Master Recovery Engine\033[0m")
3131
print("-----------------------------------")
3232

33-
for k, v in RECOVERY_DATA.items():
34-
print(f"{k.rjust(2)}. {v['name']}")
33+
for i, target in enumerate(RECOVERY_DATA, 1):
34+
print(f"{str(i).rjust(2)}. {target['name']}")
3535

3636
try:
37-
choice = input("\nSelect version to fetch (1-15): ")
38-
if choice not in RECOVERY_DATA:
37+
choice = input(f"\nSelect version to fetch (1-{len(RECOVERY_DATA)}): ")
38+
if not choice.isdigit() or not (1 <= int(choice) <= len(RECOVERY_DATA)):
3939
print("[-] Invalid selection.")
4040
return
4141

42-
target = RECOVERY_DATA[choice]
43-
print(f"[*] Fetching recovery data for {target['name']}...")
42+
target = RECOVERY_DATA[int(choice)-1]
43+
print(f"[*] Initializing secure stream for {target['name']}...")
4444

45-
# Ensure macrecovery.py exists or is fetched if needed
46-
# For the Mastered Edition, we assume it's part of the engine
4745
cmd = [
48-
sys.executable, "macrecovery.py",
49-
"-b", target["bid"],
50-
"-m", target["m"]
46+
str(sys.executable), "macrecovery.py",
47+
"--board", str(target["bid"]),
48+
"--mlb", str(target["m"]),
49+
"--os-type", str(target.get("os", "default")),
50+
"--action", "download"
5151
]
52-
53-
if target.get("latest"):
54-
cmd += ["-os", "latest"]
55-
56-
cmd.append("download")
5752

58-
print(f"[*] Executing: {' '.join(cmd)}")
59-
subprocess.run(cmd)
53+
print(f"[*] Executing official recovery logic...")
54+
subprocess.run(cmd, check=True)
6055

61-
print("\n[!] If download succeeded, you will see BaseSystem.dmg/chunklist in this folder.")
62-
print("[!] Run ./boot.sh to begin installation.")
56+
print("\n[!] Success. BaseSystem.dmg and chunklist should be in this folder.")
57+
print("[!] Next Step: Run ./boot.sh to begin installation.")
6358

6459
except KeyboardInterrupt:
6560
print("\n[-] Operation cancelled.")
61+
except subprocess.CalledProcessError:
62+
print("\n[-] Error: The recovery download failed. Check your internet connection.")
6663
except Exception as e:
67-
print(f"[-] Error: {e}")
64+
print(f"[-] Unexpected Error: {e}")
6865

6966
if __name__ == "__main__":
7067
main()

0 commit comments

Comments
 (0)