This is for iOS 26+ only. Read mineek's secret.txt for more info.
I didn't plan to release this that early, but as iOS 27 has already nuked partial restore; and A12/A13 being jailbreakable (including A12 iPads EOL at 26) as soon as a new kernel exploit drops, there is not much to lose.
(the "secret.txt" for iOS 26)
iOS has had a long time storing revocation details in separate plists, it was trivially bypassable by zeroing and chflags immutable on them. Since iOS 26.0b2, all of these files have been migrated to mis.db. Unexpectedly this not only fail to stop us from bypassing revocation checks, but it also opens up a method to bypass expiration checks.
Using Database trigger, it is possible to intercept attempts to modify the SQL and overwrite the changes with our own data. This means we can effectively "mis"s revocations and expirations by ignoring any attempts to modify them in mis.db. Moreover we can make this to automatically trust dev certs. Enterprise ones cannot work since they take a different trust path via PreBoard (and some checks in TXM, PPL?).
At first it might look like there is no way to place our modified mis.db. Thanks to @mineek, we discovered that mis.db can also be included in a partial restore,
specifically MobileDeviceDomain.
Now put the things together:
misdb_path = Path.joinpath(Path.cwd(), "files/mis.db")
os.remove(misdb_path) if misdb_path.exists() else None
conn = sqlite3.connect(misdb_path)
cursor = conn.cursor()
with open("misdb.sql", "r") as f:
sql = f.read()
cursor.executescript(sql)
conn.commit()
misdb_contents = open(misdb_path, "rb").read()
misdb_shm_contents = open(misdb_path.with_suffix(".db-shm"), "rb").read()
misdb_wal_contents = open(misdb_path.with_suffix(".db-wal"), "rb").read()
conn.close()
files += [
backup.ConcreteFile("ProvisioningProfiles/mis.db", "MobileDeviceDomain", contents=misdb_contents),
backup.ConcreteFile("ProvisioningProfiles/mis.db-shm", "MobileDeviceDomain", contents=misdb_shm_contents),
backup.ConcreteFile("ProvisioningProfiles/mis.db-wal", "MobileDeviceDomain", contents=misdb_wal_contents),
]iOS checks if a cert is expired when you try to install or launch an app. It uses local system time to do so. So all you need is to set the system time back before the given cert expires, install or launch the app, and then reset the time to current.
For this to actually work, this SQL script also includes relevant triggers to overwrite expires to avoid the daemons from removing expired profiles later on.
This method can also be used to rescue the 7-day expired free cert apps. You can just set the date back, launch SideStore for example, then reset the date and finally perform refresh.
- This alone does not bypass blacklist. You need to pair it with some OCSP blacklist bypass like DNS-based blocking profile that you can find on mineek's gist. Even so the traffic can still leak to OCSP servers, which will update the ocspcache.sqlite3 with blacklist, apps signed with blacklisted certs will still refuse to launch.
- Blocking PPQ causes delay when installing/updating apps. While this is not required, if you are signing your apps with a dev cert, it is recommended to block PPQ to avoid getting your dev account banned.
- Provisioning profiles will be cached over time. The SQL triggers prevents removing anything to keep expired apps launchable (though still requires setting the system time back).