
Apple के PCC फर्मवेयर से VPHONE600AP घटकों का उपयोग करके एक वर्चुअल iPhone बनाने की मार्गदर्शिका, जिसमें फर्मवेयर पैचिंग, बूटचेन संशोधन और iOS सुरक्षा अनुसंधान के लिए कर्नेल डिबगिंग शामिल है।
2024 के अंत के आसपास, Apple ने Private Cloud Compute पेश करना शुरू किया, जो क्लाउड-आधारित AI गोपनीयता के लिए नए क्षितिज खोलने का दावा करता था। फिर, 2025 के अंत के आसपास, कुछ दिलचस्प खबरें सामने आईं: Apple ने PCC फर्मवेयर में cloudOS 26 से शुरू होकर vphone600ap-संबंधित घटकों को नया जोड़ा था।

स्रोत: https://x.com/matteyeux/status/2006339694783848660/photo/1
“iPhone अनुसंधान पर्यावरण वर्चुअल मशीन”?
क्या यह Apple की ओर से भविष्य में अन्य सुरक्षा शोधकर्ताओं के लिए वर्चुअल iPhone पर्यावरण बनाने और वितरित करने की योजनाबद्ध चाल है, या यह केवल एक गलती थी? यह देखते हुए कि 2021 में iOS 15.0 बीटा से 15.1 बीटा3 OTA में DEVELOPMENT/KASAN बिल्ड कर्नेल की खोज की गई थी, चूक की संभावना से इनकार नहीं किया जा सकता। उस समय, कर्नेल लगभग 4 महीने तक शामिल रहा, मोटे तौर पर जून से अक्टूबर 2021 तक।
फिर, इस वर्ष जनवरी के आसपास, एक ट्वीट पोस्ट किया गया जिसमें इन vphone600ap-संबंधित घटकों का उपयोग करके एक वर्चुअल iPhone को बूट होते दिखाया गया।

स्रोत: https://x.com/_inside/status/2008951845725548783

मैंने जो देखा, उससे लगभग सब कुछ वास्तव में सुंदरता से काम करता था। QEMUAppleSilicon(Inferno) प्रोजेक्ट की तुलना में जो मैंने पहले देखा था, यह बहुत अधिक तेज़ और चिकना चलता है। इसके अलावा, यह Metal त्वरण का भी समर्थन करता प्रतीत होता है। अंततः, इससे पूरी तरह मोहित होकर, मैंने 31 जनवरी को अपना स्वयं का वर्चुअल iPhone बनाना शुरू कर दिया।

संदर्भित प्रोजेक्ट security-pcc है। यह /System/Library/SecurityResearch/usr/bin/vrevm बाइनरी के स्रोत कोड से मेल खाता है। एक दिलचस्प बात यह है कि यह Virtualization.framework द्वारा प्रदान की गई निजी विधियों का उपयोग करता है। PCC अनुसंधान के लिए उपयोग की जाने वाली वर्चुअल मशीन में, आप देख सकते हैं कि हार्डवेयर मॉडल आरंभीकरण प्रक्रिया के दौरान ISA और PlatformVersion स्पष्ट रूप से निर्दिष्ट किए गए हैं।

बूटरॉम के लिए, AVPBooter.vresearch1.bin का उपयोग किया जाता है (/System/Library/Frameworks/Virtualization.framework/Resources/AVPBooter.vresearch1.bin)

और SEPROM (avpsepbooter) के लिए, AVPSEPBooter.vresearch1.bin का उपयोग किया जाता है, जो अलग से एक SEPStorage फ़ाइल लोड करता है जो AuxiliaryStorage के समान कार्य करती है। (/System/Library/Frameworks/Virtualization.framework/Versions/A/Resources/AVPSEPBooter.vresearch1.bin)
एक और दिलचस्प बात यह है कि यदि आप रिज़ॉल्यूशन सेट करने के कोड को देखते हैं, तो यह 1290x2796 पर सेट है, जो iPhone 14 Pro Max, 15 Plus, 15 Pro Max, और 16 Plus उपकरणों के अनुरूप है।

इस जानकारी के साथ, वर्चुअल iPhone को बूट करने के लिए super-tart को संशोधित करना पर्याप्त से अधिक होना चाहिए। मैंने नीचे दिखाए अनुसार संशोधन किए।
/Sources/tart/VM.swift```swift ... class VM: NSObject, VZVirtualMachineDelegate, ObservableObject { ... // vzHardwareModel derives the VZMacHardwareModel config specific to the "platform type" // of the VM (currently only vresearch101 supported) static private func vzHardwareModel_VRESEARCH101() throws -> VZMacHardwareModel { var hw_model: VZMacHardwareModel
guard let hw_descriptor = _VZMacHardwareModelDescriptor() else { fatalError("Failed to create hardware descriptor") } hw_descriptor.setPlatformVersion(3) // .appleInternal4 = 3 hw_descriptor.setBoardID(0x90) hw_descriptor.setISA(2) hw_model = VZMacHardwareModel._hardwareModel(withDescriptor: hw_descriptor)
guard hw_model.isSupported else { fatalError("VM hardware config not supported (model.isSupported = false)") }
return hw_model }
static func craftConfiguration( diskURL: URL, nvramURL: URL, romURL: URL, sepromURL: URL? = nil, vmConfig: VMConfig, network: Network = NetworkShared(), additionalStorageDevices: [VZStorageDeviceConfiguration], directorySharingDevices: [VZDirectorySharingDeviceConfiguration], serialPorts: [VZSerialPortConfiguration], suspendable: Bool = false, nested: Bool = false, audio: Bool = true, clipboard: Bool = true, sync: VZDiskImageSynchronizationMode = .full, caching: VZDiskImageCachingMode? = nil ) throws -> VZVirtualMachineConfiguration { let configuration: VZVirtualMachineConfiguration = .init()
// Boot loader let bootloader = try vmConfig.platform.bootLoader(nvramURL: nvramURL) Dynamic(bootloader)._setROMURL(romURL) configuration.bootLoader = bootloader
// SEP ROM let homeURL = FileManager.default.homeDirectoryForCurrentUser var sepstoragePath = homeURL.appendingPathComponent(".tart/vms/vphone/SEPStorage").path let sepstorageURL = URL(fileURLWithPath: sepstoragePath) let sep_config = Dynamic._VZSEPCoprocessorConfiguration(storageURL: sepstorageURL) if let sepromURL { // default AVPSEPBooter.vresearch1.bin from VZ framework sep_config.romBinaryURL = sepromURL } sep_config.debugStub = Dynamic._VZGDBDebugStubConfiguration(port: 8001) configuration._setCoprocessors([sep_config.asObject])
// Some vresearch101 config let pconf = VZMacPlatformConfiguration() pconf.hardwareModel = try vzHardwareModel_VRESEARCH101()
let serial = Dynamic._VZMacSerialNumber.initWithString("AAAAAA1337") let identifier = Dynamic.VZMacMachineIdentifier._machineIdentifierWithECID(0x1111111111111111, serialNumber: serial.asObject) pconf.machineIdentifier = identifier.asObject as! VZMacMachineIdentifier
pconf._setProductionModeEnabled(true) var auxiliaryStoragePath = homeURL.appendingPathComponent(".tart/vms/vphone/nvram.bin").path let auxiliaryStorageURL = URL(fileURLWithPath: auxiliaryStoragePath) pconf.auxiliaryStorage = VZMacAuxiliaryStorage(url: auxiliaryStorageURL)
if #available(macOS 14, *) { let keyboard = VZUSBKeyboardConfiguration() configuration.keyboards = [keyboard] }