Files
Nugget/devicemanagement/constants.py
2025-03-24 11:04:23 -04:00

120 lines
5.3 KiB
Python

from enum import Enum
from pymobiledevice3.lockdown import LockdownClient
class Device:
def __init__(self, uuid: int, usb: bool, name: str, version: str, build: str, model: str, hardware: str, cpu: str, locale: str, ld: LockdownClient):
self.uuid = uuid
self.connected_via_usb = usb
self.name = name
self.version = version
self.build = build
self.model = model
self.hardware = hardware
self.cpu = cpu
self.locale = locale
self.ld = ld
def is_exploit_fully_patched(self) -> bool:
parsed_ver: Version = Version(self.version)
# mobile gestalt methods are completely patched on iOS 18.2 dev beta 3+
if (parsed_ver < Version("18.2")
or self.build == "22C5109p" or self.build == "22C5125e"):
return False
return True
def has_exploit(self) -> bool:
parsed_ver: Version = Version(self.version)
# make sure versions past 17.7.1 but before 18.0 aren't supported
if (parsed_ver >= Version("17.7.1") and parsed_ver < Version("18.0")):
return False
if (parsed_ver < Version("18.1")
or self.build == "22B5007p" or self.build == "22B5023e"
or self.build == "22B5034e" or self.build == "22B5045g"):
return True
return False
def supported(self) -> bool:
return self.has_exploit()
class Version:
def __init__(self, major: int, minor: int = 0, patch: int = 0):
self.major = major
self.minor = minor
self.patch = patch
def __init__(self, ver: str):
nums: list[str] = ver.split(".")
self.major = int(nums[0])
self.minor = int(nums[1]) if len(nums) > 1 else 0
self.patch = int(nums[2]) if len(nums) > 2 else 0
# Comparison Functions
def compare_to(self, other) -> int:
if self.major > other.major:
return 1
elif self.major < other.major:
return -1
if self.minor > other.minor:
return 1
elif self.minor < other.minor:
return -1
if self.patch > other.patch:
return 1
elif self.patch < other.patch:
return -1
return 0
def __gt__(self, other) -> bool:
return self.compare_to(other) == 1
def __ge__(self, other) -> bool:
comp: int = self.compare_to(other)
return comp == 0 or comp == 1
def __lt__(self, other) -> bool:
return self.compare_to(other) == -1
def __le__(self, other) -> bool:
comp: int = self.compare_to(other)
return comp == 0 or comp == -1
def __eq__(self, other) -> bool:
return self.compare_to(other) == 0
class Tweak(Enum):
StatusBar = 'Status Bar'
SpringboardOptions = 'Springboard Options'
InternalOptions = 'Internal Options'
SkipSetup = 'Setup Options'
class FileLocation(Enum):
# Control Center
mute = "ControlCenter/ManagedPreferencesDomain/mobile/com.apple.control-center.MuteModule.plist"
focus = "ControlCenter/ManagedPreferencesDomain/mobile/com.apple.FocusUIModule.plist"
spoken = "ControlCenter/ManagedPreferencesDomain/mobile/com.apple.siri.SpokenNotificationsModule.plist"
module_config = "ControlCenter/HomeDomain/Library/ControlCenter/ModuleConfiguration.plist"
replay_kit_audio = "ControlCenter/ManagedPreferencesDomain/mobile/com.apple.replaykit.AudioConferenceControlCenterModule.plist"
replay_kit_video = "ControlCenter/ManagedPreferencesDomain/mobile/com.apple.replaykit.VideoConferenceControlCenterModule.plist"
# Status Bar
status_bar = "StatusBar/HomeDomain/Library/SpringBoard/statusBarOverrides"
# Springboard Options
springboard = "SpringboardOptions/ManagedPreferencesDomain/mobile/com.apple.springboard.plist"
footnote = "SpringboardOptions/ConfigProfileDomain/Library/ConfigurationProfiles/SharedDeviceConfiguration.plist"
wifi = "SpringboardOptions/SystemPreferencesDomain/SystemConfiguration/com.apple.wifi.plist"
uikit = "SpringboardOptions/ManagedPreferencesDomain/mobile/com.apple.UIKit.plist"
accessibility = "SpringboardOptions/ManagedPreferencesDomain/mobile/com.apple.Accessibility.plist"
wifi_debug = "SpringboardOptions/ManagedPreferencesDomain/mobile/com.apple.MobileWiFi.debug.plist"
airdrop = "SpringboardOptions/ManagedPreferencesDomain/mobile/com.apple.sharingd.plist"
# Internal Options
global_prefs = "InternalOptions/ManagedPreferencesDomain/mobile/hiddendotGlobalPreferences.plist"
app_store = "InternalOptions/ManagedPreferencesDomain/mobile/com.apple.AppStore.plist"
backboardd = "InternalOptions/ManagedPreferencesDomain/mobile/com.apple.backboardd.plist"
core_motion = "InternalOptions/ManagedPreferencesDomain/mobile/com.apple.CoreMotion.plist"
pasteboard = "InternalOptions/HomeDomain/Library/Preferences/com.apple.Pasteboard.plist"
notes = "InternalOptions/ManagedPreferencesDomain/mobile/com.apple.mobilenotes.plist"
maps = "InternalOptions/AppDomain-com.apple.Maps/Library/Preferences/com.apple.Maps.plist"
weather = "InternalOptions/AppDomain-com.apple.weather/Library/Preferences/com.apple.weather.plist"
# Setup Options
cloud_config = "SkipSetup/ConfigProfileDomain/Library/ConfigurationProfiles/CloudConfigurationDetails.plist"