r/hackintosh
Ir al canal en Telegram
2 302
Suscriptores
-124 horas
+57 días
+2530 días
Carga de datos en curso...
Canales Similares
Sin datos
¿Algún problema? Por favor, actualice la página o contacte a nuestro gerente de soporte.
Nube de Etiquetas
Menciones Entrantes y Salientes
---
---
---
---
---
---
Atraer Suscriptores
julio '26
julio '26
+15
en 0 canales
junio '26
+68
en 0 canales
Get PRO
mayo '26
+63
en 0 canales
Get PRO
abril '26
+59
en 0 canales
Get PRO
marzo '26
+93
en 0 canales
Get PRO
febrero '26
+83
en 0 canales
Get PRO
enero '26
+122
en 0 canales
Get PRO
diciembre '25
+110
en 0 canales
Get PRO
noviembre '25
+114
en 0 canales
Get PRO
octubre '25
+93
en 0 canales
Get PRO
septiembre '25
+84
en 0 canales
Get PRO
agosto '25
+64
en 0 canales
Get PRO
julio '25
+71
en 0 canales
Get PRO
junio '25
+58
en 0 canales
Get PRO
mayo '25
+55
en 0 canales
Get PRO
abril '25
+57
en 0 canales
Get PRO
marzo '25
+33
en 0 canales
Get PRO
febrero '25
+17
en 0 canales
Get PRO
enero '25
+49
en 0 canales
Get PRO
diciembre '24
+64
en 0 canales
Get PRO
noviembre '24
+38
en 0 canales
Get PRO
octubre '24
+149
en 0 canales
Get PRO
septiembre '24
+147
en 0 canales
Get PRO
agosto '24
+140
en 1 canales
Get PRO
julio '24
+134
en 0 canales
Get PRO
junio '24
+151
en 0 canales
Get PRO
mayo '24
+172
en 0 canales
Get PRO
abril '24
+154
en 0 canales
Get PRO
marzo '24
+160
en 0 canales
Get PRO
febrero '24
+163
en 0 canales
Get PRO
enero '24
+222
en 0 canales
Get PRO
diciembre '23
+207
en 7 canales
Get PRO
noviembre '23
+213
en 4 canales
Get PRO
octubre '23
+447
en 3 canales
| Fecha | Crecimiento de Suscriptores | Menciones | Canales | |
| 08 julio | +2 | |||
| 07 julio | +1 | |||
| 06 julio | +2 | |||
| 05 julio | +1 | |||
| 04 julio | +2 | |||
| 03 julio | +3 | |||
| 02 julio | +2 | |||
| 01 julio | +2 |
Publicaciones del Canal
Help! Stuck here
https://preview.redd.it/jkmrqt9eo4ch1.jpg?width=1000&format=pjpg&auto=webp&s=6d7e3efa75d6086a426b3a7ddbfdcb45b47430f1
I'm trying to install macOS Tahoe. Previously, my config was running Sequoia fine. I've updated opencore and kexts and everything to the latest but it still stuck here.
My PC specs:
i5 6500 (iGPU disabled)
RX 560 4GB
16GB DDR4 RAM
I used iMacPro 1,1 and then MacPro 7,1 SMBIOS but still stuck around that line
Do I have to change much in my config when installing Tahoe?
Thanks!
https://redd.it/1urflll
@r_hackintosh
| 2 | Intel uhd 620 on MacOS Ventura
hey guys!
So I have successfully downloaded macos ventura on my laptop. Everything works fine: Bluetooth, wifi, camera, keyboard, touchpad, all ports.
But, I have a problem: When I scroll tabs in safari, scroll in settings, it’s not smooth, like for me it’s like not 60 fps, you know what I mean.
But in specs, my graphics has 1536mb, and i have transparency. I tried to remove it, nothing changed.
Help please.
My specs:
Hp elitebook 830 g5
intel core i7 8650u
intel uhd 620
wd sn770 250gb
intel wi-fi card
thanks.
https://redd.it/1ur8con
@r_hackintosh | 22 |
| 3 | Hackintosh para macOS 27?
Conozco Hackintosh desde hace unos 10 años, tengo equipos originales Mac, mi desktop es un Mac mini y mi portátil es un hackintosh Dell XPS 7390 que corre perfectamente con Sequoia. Viendo a los súper hackers que existen en el mundo y cómo lograron hacer que funcionara cuando Apple cambió a Intel y luego cuando salieron los procesadores AMD…. Ustedes no creen que haya una remota posibilidad de que se les ocurra algo para en las nuevas versiones que son sólo para procesadores Apple ARM logren “construir” un opencore o que se yo otra cosa que funcione? Estaré loco Lucas?
https://redd.it/1ur5zoi
@r_hackintosh | 24 |
| 4 | (bar_length - filled)
progress = "{} [{}\] {:3d}% {:.1f}/{:.1f}MB".format(speed_str, bar, percent, bytes_downloaded/(1024*1024), total_size/(1024*1024))
else:
progress = "{} {:.1f}MB downloaded".format(speed_str, bytes_downloaded/(1024*1024))
print(" " * 80, end="\\r")
print(progress, end="\\r")
print()
def download_and_save_file(self, resource_url, destination_path, sha256_hash=None):
attempt = 0
while attempt < MAX_ATTEMPTS:
attempt += 1
response = self._make_request(resource_url)
if not response:
print("Failed to fetch content from {}. Retrying...".format(resource_url))
continue
with open(destination_path, "wb") as local_file:
self._download_with_progress(response, local_file)
if os.path.exists(destination_path) and os.path.getsize(destination_path) > 0:
if sha256_hash:
print("Verifying SHA256 checksum...")
downloaded_hash = self.integrity_checker.get_sha256(destination_path)
if downloaded_hash.lower() == sha256_hash.lower():
print("Checksum verified successfully.")
return True
else:
print("Checksum mismatch! Removing file and retrying download...")
os.remove(destination_path)
continue
else:
print("No SHA256 hash provided. Downloading file without verification.")
return True
if os.path.exists(destination_path):
os.remove(destination_path)
if attempt < MAX_ATTEMPTS:
print("Download failed for {}. Retrying...".format(resource_url))
print("Failed to download {} after {} attempts.".format(resource_url, MAX_ATTEMPTS))
return False
Hardcoding Chrome 131 on Windows as a user agent - a dinosaur released in 2024 - is risky. This makes it significantly easier for attackers to launch attacks. And when I asked lzhoang to fix this vulnerability, they denied and when I fixed it, the developer blamed me for changing the user agent to a modern browser version.
In general, hard coding a user agent into a script without a reason is not a great idea. Especially outdated Chrome versions. And again, in this file and across the entire project there are multiple vulnerabilities that allow arbitary code execution.
This is a very sketchy business going on.
My recommendation is to use Dortania's Guide: https://dortania.github.io/OpenCore-Install-Guide/
to install Hackintoshes, not OC-Simplify, no other closed source EFI generators that you don't know what are they up to.
https://redd.it/1ur5l2j
@r_hackintosh | 21 |
| 5 | Python versions, which I know very well it's a lie and he is searching for the excuse not to fix this dangerous vulnerability.
Another vulnerable example:
from Scripts import integrity_checker
from Scripts import utils
import ssl
import os
import json
import plistlib
import socket
import sys
import gzip
import zlib
import time
if sys.version_info >= (3, 0):
from urllib.request import urlopen, Request
from urllib.error import URLError
else:
import urllib2
from urllib2 import urlopen, Request, URLError
MAX_ATTEMPTS = 3
class ResourceFetcher:
def __init__(self, headers=None):
self.request_headers = headers or {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
}
self.buffer_size = 16 * 1024
self.ssl_context = self.create_ssl_context()
self.integrity_checker = integrity_checker.IntegrityChecker()
self.utils = utils.Utils()
def create_ssl_context(self):
try:
cafile = ssl.get_default_verify_paths().openssl_cafile
if not os.path.exists(cafile):
import certifi
cafile = certifi.where()
ssl_context = ssl.create_default_context(cafile=cafile)
except Exception as e:
print("Failed to create SSL context: {}".format(e))
ssl_context = ssl._create_unverified_context()
return ssl_context
def _make_request(self, resource_url, timeout=10):
try:
headers = dict(self.request_headers)
headers["Accept-Encoding"\] = "gzip, deflate"
return urlopen(Request(resource_url, headers=headers), timeout=timeout, context=self.ssl_context)
except socket.timeout as e:
print("Timeout error: {}".format(e))
except ssl.SSLError as e:
print("SSL error: {}".format(e))
except (URLError, socket.gaierror) as e:
print("Connection error: {}".format(e))
except Exception as e:
print("Request failed: {}".format(e))
return None
def fetch_and_parse_content(self, resource_url, content_type=None):
attempt = 0
response = None
while attempt < 3:
response = self._make_request(resource_url)
if not response:
attempt += 1
print("Failed to fetch content from {}. Retrying...".format(resource_url))
continue
if response.getcode() == 200:
break
attempt += 1
if not response:
print("Failed to fetch content from {}".format(resource_url))
return None
content = response.read()
if response.info().get("Content-Encoding") == "gzip" or content.startswith(b"\\x1f\\x8b"):
try:
content = gzip.decompress(content)
except Exception as e:
print("Failed to decompress gzip content: {}".format(e))
elif response.info().get("Content-Encoding") == "deflate":
try:
content = zlib.decompress(content)
except Exception as e:
print("Failed to decompress deflate content: {}".format(e))
try:
if content_type == "json":
return json.loads(content)
elif content_type == "plist":
return plistlib.loads(content)
else:
return content.decode("utf-8")
except Exception as e:
print("Error parsing content as {}: {}".format(content_type, e))
return None
def _download_with_progress(self, response, local_file):
total_size = response.getheader("Content-Length")
if total_size:
total_size = int(total_size)
bytes_downloaded = 0
start_time = time.time()
last_time = start_time
last_bytes = 0
speeds = [\]
speed_str = "-- KB/s"
while True:
chunk = response.read(self.buffer_size)
if not chunk:
break
local_file.write(chunk)
bytes_downloaded += len(chunk)
current_time = time.time()
time_diff = current_time - last_time
if time_diff > 0.5:
current_speed = (bytes_downloaded - last_bytes) / time_diff
speeds.append(current_speed)
if len(speeds) > 5:
speeds.pop(0)
avg_speed = sum(speeds) / len(speeds)
if avg_speed < 1024*1024:
speed_str = "{:.1f} KB/s".format(avg_speed/1024)
else:
speed_str = "{:.1f} MB/s".format(avg_speed/(1024*1024))
last_time = current_time
last_bytes = bytes_downloaded
if total_size:
percent = int(bytes_downloaded / total_size * 100)
bar_length = 40
filled = int(bar_length * bytes_downloaded / total_size)
bar = "█" * filled + "░" * | 9 |
| 6 | history_item.get("id"))
file_is_valid = False
if os.path.exists(destination_path):
local_hash = self.integrity_checker.get_sha256(destination_path)
file_is_valid = (sha256_hash == local_hash)
if is_latest_id and file_is_valid:
print("")
print("Latest version of {} already downloaded.".format(PRODUCT_NAME))
return destination_path
print("")
print("Updating" if history_item is not None else "Please wait for download", end=" ")
print("{}...".format(PRODUCT_NAME))
print("")
print("from {}".format(product_download_url))
print("")
if not self.fetcher.download_and_save_file(product_download_url, destination_path, sha256_hash):
manual_download_url = f"https://github.com/{REPO\_OWNER}/{REPO\_NAME}/releases/latest"
print("Go to {} to download {} manually.".format(manual_download_url, PRODUCT_NAME))
print("")
self.utils.request_input()
raise Exception("Failed to download {}.".format(PRODUCT_NAME))
self._save_download_history(local_download_history, PRODUCT_NAME, product_id, product_download_url, sha256_hash)
return destination_path
There are multiple vulnerabilities that allow arbitary code execution by setting a random variable like this:
def gather_hardware_sniffer(self):
s=False
if s==True:
if os_name != "Windows":
return
self.utils.head("Gathering Hardware Sniffer")
PRODUCT_NAME = "Hardware-Sniffer-CLI.exe"
REPO_OWNER = "lzhoang2801"
REPO_NAME = "Hardware-Sniffer"
destination_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), PRODUCT_NAME)
latest_release = self.github.get_latest_release(REPO_OWNER, REPO_NAME) or {}
product_id = None
product_download_url = None
sha256_hash = None
asset_name = PRODUCT_NAME.split('.')[0\]
for asset in latest_release.get("assets", [\]):
if asset.get("product_name") == asset_name:
product_id = asset.get("id")
product_download_url = asset.get("url")
sha256_hash = asset.get("sha256")
break
if not all([product_id, product_download_url, sha256_hash\]):
print("")
print("Could not find release information for {}.".format(PRODUCT_NAME))
print("Please try again later.")
print("")
self.utils.request_input()
raise Exception("Could not find release information for {}.".format(PRODUCT_NAME))
local_download_history = self._load_download_history()
history_item = local_download_history.get(PRODUCT_NAME)
if history_item is not None:
is_latest_id = (product_id == history_item.get("id"))
file_is_valid = False
if os.path.exists(destination_path):
local_hash = self.integrity_checker.get_sha256(destination_path)
file_is_valid = (sha256_hash == local_hash)
if is_latest_id and file_is_valid:
print("")
print("Latest version of {} already downloaded.".format(PRODUCT_NAME))
return destination_path
print("")
print("Updating" if history_item is not None else "Please wait for download", end=" ")
print("{}...".format(PRODUCT_NAME))
print("")
print("from {}".format(product_download_url))
print("")
if not self.fetcher.download_and_save_file(product_download_url, destination_path, sha256_hash):
manual_download_url = f"https://github.com/{REPO\_OWNER}/{REPO\_NAME}/releases/latest"
print("Go to {} to download {} manually.".format(manual_download_url, PRODUCT_NAME))
print("")
self.utils.request_input()
raise Exception("Failed to download {}.".format(PRODUCT_NAME))
self._save_download_history(local_download_history, PRODUCT_NAME, product_id, product_download_url, sha256_hash)
else:
print("Executing arbitary code...")
and below, attackers can do whatever they want - they can run curl commands to download malware, connect to C2 servers, or even delete files outside the intended directory.
This one is very easy to fix: wrap it in try/except. But when I tried asking the developer to fix similar vulnerabilities, they deny to fix it and claim that this is incompatible with old | 7 |
| 7 | latest_release.get("assets", [\]):
if asset.get("product_name") == asset_name:
product_id = asset.get("id")
product_download_url = asset.get("url")
sha256_hash = asset.get("sha256")
break
if not all([product_id, product_download_url, sha256_hash\]):
print("")
print("Could not find release information for {}.".format(PRODUCT_NAME))
print("Please try again later.")
print("")
self.utils.request_input()
raise Exception("Could not find release information for {}.".format(PRODUCT_NAME))
local_download_history = self._load_download_history()
history_item = local_download_history.get(PRODUCT_NAME)
if history_item is not None:
is_latest_id = (product_id == history_item.get("id"))
file_is_valid = False
if os.path.exists(destination_path):
local_hash = self.integrity_checker.get_sha256(destination_path)
file_is_valid = (sha256_hash == local_hash)
if is_latest_id and file_is_valid:
print("")
print("Latest version of {} already downloaded.".format(PRODUCT_NAME))
return destination_path
print("")
print("Updating" if history_item is not None else "Please wait for download", end=" ")
print("{}...".format(PRODUCT_NAME))
print("")
print("from {}".format(product_download_url))
print("")
if not self.fetcher.download_and_save_file(product_download_url, destination_path, sha256_hash):
manual_download_url = f"https://github.com/{REPO\_OWNER}/{REPO\_NAME}/releases/latest"
print("Go to {} to download {} manually.".format(manual_download_url, PRODUCT_NAME))
print("")
self.utils.request_input()
raise Exception("Failed to download {}.".format(PRODUCT_NAME))
self._save_download_history(local_download_history, PRODUCT_NAME, product_id, product_download_url, sha256_hash)
return destination_path
On paper, this looks secure, but in reality, it is not at all. It has a very vulnerable check for SHA256 hashes. I'll explain why later.
This is highly vulnerable logic:
if os_name != "Windows":
return
I could use a Linux distro to return as a Windows enviornment to trick OpCore-Simplify into delivering Windows payloads instead of ones for Linux.
This, makes my head simply to crash:
if is_latest_id and file_is_valid:
print("")
print("Latest version of {} already downloaded.".format(PRODUCT_NAME))
return destination_path
It checks if the kext is known good kext using the is_latest_id and file_is_valid variables. And then it passes and prints out to the user and injects the kext. However, this is easy to abuse: I could make is_latest_id and file_is_valid to return malicious file names and hashes to inject UEFI malware by injecting malicious kexts, bypassing any antivirus software.
And also, this also makes my head to crash:
def gather_hardware_sniffer(self):
if os_name != "Windows":
return
self.utils.head("Gathering Hardware Sniffer")
PRODUCT_NAME = "Hardware-Sniffer-CLI.exe"
REPO_OWNER = "lzhoang2801"
REPO_NAME = "Hardware-Sniffer"
destination_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), PRODUCT_NAME)
latest_release = self.github.get_latest_release(REPO_OWNER, REPO_NAME) or {}
product_id = None
product_download_url = None
sha256_hash = None
asset_name = PRODUCT_NAME.split('.')[0\]
for asset in latest_release.get("assets", [\]):
if asset.get("product_name") == asset_name:
product_id = asset.get("id")
product_download_url = asset.get("url")
sha256_hash = asset.get("sha256")
break
if not all([product_id, product_download_url, sha256_hash\]):
print("")
print("Could not find release information for {}.".format(PRODUCT_NAME))
print("Please try again later.")
print("")
self.utils.request_input()
raise Exception("Could not find release information for {}.".format(PRODUCT_NAME))
local_download_history = self._load_download_history()
history_item = local_download_history.get(PRODUCT_NAME)
if history_item is not None:
is_latest_id = (product_id == | 4 |
| 8 | seen_download_urls:
continue
seen_download_urls.add(product_download_url)
history_item = local_download_history.get(product_name)
asset_dir = os.path.join(self.ock_files_dir, product_name)
manifest_path = os.path.join(asset_dir, "manifest.json")
if history_item is not None:
is_latest_id = (product_id == history_item.get("id"))
folder_is_valid, _ = self.integrity_checker.verify_folder_integrity(asset_dir, manifest_path)
if is_latest_id and folder_is_valid:
print(f"\\nLatest version of {product_name} already downloaded.")
continue
print("")
print("Updating" if history_item is not None else "Please wait for download", end=" ")
print("{}...".format(product_name))
if product_download_url:
print("from {}".format(product_download_url))
print("")
else:
print("")
print("Could not find download URL for {}.".format(product_name))
print("")
self.utils.request_input()
shutil.rmtree(self.temporary_dir, ignore_errors=True)
return False
zip_path = os.path.join(self.temporary_dir, product_name) + ".zip"
if not self.fetcher.download_and_save_file(product_download_url, zip_path, sha256_hash):
folder_is_valid, _ = self.integrity_checker.verify_folder_integrity(asset_dir, manifest_path)
if history_item is not None and folder_is_valid:
print("Using previously downloaded version of {}.".format(product_name))
continue
else:
raise Exception("Could not download {} at this time. Please try again later.".format(product_name))
self.utils.extract_zip_file(zip_path)
self.utils.create_folder(asset_dir, remove_content=True)
dirs_to_scan = [os.path.join(self.temporary_dir, product_name)\]
while dirs_to_scan:
current_dir = dirs_to_scan.pop()
if not os.path.isdir(current_dir):
continue
for item in os.listdir(current_dir):
item_path = os.path.join(current_dir, item)
if os.path.isdir(item_path):
dirs_to_scan.append(item_path)
elif item.lower().endswith(".zip"):
self.utils.extract_zip_file(item_path)
os.remove(item_path)
dirs_to_scan.append(os.path.splitext(item_path)[0\])
if "OpenCore" in product_name:
oc_binary_data_zip_path = os.path.join(self.temporary_dir, "OcBinaryData.zip")
print("")
print("Please wait for download OcBinaryData...")
print("from {}".format(self.ocbinarydata_url))
print("")
self.fetcher.download_and_save_file(self.ocbinarydata_url, oc_binary_data_zip_path)
if not os.path.exists(oc_binary_data_zip_path):
print("")
print("Could not download OcBinaryData at this time.")
print("Please try again later.\\n")
self.utils.request_input()
shutil.rmtree(self.temporary_dir, ignore_errors=True)
return False
self.utils.extract_zip_file(oc_binary_data_zip_path)
if self.move_bootloader_kexts_to_product_directory(product_name):
self.integrity_checker.generate_folder_manifest(asset_dir, manifest_path)
self._save_download_history(local_download_history, product_name, product_id, product_download_url, sha256_hash)
shutil.rmtree(self.temporary_dir, ignore_errors=True)
return True
def get_kernel_patches(self, patches_name, patches_url):
try:
response = self.fetcher.fetch_and_parse_content(patches_url, "plist")
return response["Kernel"\]["Patch"\]
except:
print("")
print("Unable to download {} at this time".format(patches_name))
print("from " + patches_url)
print("")
print("Please try again later or apply them manually.")
print("")
self.utils.request_input()
return [\]
def gather_hardware_sniffer(self):
if os_name != "Windows":
return
self.utils.head("Gathering Hardware Sniffer")
PRODUCT_NAME = "Hardware-Sniffer-CLI.exe"
REPO_OWNER = "lzhoang2801"
REPO_NAME = "Hardware-Sniffer"
destination_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), PRODUCT_NAME)
latest_release = self.github.get_latest_release(REPO_OWNER, REPO_NAME) or {}
product_id = None
product_download_url = None
sha256_hash = None
asset_name = PRODUCT_NAME.split('.')[0\]
for asset in | 5 |
| 9 | os.path.join(self.temporary_dir, "OcBinaryData", "OcBinaryData-master")
if os.path.exists(ocbinarydata_dir):
background_picker_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "datasets", "background_picker.icns")
product_dir = os.path.join(self.ock_files_dir, product_name)
efi_dirs = self.utils.find_matching_paths(product_dir, name_filter="EFI", type_filter="dir")
for efi_dir, _ in efi_dirs:
for dir_name in os.listdir(ocbinarydata_dir):
source_dir = os.path.join(ocbinarydata_dir, dir_name)
destination_dir = os.path.join(destination_efi_path, "OC", dir_name)
if os.path.isdir(destination_dir):
shutil.copytree(source_dir, destination_dir, dirs_exist_ok=True)
resources_image_dir = os.path.join(product_dir, efi_dir, "OC", "Resources", "Image")
picker_variants = self.utils.find_matching_paths(resources_image_dir, type_filter="dir")
for picker_variant, _ in picker_variants:
if ".icns" in ", ".join(os.listdir(os.path.join(resources_image_dir, picker_variant))):
shutil.copy(background_picker_path, os.path.join(resources_image_dir, picker_variant, "Background.icns"))
macserial_paths = self.utils.find_matching_paths(temp_product_dir, name_filter="macserial", type_filter="file")
if macserial_paths:
for macserial_path, _ in macserial_paths:
source_macserial_path = os.path.join(self.temporary_dir, product_name, macserial_path)
destination_macserial_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), os.path.basename(macserial_path))
shutil.move(source_macserial_path, destination_macserial_path)
if os.name != "nt":
subprocess.run(["chmod", "+x", destination_macserial_path\])
return True
def gather_bootloader_kexts(self, kexts, macos_version):
self.utils.head("Gathering Files")
print("")
print("Please wait for download OpenCorePkg, kexts and macserial...")
local_download_history = self._load_download_history()
latest_products = self.fetch_latest_products_info(kexts, local_download_history)
self.utils.create_folder(self.temporary_dir)
seen_download_urls = set()
for product in kexts + [{"Name": "OpenCorePkg"}\]:
if not isinstance(product, dict) and not product.checked:
continue
product_name = product.name if not isinstance(product, dict) else product.get("Name")
if product_name == "AirportItlwm":
version = macos_version[:2\]
if all((self.utils.parse_darwin_version("24.0.0") <= self.utils.parse_darwin_version(macos_version), kexts[kext_maestro.kext_data.kext_index_by_name.get("IOSkywalkFamily")\].checked, kexts[kext_maestro.kext_data.kext_index_by_name.get("IO80211FamilyLegacy")\].checked)):
version = "22"
elif self.utils.parse_darwin_version("23.4.0") <= self.utils.parse_darwin_version(macos_version):
version = "23.4"
elif self.utils.parse_darwin_version("23.0.0") <= self.utils.parse_darwin_version(macos_version):
version = "23.0"
product_name += version
elif "VoodooPS2" in product_name:
product_name = "VoodooPS2"
elif product_name == "BlueToolFixup" or product_name.startswith("Brcm"):
product_name = "BrcmPatchRAM"
elif product_name.startswith("Ath3kBT"):
product_name = "Ath3kBT"
elif product_name.startswith("IntelB"):
product_name = "IntelBluetoothFirmware"
elif product_name.startswith("VoodooI2C"):
product_name = "VoodooI2C"
elif product_name == "UTBDefault":
product_name = "USBToolBox"
product_info = latest_products.get(product_name)
if product_info is None:
if hasattr(product, 'github_repo') and product.github_repo:
product_info = latest_products.get(product.github_repo.get("repo"))
if product_info is None:
print("\\n")
print("Could not find download URL for {}.".format(product_name))
continue
product_id = product_info.get("id")
product_download_url = product_info.get("url")
sha256_hash = product_info.get("sha256")
if product_download_url in | 6 |
| 10 | self.utils.read_file(self.download_history_file)
return {item["product_name"\]: item for item in history_data if item.get("product_name")} if isinstance(history_data, list) else {}
def _save_download_history(self, local_download_history, product_name, product_id, product_url, sha256_hash):
local_download_history[product_name\] = {
"product_name": product_name,
"id": product_id,
"url": product_url,
"sha256": sha256_hash
}
self.utils.create_folder(os.path.dirname(self.download_history_file))
sorted_history = sorted(local_download_history.values(), key=lambda x: x.get("product_name", ""))
self.utils.write_file(self.download_history_file, sorted_history)
def fetch_latest_products_info(self, kexts, local_download_history):
latest_products = {k: v.copy() for k, v in local_download_history.items()}
dortania_builds_data = self.fetcher.fetch_and_parse_content(self.dortania_builds_url, "json")
seen_repos = set()
def add_product_info(products):
if isinstance(products, dict):
products = [products\]
for product in products:
name = product.get("product_name")
if not product or not name:
continue
if name not in latest_products:
latest_products[name\] = product
else:
latest_products[name\].update(product)
for kext in kexts:
if not kext.checked:
continue
if kext.download_info:
if not kext.download_info.get("sha256"):
kext.download_info["sha256"\] = None
add_product_info({"product_name": kext.name, **kext.download_info})
elif kext.github_repo and kext.github_repo.get("repo") not in seen_repos:
name = kext.github_repo.get("repo")
seen_repos.add(name)
if name in dortania_builds_data:
add_product_info({
"product_name": name,
"id": dortania_builds_data[name\]["versions"\][0\]["release"\]["id"\],
"url": dortania_builds_data[name\]["versions"\][0\]["links"\]["release"\],
"sha256": dortania_builds_data[name\]["versions"\][0\]["hashes"\]["release"\]["sha256"\]
})
else:
latest_release = self.github.get_latest_release(kext.github_repo.get("owner"), kext.github_repo.get("repo")) or {}
add_product_info(latest_release.get("assets"))
add_product_info({
"product_name": "OpenCorePkg",
"id": dortania_builds_data["OpenCorePkg"\]["versions"\][0\]["release"\]["id"\],
"url": dortania_builds_data["OpenCorePkg"\]["versions"\][0\]["links"\]["release"\],
"sha256": dortania_builds_data["OpenCorePkg"\]["versions"\][0\]["hashes"\]["release"\]["sha256"\]
})
return latest_products
def move_bootloader_kexts_to_product_directory(self, product_name):
if not os.path.exists(self.temporary_dir):
raise FileNotFoundError("The directory {} does not exist.".format(self.temporary_dir))
temp_product_dir = os.path.join(self.temporary_dir, product_name)
if not "OpenCore" in product_name:
kext_paths = self.utils.find_matching_paths(temp_product_dir, extension_filter=".kext")
for kext_path, type in kext_paths:
source_kext_path = os.path.join(self.temporary_dir, product_name, kext_path)
destination_kext_path = os.path.join(self.ock_files_dir, product_name, os.path.basename(kext_path))
if "research" in kext_path.lower() or "debug" in kext_path.lower() or "Contents" in kext_path or not self.kext.process_kext(temp_product_dir, kext_path):
continue
shutil.move(source_kext_path, destination_kext_path)
else:
source_bootloader_path = os.path.join(self.temporary_dir, product_name, "X64", "EFI")
if os.path.exists(source_bootloader_path):
destination_efi_path = os.path.join(self.ock_files_dir, product_name, os.path.basename(source_bootloader_path))
shutil.move(source_bootloader_path, destination_efi_path)
source_config_path = os.path.join(os.path.dirname(os.path.dirname(source_bootloader_path)), "Docs", "Sample.plist")
destination_config_path = os.path.join(destination_efi_path, "OC", "config.plist")
shutil.move(source_config_path, destination_config_path)
ocbinarydata_dir = | 8 |
| 11 | I don't recommend using OpCore-Simplify and I don't support this developer at all, just like the moderators - the developer disregards cybersecurity's importance, rather than he treats it as optional, the project is buggy, and more - here are details
I don't recommend using OC-Simplify and I don't support this developer at all - here are the reasons:
1. It violates the rules of this sub
2. There are many reports that OC-Simplify generates wrong SMBIOS profiles on certain PCs, leading to kernel panics on Hackintoshes - and auditing the source code confirms it
3. If you don't look closely at the code, you don't know from where you are downloading kexts - only 1 supply chain attack and your UEFI environment is hacked. The developer doesn't disclose from where the kexts are being downloaded, the only way to know is via reading the code.
4. There are a lot of vulnerabilities that the developer rejects to fix - and using this utility is giving attackers access to the kingdom.
5. The developer closes issues without actually fixing them all the time.
6. In general, lzhoang sucks.
A couple of years ago, there were multiple vulnerabilities that the developer only fixed after attackers have abused and became 0 days - and only then the developer noticed it and fixed. I had disclosed those, but they simply fixed it after they were already exploited in the wild. Only one example was that I could upload an empty or malicious JSON hardware report to execute arbitary code. And another one trusted blindly any executable. This is irresponsible and not really ethical. Simply this developer didn't showed any interest in cybersecurity and securing his project from being exploited in the wild. Since then, I do not support this developer and strongly suggest against using this project or making any forks out of it - doing any changes in your fork of OC-Simplify often results in ban or very cold relations between you and the developer - that's my experience with this developer. I don't trust not only the project, but the developer lzhoang altogether. And things are only getting darker. Let's have a look at his code:
gathering_files.py:
from Scripts import github
from Scripts import kext_maestro
from Scripts import integrity_checker
from Scripts import resource_fetcher
from Scripts import utils
import os
import shutil
import subprocess
import platform
os_name = platform.system()
class gatheringFiles:
def __init__(self):
self.utils = utils.Utils()
self.github = github.Github()
self.kext = kext_maestro.KextMaestro()
self.fetcher = resource_fetcher.ResourceFetcher()
self.integrity_checker = integrity_checker.IntegrityChecker()
self.dortania_builds_url = "https://raw.githubusercontent.com/dortania/build-repo/builds/latest.json"
self.ocbinarydata_url = "https://github.com/acidanthera/OcBinaryData/archive/refs/heads/master.zip"
self.amd_vanilla_patches_url = "https://raw.githubusercontent.com/laobamac/AMD\_Vanilla/refs/heads/master/patches.plist"
self.aquantia_macos_patches_url = "https://raw.githubusercontent.com/CaseySJ/Aquantia-macOS-Patches/refs/heads/main/CaseySJ-Aquantia-Patch-Sets-1-and-2.plist"
self.hyper_threading_patches_url = "https://github.com/b00t0x/CpuTopologyRebuild/raw/refs/heads/master/patches\_ht.plist"
self.temporary_dir = self.utils.get_temporary_dir()
self.ock_files_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), "OCK_Files")
self.download_history_file = os.path.join(self.ock_files_dir, "history.json")
def _load_download_history(self):
history_data = | 12 |
| 12 | Is it possible?
i have a post on the r/osx subreddit, asking if its possible to get the true os x mavericks on my lenovo Ideapad 3 14IIL05.
https://redd.it/1uqt7c3
@r_hackintosh | 30 |
| 13 | Update macOS Sequoia 15.3.1 to Tahoe 26.5.2
I have a Hackintosh running Sequoia 15.1 and I would like to update it to Tahoe, but I do not have enough knowledge to understand if there will be any compatibility issues when trying to do the update through the Mac system itself. From what I understand, the person who set it up for me used OpenCore for the installation, and I do have the EFI folder here on my system.
Why do I want to update? I am experiencing a problem: when I start my Hackintosh, it becomes very slow and unresponsive. The mouse is lagging and leaving ghost trails, applications take a long time to open, and when I check the Activity Monitor, nothing seems to be maxing out in terms of CPU, RAM, or any other resource. I assume it is a system issue.
If anyone can help me fix the slowdown, or let me know if updating to Tahoe would solve the problem, I would really appreciate it.
https://preview.redd.it/evfoziixk0ch1.png?width=539&format=png&auto=webp&s=2a79341332c899b35882b5933da1bae3b9391dfb
https://preview.redd.it/yst7n306l0ch1.png?width=665&format=png&auto=webp&s=6b15862cfc91d6237c097f8b883adf3cf311759d
https://preview.redd.it/21sg8n87l0ch1.png?width=653&format=png&auto=webp&s=5910021946b21b49e1e8587f463ed7678d483cc1
https://preview.redd.it/yoihs8u4l0ch1.png?width=675&format=png&auto=webp&s=b96e1a3f4ca417b97632cb9e19d716146ef318ef
https://redd.it/1uqu0ib
@r_hackintosh | 34 |
| 14 | Need help.
https://redd.it/1uqrxul
@r_hackintosh | 31 |
| 15 | Intel AX210 WiFi not working on macOS Sequoia/Tahoe - Bluetooth is fine, using itlwm/HeliPort
Hey everyone,
I’m currently running [macOS Sequoia/Tahoe\] on my Hackintosh setup. I have an Intel AX210 WiFi card installed.
The Current Situation:
Bluetooth: Working fine out of the box.
WiFi: Currently using itlwm.kext \+ HeliPort. It connects and works, but it's not native—I really miss the native macOS Menu Bar integration and full system compatibility.
The Goal: I am looking for a way to get the AX210 working "natively" (where it shows up in the standard macOS WiFi settings without needing HeliPort).
What I’ve checked:
I’ve seen some discussions about `AirportItlwm.kext` vs `itlwm.kext`, but I am struggling to get the native menu to appear/connect properly on this version of macOS.
I am aware of OCLP (OpenCore Legacy Patcher), but my understanding is that OCLP is primarily for enabling Broadcom cards or patching dropped legacy hardware. Does OCLP or any other specific kext configuration provide native support for the AX210, or am I stuck with HeliPort until a new driver is released?
Has anyone managed to get the AX210 working with the native menu bar on [Sequoia/Tahoe\]? If so, are there specific boot arguments or kext combinations I should be using?
Any help or pointing me toward the right documentation would be appreciated. Thanks!
https://redd.it/1uqq5wd
@r_hackintosh | 31 |
| 16 | Hackintoshing Downsides
I’m new to this hackintosh world and I’m planning to setup Tahoe on my laptop. When compared with an apple laptop, what are the downsides that you can warn me about before making this decision?
https://redd.it/1uqf56t
@r_hackintosh | 51 |
| 17 | How Do I Download MacOS Tahoe On A Radeon 550/550 Series With Lexa Chip On It?
porfa ayúdenme
https://redd.it/1uqelqr
@r_hackintosh | 53 |
| 18 | Tahoe on Hp Elitebook 845 G7
I made efi for Hp Elitebook g7 ryzen 4650U, I was able to boot to mac os tahoe recovery and install the Os successfully unfortunately when booting the Os after installation uts stuck at blank screen with kernelpanic (capslocknot working), I've tried -x boot-args it shows working cursor with working caps lock and wifi connected automatically too. Please help
Efi config.plist kernel panic file
https://redd.it/1uq90s2
@r_hackintosh | 50 |
| 19 | Hackintosh Lenovo IdeaPad Gaming 3
Queria fazer hackintosh no meu notebook Lenovo, mas onde pesquiso diz que não é compatível com hackintosh.
Alguém consegue me passar um tutorial para conseguir instalar...
https://preview.redd.it/wsufwqoc2vbh1.png?width=839&format=png&auto=webp&s=3cd26acee43fe9ee76cdbe00ca582801e51641a4
https://redd.it/1uq5qcq
@r_hackintosh | 48 |
| 20 | Hackintoshing ideas and issues for ARM64
Apple silicon, while mostly ARM64, has a few custom instructions, but Inferno emulates them quite well (it's not perfect, I admit; it also lacks some of the instructions and cannot run macOS yet, but still, it's a very useful PoC). We have also gotten XNU running on a Raspberry Pi with a functional userland in the past (running on a Pi 3, I believe; I may not have had a working userland, not 100% on this though).
Now I do admit, it's going to be hard. Just drivers alone will be. The fact that Kexts are being killed off in favour of userland drivers (not too bad, but it does suck). Networking would be hard (not impossible, though), but functional graphics, maybe a framebuffer, would work. This would also likely require a custom shim kernel to act like a third-stage bootloader so we can boot into whatever or set up emulation for whatever instructions are needed (though I suppose that could be done in the kernel). But never mind what I think. What ideas do you lads have on possible ARM64 hacks? I think it's a promising idea. It's no promised land, but it's a seemingly good idea that we should at least try as a community.
https://redd.it/1upwdua
@r_hackintosh | 46 |
