92 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
| #!/usr/bin/env python3
 | |
| import plistlib
 | |
| import base64
 | |
| import os
 | |
| import sys
 | |
| 
 | |
| def add_kernel_patches(config_path):
 | |
|     # Make a backup of the original file
 | |
|     backup_path = config_path + '.backup'
 | |
|     os.system(f'cp "{config_path}" "{backup_path}"')
 | |
|     print(f"Backup created at {backup_path}")
 | |
|     
 | |
|     # Read the plist file
 | |
|     with open(config_path, 'rb') as f:
 | |
|         config = plistlib.load(f)
 | |
|     
 | |
|     # Prepare the patch entries
 | |
|     patch1 = {
 | |
|         'Arch': 'x86_64',
 | |
|         'Base': '',
 | |
|         'Comment': 'Sonoma VM BT Enabler - PART 1 of 2 - Patch kern.hv_vmm_present=0',
 | |
|         'Count': 1,
 | |
|         'Enabled': True,
 | |
|         'Find': base64.b64decode('aGliZXJuYXRlaGlkcmVhZHkAaGliZXJuYXRlY291bnQA'),
 | |
|         'Identifier': 'kernel',
 | |
|         'Limit': 0,
 | |
|         'Mask': b'',
 | |
|         'MaxKernel': '',
 | |
|         'MinKernel': '20.4.0',
 | |
|         'Replace': base64.b64decode('aGliZXJuYXRlaGlkcmVhZHkAaHZfdm1tX3ByZXNlbnQA'),
 | |
|         'ReplaceMask': b'',
 | |
|         'Skip': 0,
 | |
|     }
 | |
|     
 | |
|     patch2 = {
 | |
|         'Arch': 'x86_64',
 | |
|         'Base': '',
 | |
|         'Comment': 'Sonoma VM BT Enabler - PART 2 of 2 - Patch kern.hv_vmm_present=0',
 | |
|         'Count': 1,
 | |
|         'Enabled': True,
 | |
|         'Find': base64.b64decode('Ym9vdCBzZXNzaW9uIFVVSUQAaHZfdm1tX3ByZXNlbnQA'),
 | |
|         'Identifier': 'kernel',
 | |
|         'Limit': 0,
 | |
|         'Mask': b'',
 | |
|         'MaxKernel': '',
 | |
|         'MinKernel': '22.0.0',
 | |
|         'Replace': base64.b64decode('Ym9vdCBzZXNzaW9uIFVVSUQAaGliZXJuYXRlY291bnQA'),
 | |
|         'ReplaceMask': b'',
 | |
|         'Skip': 0,
 | |
|     }
 | |
|     
 | |
|     # Add patches to the kernel patch section
 | |
|     if 'Kernel' in config and 'Patch' in config['Kernel']:
 | |
|         # Check if patches already exist
 | |
|         patch_exists = False
 | |
|         for patch in config['Kernel']['Patch']:
 | |
|             if isinstance(patch, dict) and 'Comment' in patch:
 | |
|                 if 'Sonoma VM BT Enabler' in patch['Comment']:
 | |
|                     patch_exists = True
 | |
|                     print(f"Patch already exists: {patch['Comment']}")
 | |
|         
 | |
|         if not patch_exists:
 | |
|             config['Kernel']['Patch'].append(patch1)
 | |
|             config['Kernel']['Patch'].append(patch2)
 | |
|             print("Added both Sonoma VM BT Enabler patches to config.plist")
 | |
|         
 | |
|     else:
 | |
|         print("Error: Could not find Kernel -> Patch section in config.plist")
 | |
|         return False
 | |
|     
 | |
|     # Write the updated plist file
 | |
|     with open(config_path, 'wb') as f:
 | |
|         plistlib.dump(config, f)
 | |
|     
 | |
|     print(f"Successfully updated {config_path}")
 | |
|     return True
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     if len(sys.argv) != 2:
 | |
|         print("Usage: python apply_appleid_kernelpatch.py /path/to/config.plist")
 | |
|         sys.exit(1)
 | |
|     
 | |
|     config_path = sys.argv[1]
 | |
|     if not os.path.exists(config_path):
 | |
|         print(f"Error: File {config_path} does not exist")
 | |
|         sys.exit(1)
 | |
|     
 | |
|     success = add_kernel_patches(config_path)
 | |
|     if success:
 | |
|         print("Patches applied successfully. Please reboot to apply changes.")
 | |
|     else:
 | |
|         print("Failed to apply patches.") |