<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.theiphonewiki.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vanished+user+20210509</id>
	<title>The iPhone Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.theiphonewiki.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vanished+user+20210509"/>
	<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/wiki/Special:Contributions/Vanished_user_20210509"/>
	<updated>2026-05-16T10:01:05Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.14</generator>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=DFU_Mode&amp;diff=106040</id>
		<title>DFU Mode</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=DFU_Mode&amp;diff=106040"/>
		<updated>2020-07-28T01:47:50Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Updated GPIO information, DFU output&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''DFU''' or '''Device Firmware Upgrade''' mode allows all devices to be restored from any state. It is essentially a mode where the BootROM can accept iBSS. DFU is part of the [[Bootrom|SecureROM]] which is burned into the hardware, so it cannot be removed. On A7+ devices, it generates an ApNonce and recognizes APTickets as well, so even in DFU, it can accept an APTicket.&lt;br /&gt;
&lt;br /&gt;
== Entering DFU Mode ==&lt;br /&gt;
NOTE: If you are using a USB-C cable to enter DFU mode, it might not work. If this happens, you need to use the normal USB cable. You can use a normal USB cable and a USB to USB-C adapter.&lt;br /&gt;
&lt;br /&gt;
=== Apple TV ===&lt;br /&gt;
# Plug the device into your computer using a Micro-USB cable.&lt;br /&gt;
# Force the device to reboot by holding down the &amp;quot;Menu&amp;quot; and &amp;quot;Down&amp;quot; buttons simultaneously for 6-7 seconds.&lt;br /&gt;
# Press &amp;quot;Menu&amp;quot; and &amp;quot;Play&amp;quot; simultaneously right after reboot, until a message pops up in [[iTunes]], saying that it has detected an Apple TV in Recovery Mode.&lt;br /&gt;
&lt;br /&gt;
=== A9 and older devices (iPad other than the ones listed below, iPhone 6s and below, iPhone SE and iPod touch 6 and below) ===&lt;br /&gt;
# Connect the device to a computer using a USB cable.&lt;br /&gt;
# Hold down both the Home button and Lock button.&lt;br /&gt;
# After 8 seconds, release the Lock button while continuing to hold down the Home button.&lt;br /&gt;
#* If the Apple logo appears, the Lock button was held down for too long.&lt;br /&gt;
# Nothing will be displayed on the screen when the device is in DFU mode. If open, iTunes will alert you that a device was detected in recovery mode.&lt;br /&gt;
#* If your device shows a screen telling you to connect the device to iTunes, retry these steps.&lt;br /&gt;
&lt;br /&gt;
=== A10 devices (iPhone 7 and iPhone 7 Plus, iPad 2018, iPod touch 7) ===&lt;br /&gt;
# Connect the device to a computer using a USB cable.&lt;br /&gt;
# Hold down both the Side button and Volume Down button.&lt;br /&gt;
# After 8 seconds, release the Side button while continuing to hold down the Volume Down button.&lt;br /&gt;
#* If the Apple logo appears, the Side button was held down for too long.&lt;br /&gt;
# Nothing will be displayed on the screen when the device is in DFU mode. If open, iTunes will alert you that a device was detected in recovery mode.&lt;br /&gt;
#* If your device shows a screen telling you to connect the device to iTunes, retry these steps.&lt;br /&gt;
&lt;br /&gt;
=== A11 and newer devices (iPhone 8 and above, iPad Pro 2018, iPad Air 2019, iPad Mini 2019) ===&lt;br /&gt;
# Connect the device to a computer using a USB cable.&lt;br /&gt;
# Quick-press the Volume Up button&lt;br /&gt;
# Quick-press the Volume Down button&lt;br /&gt;
# Hold down the Side button until the screen goes black, then hold down both the Side button and Volume Down button.&lt;br /&gt;
# After 5 seconds, release the Side button while continuing to hold down the Volume Down button.&lt;br /&gt;
#* If the Apple logo appears, the Side button was held down for too long.&lt;br /&gt;
# Nothing will be displayed on the screen when the device is in DFU mode. If open, iTunes will alert you that a device was detected in recovery mode.&lt;br /&gt;
#* If your device shows a screen telling you to connect the device to iTunes, retry these steps.&lt;br /&gt;
&lt;br /&gt;
=== Apple Watch ===&lt;br /&gt;
&lt;br /&gt;
# Connect to computer via [[iBUS]] adapter and lightning cable&lt;br /&gt;
# Hold crown and power button (bottom right)&lt;br /&gt;
# Wait for the screen to go black&lt;br /&gt;
# After 3 seconds of black, let go of the power button but continue to hold the crown&lt;br /&gt;
# After about 5 seconds your watch will be in DFU mode&lt;br /&gt;
&lt;br /&gt;
=== GPIO Pins ===&lt;br /&gt;
If you have hardware access to the SoC, you can either perform the above methods for your device by utilizing the &amp;lt;code&amp;gt;GPIO_REQUEST_DFU1&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GPIO_REQUEST_DFU2&amp;lt;/code&amp;gt; GPIO pins (previously &amp;lt;code&amp;gt;HOLD_KEY&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MENU_KEY&amp;lt;/code&amp;gt;) corresponding to Power and Home/Vol-, respectively, or by pulling your board's &amp;lt;code&amp;gt;GPIO_FORCE_DFU&amp;lt;/code&amp;gt; pin high at SecureROM startup (unless you are using an [[iFPGA]], where Force DFU mode is the default).&lt;br /&gt;
&lt;br /&gt;
The physical GPIO pins for each SoC varies.&lt;br /&gt;
&lt;br /&gt;
== Exiting DFU Mode ==&lt;br /&gt;
To exit DFU Mode, simply force restart your device.&lt;br /&gt;
&lt;br /&gt;
* For Apple TV, hold down the &amp;quot;Menu&amp;quot; and &amp;quot;Down&amp;quot; buttons on your remote until the Apple TV reboots.&lt;br /&gt;
* For iPad, iPhone 6s and below, iPhone SE and iPod touch, hold the Home button and the Lock button until the device reboots.&lt;br /&gt;
* For iPhone 7 and iPhone 7 Plus, hold down the Side button and Volume Down button until the device reboots.&lt;br /&gt;
* For iPhone 8, iPhone 8 Plus, and iPhone X, quick-press the Volume Up button, then quick-press the Volume Down button, then hold down the Side button until the device reboots.&lt;br /&gt;
&lt;br /&gt;
==Enter True Hardware DFU Mode Automatically==&lt;br /&gt;
The EnterDFU function in the [[MobileDevice Library]] does not enter the true DFU Mode in the hardware. It's possible to enter the true DFU Mode without doing it manually, but it cannot be exited unless a restore is performed, as it creates a [[DFU Loop]]. This doesn't work with [[S5L8900]] devices.&lt;br /&gt;
&lt;br /&gt;
===Steps===&lt;br /&gt;
# Make a copy of a fresh IPSW file.&lt;br /&gt;
# Open the IPSW as a zip folder and browse to /firmware/all_flash/all_flash.xxxxx.production/&lt;br /&gt;
# Extract LLB.*****.RELEASE.img3/im4p and open it in a hex editor.&lt;br /&gt;
# Change some random bit or bits, it doesn't matter which or what you write.&lt;br /&gt;
# Add the edited file back to the zip, rename zip to ipsw and restore it to your device using iTunes.&lt;br /&gt;
# The restore will error out and your device will be in DFU Mode.&lt;br /&gt;
&lt;br /&gt;
===Alternative Method===&lt;br /&gt;
If the previous method does not work for you, try this one.&lt;br /&gt;
# Do steps 1 and 2 from above.&lt;br /&gt;
# Delete LLB.*****.RELEASE.img3.&lt;br /&gt;
# Copy applelogo.********.img3 to temporary directory.&lt;br /&gt;
# Rename the copy of applelogo.********.img3/im4p to LLB.*****.RELEASE.img3/im4p. (If you forget the name of the LLB file, you can find it again in the file named manifest.)&lt;br /&gt;
# Copy the renamed applelogo file back to the all_flash.xxxxx.production directory.&lt;br /&gt;
# Rename the zip.&lt;br /&gt;
# Restore the file using iTunes. (If every thing goes well, you should receive an error 31 from iTunes.)&lt;br /&gt;
&lt;br /&gt;
==DFU Mode Output to the computer==&lt;br /&gt;
&amp;lt;pre&amp;gt;iProduct: &amp;quot;Apple Mobile Device (DFU Mode)&amp;quot;&amp;lt;/pre&amp;gt; &amp;lt;pre&amp;gt;iSerialNumber: &amp;quot;CPID:XXXX CPRV:XX CPFM:0X SCEP:XX BDID:XX ECID:XXXXXXXXXXXXXXXX SRTG:[iBoot-XXXX.X.X]&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Revisions==&lt;br /&gt;
===[[S5L8900]] (0x1222)===&lt;br /&gt;
This is the device ID in the [[N45AP|iPod touch]], the [[M68AP|iPhone]], and the [[N82AP|iPhone 3G]]. For more information about the protocol, see [[DFU 0x1222]].&lt;br /&gt;
&lt;br /&gt;
===[[S5L8720 Bootrom|S5L8720]], [[S5L8920]], and [[WTF|WTF mode post-2.0]] (0x1227)===&lt;br /&gt;
This is the device ID in the [[N72AP|iPod touch (2nd generation)]], the [[N88AP|iPhone 3GS]], the [[N90AP|iPhone 4]], subsequent 32 bit devices, all 64 bit devices, and [[WTF|WTF mode]]. For more information on the protocol, see [[DFU 0x1227]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Bootrom]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Boot-args_(iBoot_variable)&amp;diff=103234</id>
		<title>Boot-args (iBoot variable)</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Boot-args_(iBoot_variable)&amp;diff=103234"/>
		<updated>2020-06-09T21:15:34Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: rd/rootdev confusion; I don't backlight-level is a boot-arg, only an env variable&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are boot arguments that the iOS [[kernel]] accepts. These can be booted with a patched [[iBoot]]; untethered [[BootROM]] jailbreaks such as [[redsn0w]] and [[checkra1n]] do this when you set custom boot-args.&lt;br /&gt;
&lt;br /&gt;
= Known Boot Arguments =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! boot-arg&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| debug=#&lt;br /&gt;
| &amp;lt;code&amp;gt;0x09&amp;lt;/code&amp;gt;: Kernel debugging&lt;br /&gt;
| Set kernel debug options&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| nand-enable-reformat=#&lt;br /&gt;
| &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set whether or not to reformat [[NAND]] when restoring&lt;br /&gt;
| Used when [[Restore Process|restoring]]&lt;br /&gt;
|-&lt;br /&gt;
| pmd=#.#&lt;br /&gt;
| Start/end address of ramdisk&lt;br /&gt;
| Specify a [[Ramdisk|ramdisk]] in memory to boot from&lt;br /&gt;
| Used in the [[Ramdisk Hack]]&lt;br /&gt;
|-&lt;br /&gt;
| -progress&lt;br /&gt;
| {{n/a}}&lt;br /&gt;
| Enable progress bar when restoring&lt;br /&gt;
| Used when [[Restore Process|restoring]]&lt;br /&gt;
|-&lt;br /&gt;
| rd=?&lt;br /&gt;
| &amp;lt;code&amp;gt;'md#'&amp;lt;/code&amp;gt;&lt;br /&gt;
| Specify the root device to boot from&lt;br /&gt;
| Used when [[Restore Process|restoring]]; same as &amp;lt;code&amp;gt;rootdev&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| rootdev=?&lt;br /&gt;
| &amp;lt;code&amp;gt;'md#'&amp;lt;/code&amp;gt;&lt;br /&gt;
| Specify the root device to boot from&lt;br /&gt;
| Same as &amp;lt;code&amp;gt;rd&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| serial=#&lt;br /&gt;
| &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;: Debug output over serial&lt;br /&gt;
| Set serial debug options&lt;br /&gt;
| Same as &amp;lt;code&amp;gt;[[Debug-uarts (iBoot variable)|debug-uarts]]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| -v&lt;br /&gt;
| {{n/a}}&lt;br /&gt;
| Enable verbose booting&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
* [[Talk:Restore Mode]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=BORD&amp;diff=103233</id>
		<title>BORD</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=BORD&amp;diff=103233"/>
		<updated>2020-06-09T21:15:10Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''Board ID''' of a device (also known as '''BORD''', '''BDID''', or '''ApBoardId''') is a value (usually represented as &amp;lt;code&amp;gt;uint8_t&amp;lt;/code&amp;gt;) that represents multiple characteristics of the logic board. In a BuildManifest, this value is found in the &amp;lt;code&amp;gt;ApBoardId&amp;lt;/code&amp;gt; tag. The characteristics represented by a given Board ID may be specific to the SoC.&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
* [[List of AirPods|AirPods]]&lt;br /&gt;
** [[AirPods (1st generation)]]: N/A&lt;br /&gt;
** [[AirPods (2nd generation)]]: 0x12&lt;br /&gt;
* [[List of Apple TVs|Apple TV]]&lt;br /&gt;
** [[K66AP|Apple TV (2nd generation)]]: 0x10&lt;br /&gt;
** [[J33AP|Apple TV (3rd generation) (AppleTV3,1)]]: 0x08&lt;br /&gt;
** [[J33IAP|Apple TV (3rd generation) (AppleTV3,2)]]: 0x00&lt;br /&gt;
** [[J42dAP|Apple TV (4th generation)]]: 0x34&lt;br /&gt;
** [[J105aAP|Apple TV 4K]]: 0x02&lt;br /&gt;
* [[Apple Watch (1st generation)]]&lt;br /&gt;
** [[N27aAP|Watch1,1]]: 0x02&lt;br /&gt;
** [[N28aAP|Watch1,2]]: 0x04&lt;br /&gt;
* [[Apple Watch Series 1]]&lt;br /&gt;
** [[N27dAP|Watch2,6]]: 0x02&lt;br /&gt;
** [[N28dAP|Watch2,7]]: 0x04&lt;br /&gt;
* [[Apple Watch Series 2]]&lt;br /&gt;
** [[N74AP|Watch2,3]]: 0x0C&lt;br /&gt;
** [[N75AP|Watch2,4]]: 0x0E&lt;br /&gt;
* [[Apple Watch Series 3]]&lt;br /&gt;
** [[N111sAP|Watch3,1]]: 0x1C&lt;br /&gt;
** [[N111bAP|Watch3,2]]: 0x1E&lt;br /&gt;
** [[N121sAP|Watch3,3]]: 0x18&lt;br /&gt;
** [[N121bAP|Watch3,4]]: 0x1A&lt;br /&gt;
* [[Apple Watch Series 4]]&lt;br /&gt;
** [[N131sAP|Watch4,1]]: 0x08&lt;br /&gt;
** [[N131bAP|Watch4,2]]: 0x0A&lt;br /&gt;
** [[N141sAP|Watch4,3]]: 0x0C&lt;br /&gt;
** [[N141bAP|Watch4,4]]: 0x0E&lt;br /&gt;
* [[Apple Watch Series 5]]&lt;br /&gt;
** [[N144sAP|Watch5,1]]: 0x10&lt;br /&gt;
** [[N144bAP|Watch5,2]]: 0x12&lt;br /&gt;
** [[N146sAP|Watch5,3]]: 0x14&lt;br /&gt;
** [[N146bAP|Watch5,4]]: 0x16&lt;br /&gt;
* [[HomePod]]&lt;br /&gt;
** [[B238aAP|AudioAccessory1,1]]: 0x38&lt;br /&gt;
** [[B238AP|AudioAccessory1,2]]: 0x1A&lt;br /&gt;
* [[List of iPads|iPad]]&lt;br /&gt;
** [[K48AP|iPad]]: 0x02&lt;br /&gt;
** [[iPad 2]]&lt;br /&gt;
*** [[K93AP|iPad2,1]]: 0x04&lt;br /&gt;
*** [[K94AP|iPad2,2]]: 0x06&lt;br /&gt;
*** [[K95AP|iPad2,3]]: 0x02&lt;br /&gt;
*** [[K93AAP|iPad2,4]]: 0x06&lt;br /&gt;
** [[iPad (3rd generation)]]&lt;br /&gt;
*** [[J1AP|iPad3,1]]: 0x00&lt;br /&gt;
*** [[J2AP|iPad3,2]]: 0x02&lt;br /&gt;
*** [[J2AAP|iPad3,3]]: 0x04&lt;br /&gt;
** [[iPad (4th generation)]]&lt;br /&gt;
*** [[P101AP|iPad3,4]]: 0x00&lt;br /&gt;
*** [[P102AP|iPad3,5]]: 0x02&lt;br /&gt;
*** [[P103AP|iPad3,6]]: 0x04&lt;br /&gt;
** [[iPad Air]]&lt;br /&gt;
*** [[J71AP|iPad4,1]]: 0x10&lt;br /&gt;
*** [[J72AP|iPad4,2]]: 0x12&lt;br /&gt;
*** [[J73AP|iPad4,3]]: 0x14&lt;br /&gt;
** [[iPad Air 2]]&lt;br /&gt;
*** [[J81AP|iPad5,3]]: 0x06&lt;br /&gt;
*** [[J82AP|iPad5,4]]: 0x02&lt;br /&gt;
** [[iPad Pro (12.9-inch)]]&lt;br /&gt;
*** [[J98aAP|iPad6,7]]: 0x10&lt;br /&gt;
*** [[J99aAP|iPad6,8]]: 0x12&lt;br /&gt;
** [[iPad Pro (9.7-inch)]]&lt;br /&gt;
*** [[J127AP|iPad6,3]]: 0x08&lt;br /&gt;
*** [[J128AP|iPad6,4]]: 0x0A&lt;br /&gt;
** [[iPad (5th generation)]]&lt;br /&gt;
*** [[iPad6,11]]: 0x10&amp;lt;!-- J71sAP and J71tAP --&amp;gt;&lt;br /&gt;
*** [[iPad6,12]]: 0x12&amp;lt;!-- J72sAP and J72tAP --&amp;gt;&lt;br /&gt;
** [[iPad Pro (12.9-inch) (2nd generation)]]&lt;br /&gt;
*** [[J120AP|iPad7,1]]: 0x0C&lt;br /&gt;
*** [[J121AP|iPad7,2]]: 0x0E&lt;br /&gt;
** [[iPad Pro (10.5-inch)]]&lt;br /&gt;
*** [[J207AP|iPad7,3]]: 0x04&lt;br /&gt;
*** [[J208AP|iPad7,4]]: 0x06&lt;br /&gt;
** [[iPad (6th generation)]]&lt;br /&gt;
*** [[J71bAP|iPad7,5]]: 0x18&lt;br /&gt;
*** [[J72bAP|iPad7,6]]: 0x1A&lt;br /&gt;
** [[iPad (7th generation)]]&lt;br /&gt;
*** [[J171AP|iPad7,11]]: 0x1C&lt;br /&gt;
*** [[J172AP|iPad7,12]]: 0x1E&lt;br /&gt;
** [[iPad Pro (11-inch)]]&lt;br /&gt;
*** [[J317AP|iPad8,1]]: 0x0C&lt;br /&gt;
*** [[J317xAP|iPad8,2]]: 0x1C&lt;br /&gt;
*** [[J318AP|iPad8,3]]: 0x0E&lt;br /&gt;
*** [[J318xAP|iPad8,4]]: 0x1E&lt;br /&gt;
** [[iPad Pro (12.9-inch) (3rd generation)]]&lt;br /&gt;
*** [[J320AP|iPad8,5]]: 0x08&lt;br /&gt;
*** [[J320xAP|iPad8,6]]: 0x18&lt;br /&gt;
*** [[J321AP|iPad8,7]]: 0x0A&lt;br /&gt;
*** [[J321xAP|iPad8,8]]: 0x1A&lt;br /&gt;
** [[iPad Pro (11-inch) (2nd generation)]]&lt;br /&gt;
*** [[J417AP|iPad8,9]]: 0x3C&lt;br /&gt;
*** [[J418AP|iPad8,10]]: 0x3E&lt;br /&gt;
** [[iPad Pro (12.9-inch) (4th generation)]]&lt;br /&gt;
*** [[J420AP|iPad8,11]]: 0x38&lt;br /&gt;
*** [[J421AP|iPad8,12]]: 0x3A&lt;br /&gt;
** [[iPad Air (3rd generation)]]&lt;br /&gt;
*** [[J217AP|iPad11,3]]: 0x1C&lt;br /&gt;
*** [[J218AP|iPad11,4]]: 0x1E&lt;br /&gt;
* [[List of iPad minis|iPad mini]]&lt;br /&gt;
** [[iPad mini]]&lt;br /&gt;
*** [[P105AP|iPad2,5]]: 0x0A&lt;br /&gt;
*** [[P106AP|iPad2,6]]: 0x0C&lt;br /&gt;
*** [[P107AP|iPad2,7]]: 0x0E&lt;br /&gt;
** [[iPad mini 2]]&lt;br /&gt;
*** [[J85AP|iPad4,4]]: 0x0A&lt;br /&gt;
*** [[J86AP|iPad4,5]]: 0x0C&lt;br /&gt;
*** [[J87AP|iPad4,6]]: 0x0E&lt;br /&gt;
** [[iPad mini 3]]&lt;br /&gt;
*** [[J85mAP|iPad4,7]]: 0x32&lt;br /&gt;
*** [[J86mAP|iPad4,8]]: 0x34&lt;br /&gt;
*** [[J87mAP|iPad4,9]]: 0x36&lt;br /&gt;
** [[iPad mini 4]]&lt;br /&gt;
*** [[J96AP|iPad5,1]]: 0x08&lt;br /&gt;
*** [[J97AP|iPad5,2]]: 0x0A&lt;br /&gt;
** [[iPad mini (5th generation)]]&lt;br /&gt;
*** [[J210AP|iPad11,1]]: 0x14&lt;br /&gt;
*** [[J211AP|iPad11,2]]: 0x16&lt;br /&gt;
* [[List of iPhones|iPhone]]&lt;br /&gt;
** [[M68AP|iPhone]]: 0x00&lt;br /&gt;
** [[N82AP|iPhone 3G]]: 0x04&lt;br /&gt;
** [[N88AP|iPhone 3GS]]: 0x00&lt;br /&gt;
** [[iPhone 4]]&lt;br /&gt;
*** [[N90AP|iPhone3,1]]: 0x00&lt;br /&gt;
*** [[N90BAP|iPhone3,2]]: 0x04&lt;br /&gt;
*** [[N92AP|iPhone3,3]]: 0x06&lt;br /&gt;
** [[N94AP|iPhone 4S]]: 0x08&lt;br /&gt;
** [[iPhone 5]]&lt;br /&gt;
*** [[N41AP|iPhone5,1]]: 0x00&lt;br /&gt;
*** [[N42AP|iPhone5,2]]: 0x02&lt;br /&gt;
** [[iPhone 5c]]&lt;br /&gt;
*** [[N48AP|iPhone5,3]]: 0x0A or 0x0B&lt;br /&gt;
*** [[N49AP|iPhone5,4]]: 0x0E&lt;br /&gt;
** [[iPhone 5s]]&lt;br /&gt;
*** [[N51AP|iPhone6,1]]: 0x00&lt;br /&gt;
*** [[N53AP|iPhone6,2]]: 0x02&lt;br /&gt;
** [[N61AP|iPhone 6]]: 0x06&lt;br /&gt;
** [[N56AP|iPhone 6 Plus]]: 0x04&lt;br /&gt;
** [[iPhone 6s]]: 0x04&lt;br /&gt;
** [[iPhone 6s Plus]]: 0x06&lt;br /&gt;
** [[iPhone SE (1st generation)]]: 0x02&lt;br /&gt;
** [[iPhone 7]]&lt;br /&gt;
*** [[D10AP|iPhone9,1]]: 0x08&lt;br /&gt;
*** [[D101AP|iPhone9,3]]: 0x0c&lt;br /&gt;
** [[iPhone 7 Plus]]&lt;br /&gt;
*** [[D11AP|iPhone9,2]]: 0x0a&lt;br /&gt;
*** [[D111AP|iPhone9,4]]: 0x0e&lt;br /&gt;
** [[iPhone 8]]&lt;br /&gt;
*** [[iPhone10,1]]: 0x02&lt;br /&gt;
*** [[iPhone10,4]]: 0x0A&lt;br /&gt;
** [[iPhone 8 Plus]]&lt;br /&gt;
*** [[iPhone10,2]]: 0x04&lt;br /&gt;
*** [[iPhone10,5]]: 0x0C&lt;br /&gt;
** [[iPhone X]]&lt;br /&gt;
*** [[D22AP|iPhone10,3]]: 0x06&lt;br /&gt;
*** [[D221AP|iPhone10,6]]: 0x0E&lt;br /&gt;
** [[N841AP|iPhone XR]]: 0x0C&lt;br /&gt;
** [[D321AP|iPhone XS]]: 0x0E&lt;br /&gt;
** [[iPhone XS Max]]&lt;br /&gt;
*** [[iPhone11,4]]: 0x0A&lt;br /&gt;
*** [[iPhone11,6]]: 0x1A&lt;br /&gt;
** [[N104AP|iPhone 11]]: 0x04&lt;br /&gt;
** [[D421AP|iPhone 11 Pro]]: 0x06&lt;br /&gt;
** [[D421AP|iPhone 11 Pro Max]]: 0x02&lt;br /&gt;
** [[D79AP|iPhone SE (2nd generation)]]: 0x10&lt;br /&gt;
* [[List of iPod touches|iPod touch]]&lt;br /&gt;
** [[N45AP|iPod touch]]: 0x02&lt;br /&gt;
** [[N72AP|iPod touch (2nd generation)]]: 0x00&lt;br /&gt;
** [[N18AP|iPod touch (3rd generation)]]: 0x02&lt;br /&gt;
** [[N81AP|iPod touch (4th generation)]]: 0x08&lt;br /&gt;
** [[iPod touch (5th generation)]]: 0x00&lt;br /&gt;
** [[N102AP|iPod touch (6th generation)]]: 0x10&lt;br /&gt;
** [[N112AP|iPod touch (7th generation)]]: 0x16&lt;br /&gt;
&lt;br /&gt;
[[Category:Firmware Tags]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Boot-args_(iBoot_variable)&amp;diff=103232</id>
		<title>Boot-args (iBoot variable)</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Boot-args_(iBoot_variable)&amp;diff=103232"/>
		<updated>2020-06-09T20:19:29Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Reformatted into a table&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are boot arguments that the iOS [[kernel]] accepts. These can be booted with a patched [[iBoot]]; untethered [[BootROM]] jailbreaks such as [[redsn0w]] and [[checkra1n]] do this when you set custom boot-args.&lt;br /&gt;
&lt;br /&gt;
= Known Boot Arguments =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! boot-arg&lt;br /&gt;
! Values&lt;br /&gt;
! Description&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| backlight-level=#&lt;br /&gt;
| &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;128&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set LCD backlight level&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| debug=#&lt;br /&gt;
| &amp;lt;code&amp;gt;0x09&amp;lt;/code&amp;gt;: Kernel debugging&lt;br /&gt;
| Set kernel debug options&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| nand-enable-reformat=#&lt;br /&gt;
| &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set whether or not to reformat [[NAND]] when restoring&lt;br /&gt;
| Used when [[Restore Process|restoring]]&lt;br /&gt;
|-&lt;br /&gt;
| pmd=#.#&lt;br /&gt;
| Start/end address of ramdisk&lt;br /&gt;
| Specify a [[Ramdisk|ramdisk]] in memory to boot from&lt;br /&gt;
| Used in the [[Ramdisk Hack]]&lt;br /&gt;
|-&lt;br /&gt;
| -progress&lt;br /&gt;
| {{n/a}}&lt;br /&gt;
| Enable progress bar when restoring&lt;br /&gt;
| Used when [[Restore Process|restoring]]&lt;br /&gt;
|-&lt;br /&gt;
| rd=?&lt;br /&gt;
| &amp;lt;code&amp;gt;'md#'&amp;lt;/code&amp;gt;&lt;br /&gt;
| Specify a [[Ramdisk|ramdisk]] to boot from&lt;br /&gt;
| Used when [[Restore Process|restoring]]&lt;br /&gt;
|-&lt;br /&gt;
| serial=#&lt;br /&gt;
| &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;: Debug output over serial&lt;br /&gt;
| Set serial debug options&lt;br /&gt;
| Same as &amp;lt;code&amp;gt;[[Debug-uarts (iBoot variable)|debug-uarts]]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| -v&lt;br /&gt;
| {{n/a}}&lt;br /&gt;
| Enable verbose booting&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
* [[Talk:Restore Mode]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=SDOM&amp;diff=102251</id>
		<title>SDOM</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=SDOM&amp;diff=102251"/>
		<updated>2020-04-21T23:39:51Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: RXTC Security Domain&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''SDOM''' ('''Security DOMain''') tag specifies the device that the firmware is supposed to be ran on. It allows Apple to make sure you are not running another device's firmware files on an incompatible device, probably to prevent using old exploits. It can be found next to the &amp;lt;code&amp;gt;ApSecurityDomain&amp;lt;/code&amp;gt; in the BuildManifest.plist of an [[IPSW]]. Every production device has the value &amp;lt;code&amp;gt;kImage3SecurityDomainDarwin&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;kImage3SecurityDomainManufacturer&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;0x00&amp;lt;/code&amp;gt;) and &amp;lt;code&amp;gt;kImage3SecurityDomainRtxc&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;0x03&amp;lt;/code&amp;gt;) are unused in public builds.&lt;br /&gt;
&lt;br /&gt;
{{stub|firmware}}&lt;br /&gt;
[[Category:Firmware Tags]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Baseband_Firmware&amp;diff=102245</id>
		<title>Baseband Firmware</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Baseband_Firmware&amp;diff=102245"/>
		<updated>2020-04-20T23:32:32Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: MBN files into a table; reorganizing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The main instruction set of the [[Baseband Device|baseband]]. You can get these files from &amp;lt;code&amp;gt;/usr/local/standalone/firmware&amp;lt;/code&amp;gt; on the corresponding firmware's [[Restore Ramdisk|restore ramdisk]] or from an [[IPSW File Format|IPSW]] under &amp;lt;code&amp;gt;/Firmware&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The baseband version that comes with each iPhone firmware is listed on the [[firmware]] page and also on the [[X-Gold 608#Known_Firmware_Versions|X-Gold 608]] article for the [[N82AP|iPhone 3G]]/[[N88AP|iPhone 3GS]].&lt;br /&gt;
&lt;br /&gt;
Baseband firmware files have been codenamed [[Trek-3.4.03|Trek]], ICE, and MAV.&lt;br /&gt;
&lt;br /&gt;
== File Structure ==&lt;br /&gt;
The &amp;lt;code&amp;gt;.bbfw&amp;lt;/code&amp;gt; file format is a ZIP archive containing &amp;lt;code&amp;gt;Info.plist&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Options.plist&amp;lt;/code&amp;gt;, and multiple firmware files. In the past, these were EEP and FLS files, the external EEPROM and firmware, respectively. In modern iOS versions, these are &amp;lt;code&amp;gt;.mbn&amp;lt;/code&amp;gt; files.&lt;br /&gt;
&lt;br /&gt;
For example, the [[N90AP|iPhone 4]] has a single baseband firmware file. The 4.0 baseband firmware filename is &amp;lt;code&amp;gt;ICE3_01.59.00_BOOT_02.06.Release.bbfw&amp;lt;/code&amp;gt; and contains contains four baseband firmware files.&lt;br /&gt;
&lt;br /&gt;
=== Known MBN Files ===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Filename&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| acdb.mbn&lt;br /&gt;
|-&lt;br /&gt;
| apps.mbn&lt;br /&gt;
|-&lt;br /&gt;
| bbcfg.mbn&lt;br /&gt;
|-&lt;br /&gt;
| dsp3.mbn&lt;br /&gt;
|-&lt;br /&gt;
| mba.mbn&lt;br /&gt;
|-&lt;br /&gt;
| qdsp6sw.mbn&lt;br /&gt;
|-&lt;br /&gt;
| restoresbl1.mbn&lt;br /&gt;
|-&lt;br /&gt;
| rpm.mbn&lt;br /&gt;
|-&lt;br /&gt;
| sbl1.mbn&lt;br /&gt;
|-&lt;br /&gt;
| tz.mbn&lt;br /&gt;
|-&lt;br /&gt;
| wdt.mbn&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Info.plist ===&lt;br /&gt;
&lt;br /&gt;
The main identifying document for a given Baseband firmware is its &amp;lt;code&amp;gt;Info.plist&amp;lt;/code&amp;gt;. This [[PList File Format|PList]] contains the Build, ChipID, RestoreSBLVersion, SBLVersion, and Baseband Version of the firmware.&lt;br /&gt;
&lt;br /&gt;
==Other Links==&lt;br /&gt;
[http://www.deloware.com/iphone/doku.php?id=bbupdater bbupdater]&lt;br /&gt;
&lt;br /&gt;
[[Category:Baseband]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=TYPE&amp;diff=102244</id>
		<title>TYPE</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=TYPE&amp;diff=102244"/>
		<updated>2020-04-20T23:00:53Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''TYPE''' tag is a 32-bit unsigned integer (&amp;lt;code&amp;gt;uint32_t&amp;lt;/code&amp;gt;) that, when viewed in little-endian format, states the type of firmware image the IMG2/[[IMG3 File Format|IMG3]]/[[IMG4 File Format|IMG4/IM4P]] file is. This value  is passed to &amp;lt;code&amp;gt;load_selected_image&amp;lt;/code&amp;gt; and then &amp;lt;code&amp;gt;[[Image load|image_load]]&amp;lt;/code&amp;gt; early in the [[BootROM|SecureROM]] boot process, where a non-NULL pointer check is performed.&lt;br /&gt;
&lt;br /&gt;
== Types ==&lt;br /&gt;
=== IMG2 ===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
|-&lt;br /&gt;
| [[AppleLogo]]&lt;br /&gt;
| logo&lt;br /&gt;
|-&lt;br /&gt;
| [[BatteryCharging]]&lt;br /&gt;
| batC&lt;br /&gt;
|-&lt;br /&gt;
| [[BatteryLow0]]&lt;br /&gt;
| batl&lt;br /&gt;
|-&lt;br /&gt;
| [[BatteryLow1]]&lt;br /&gt;
| batL&lt;br /&gt;
|-&lt;br /&gt;
| [[DeviceTree]]&lt;br /&gt;
| dtre&lt;br /&gt;
|-&lt;br /&gt;
| [[iBoot (Bootloader)|iBoot]]&lt;br /&gt;
| ibot&lt;br /&gt;
|-&lt;br /&gt;
| [[LLB]]&lt;br /&gt;
| llbz&lt;br /&gt;
|-&lt;br /&gt;
| [[NeedService]]&lt;br /&gt;
| nsrv&lt;br /&gt;
|-&lt;br /&gt;
| [[RecoveryMode]]&lt;br /&gt;
| recm&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IMG3+ ===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Any&lt;br /&gt;
| &amp;lt;code&amp;gt;0x00&amp;lt;/code&amp;gt;&lt;br /&gt;
| Represents ''any'' image type&lt;br /&gt;
|-&lt;br /&gt;
| ACIBT&lt;br /&gt;
| acib&lt;br /&gt;
| ACI Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| ACIWIFI&lt;br /&gt;
| aciw&lt;br /&gt;
| ACI WiFi&lt;br /&gt;
|-&lt;br /&gt;
| Alamo&lt;br /&gt;
| almo&lt;br /&gt;
|-&lt;br /&gt;
| ANE Firmware&lt;br /&gt;
| anef&lt;br /&gt;
|-&lt;br /&gt;
| AOP&lt;br /&gt;
| aopf&lt;br /&gt;
|-&lt;br /&gt;
| [[AppleLogo]]&lt;br /&gt;
| logo&lt;br /&gt;
|-&lt;br /&gt;
| Audio Codec Firmware&lt;br /&gt;
| acfw&lt;br /&gt;
|-&lt;br /&gt;
| AVE Firmware&lt;br /&gt;
| avef&lt;br /&gt;
|-&lt;br /&gt;
| [[BatteryCharging0]]&lt;br /&gt;
| chg0&lt;br /&gt;
| Charging indicator (bright)&lt;br /&gt;
|-&lt;br /&gt;
| [[BatteryCharging1]]&lt;br /&gt;
| chg1&lt;br /&gt;
| Charging Indicator (dim)&lt;br /&gt;
|-&lt;br /&gt;
| [[BatteryFull]]&lt;br /&gt;
| batF&lt;br /&gt;
|-&lt;br /&gt;
| [[BatteryLow0]]&lt;br /&gt;
| bat0&lt;br /&gt;
| Empty battery&lt;br /&gt;
|-&lt;br /&gt;
| [[BatteryLow1]]&lt;br /&gt;
| bat1&lt;br /&gt;
| Red composed onto empty battery&lt;br /&gt;
|-&lt;br /&gt;
| CFELoader&lt;br /&gt;
| cfel&lt;br /&gt;
| Silicon Validation &amp;lt;ref&amp;gt;[https://www.linkedin.com/jobs/view/silicon-validation-test-and-triage-engineer-at-apple-543262317 Job listing on LinkedIn]&amp;lt;/ref&amp;gt; CFE loader&lt;br /&gt;
|-&lt;br /&gt;
| [[Dali]]&lt;br /&gt;
| dali&lt;br /&gt;
|-&lt;br /&gt;
| [[DeviceTree]]&lt;br /&gt;
| dtre&lt;br /&gt;
|-&lt;br /&gt;
| Diags&lt;br /&gt;
| diag&lt;br /&gt;
|-&lt;br /&gt;
| EngineeringTrustCache&lt;br /&gt;
| dtrs&lt;br /&gt;
|-&lt;br /&gt;
| Environment Variables&lt;br /&gt;
| ienv&lt;br /&gt;
|-&lt;br /&gt;
| FDR Trust Object for AP&lt;br /&gt;
| fdrt&lt;br /&gt;
|-&lt;br /&gt;
| FDR Trust Object for SEP&lt;br /&gt;
| fdrs&lt;br /&gt;
|-&lt;br /&gt;
| [[GlyphCharging]]&lt;br /&gt;
| glyC&lt;br /&gt;
|-&lt;br /&gt;
| [[GlyphPlugin]]&lt;br /&gt;
| glyP&lt;br /&gt;
|-&lt;br /&gt;
| GPU Firmware&lt;br /&gt;
| gfxf&lt;br /&gt;
|-&lt;br /&gt;
| Homer&lt;br /&gt;
| homr&lt;br /&gt;
|-&lt;br /&gt;
| Hypervisor&lt;br /&gt;
| hypr&lt;br /&gt;
|-&lt;br /&gt;
| [[iBEC]]&lt;br /&gt;
| ibec&lt;br /&gt;
|-&lt;br /&gt;
| [[iBoot (Bootloader)|iBoot]]&lt;br /&gt;
| ibot&lt;br /&gt;
|-&lt;br /&gt;
| iBootTest&lt;br /&gt;
| itst&lt;br /&gt;
|-&lt;br /&gt;
| [[iBSS]]&lt;br /&gt;
| ibss&lt;br /&gt;
|-&lt;br /&gt;
| Input Device&lt;br /&gt;
| ipdf&lt;br /&gt;
|-&lt;br /&gt;
| iSpoof(?)&lt;br /&gt;
| ispf&lt;br /&gt;
|-&lt;br /&gt;
| [[Kernelcache|KernelCache]]&lt;br /&gt;
| krnl&lt;br /&gt;
|-&lt;br /&gt;
| LeapHaptics&lt;br /&gt;
| lphp&lt;br /&gt;
|-&lt;br /&gt;
| [[LLB]]&lt;br /&gt;
| illb&lt;br /&gt;
|-&lt;br /&gt;
| LoadableTrustCache&lt;br /&gt;
| ltrs&lt;br /&gt;
|-&lt;br /&gt;
| LowPowerWallet0&lt;br /&gt;
| lpw0&lt;br /&gt;
|-&lt;br /&gt;
| LowPowerWallet1&lt;br /&gt;
| lpw1&lt;br /&gt;
|-&lt;br /&gt;
| LowPowerWallet2&lt;br /&gt;
| lpw2&lt;br /&gt;
|-&lt;br /&gt;
| Mac EFI&lt;br /&gt;
| mefi&lt;br /&gt;
|-&lt;br /&gt;
| [[Maggie Firmware]]&lt;br /&gt;
| magg&lt;br /&gt;
|-&lt;br /&gt;
| Multitouch Firmware&lt;br /&gt;
| mtfw&lt;br /&gt;
|-&lt;br /&gt;
| [[NeedService]]&lt;br /&gt;
| nsrv&lt;br /&gt;
|-&lt;br /&gt;
| OSRamdisk&lt;br /&gt;
| osrd&lt;br /&gt;
|-&lt;br /&gt;
| PEHammer&lt;br /&gt;
| hmmr&lt;br /&gt;
| [[PE]] Hammer test&lt;br /&gt;
|-&lt;br /&gt;
| PersonalizedDMG&lt;br /&gt;
| pdmg&lt;br /&gt;
|-&lt;br /&gt;
| PERTOS&lt;br /&gt;
| pert&lt;br /&gt;
| [[PE]] [https://en.wikipedia.org/wiki/Real-time_operating_system RTOS] environment&lt;br /&gt;
|-&lt;br /&gt;
| PHLEET&lt;br /&gt;
| phlt&lt;br /&gt;
| Silicon Validation PHLEET test&lt;br /&gt;
|-&lt;br /&gt;
| PMP&lt;br /&gt;
| pmpf&lt;br /&gt;
|-&lt;br /&gt;
| [[Restore Ramdisk|RestoreRamDisk]]&lt;br /&gt;
| rdsk&lt;br /&gt;
|-&lt;br /&gt;
| RBM&lt;br /&gt;
| rbmt&lt;br /&gt;
| Silicon Validation RBM test&lt;br /&gt;
|-&lt;br /&gt;
| [[RecoveryMode]]&lt;br /&gt;
| recm&lt;br /&gt;
|-&lt;br /&gt;
| RestoreDeviceTree&lt;br /&gt;
| rdtr&lt;br /&gt;
|-&lt;br /&gt;
| RestoreKernelCache&lt;br /&gt;
| rkrn&lt;br /&gt;
|-&lt;br /&gt;
| RestoreLogo&lt;br /&gt;
| rlgo&lt;br /&gt;
|-&lt;br /&gt;
| RestoreOS&lt;br /&gt;
| rosi&lt;br /&gt;
|-&lt;br /&gt;
| RestoreSEP&lt;br /&gt;
| rsep&lt;br /&gt;
| rsep is also present in [[sepboot]]&lt;br /&gt;
|-&lt;br /&gt;
| RestoreTrustCache&lt;br /&gt;
| rtsc&lt;br /&gt;
|-&lt;br /&gt;
| RTP&lt;br /&gt;
| rtpf&lt;br /&gt;
|-&lt;br /&gt;
| SCE&lt;br /&gt;
| scef&lt;br /&gt;
|-&lt;br /&gt;
| [[Secure Enclave Processor|SEP]]&lt;br /&gt;
| sepi&lt;br /&gt;
|-&lt;br /&gt;
| SmartIOFirmware&lt;br /&gt;
| siof&lt;br /&gt;
|-&lt;br /&gt;
| StaticTrustCache&lt;br /&gt;
| trst&lt;br /&gt;
|-&lt;br /&gt;
| System Locker&lt;br /&gt;
| lckr&lt;br /&gt;
|-&lt;br /&gt;
| TSYS Tester&lt;br /&gt;
| tsys&lt;br /&gt;
|-&lt;br /&gt;
| WCHFirmwareUpdater&lt;br /&gt;
| wchf&lt;br /&gt;
|-&lt;br /&gt;
| Wireless Charging&lt;br /&gt;
| wchf&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{stub|firmware}}&lt;br /&gt;
[[Category:Firmware Tags]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=TYPE&amp;diff=102243</id>
		<title>TYPE</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=TYPE&amp;diff=102243"/>
		<updated>2020-04-20T21:59:24Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Reorganized into tables, updated information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''TYPE''' tag is a 32-bit unsigned integer (&amp;lt;code&amp;gt;uint32_t&amp;lt;/code&amp;gt;) that, when viewed in little-endian format, states the type of firmware image the IMG2/[[IMG3 File Format|IMG3]]/[[IMG4 File Format|IMG4/IM4P]] file is. This type is passed to &amp;lt;code&amp;gt;load_selected_image&amp;lt;/code&amp;gt; and then &amp;lt;code&amp;gt;[[Image load|image_load]]&amp;lt;/code&amp;gt; early in the [[BootROM|SecureROM]] boot process, where a non-NULL pointer check is performed.&lt;br /&gt;
&lt;br /&gt;
== Types ==&lt;br /&gt;
=== IMG2 ===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
|-&lt;br /&gt;
| [[AppleLogo]]&lt;br /&gt;
| logo&lt;br /&gt;
|-&lt;br /&gt;
| [[BatteryCharging]]&lt;br /&gt;
| batC&lt;br /&gt;
|-&lt;br /&gt;
| [[BatteryLow0]]&lt;br /&gt;
| batl&lt;br /&gt;
|-&lt;br /&gt;
| [[BatteryLow1]]&lt;br /&gt;
| batL&lt;br /&gt;
|-&lt;br /&gt;
| [[DeviceTree]]&lt;br /&gt;
| dtre&lt;br /&gt;
|-&lt;br /&gt;
| [[iBoot (Bootloader)|iBoot]]&lt;br /&gt;
| ibot&lt;br /&gt;
|-&lt;br /&gt;
| [[LLB]]&lt;br /&gt;
| llbz&lt;br /&gt;
|-&lt;br /&gt;
| [[NeedService]]&lt;br /&gt;
| nsrv&lt;br /&gt;
|-&lt;br /&gt;
| [[RecoveryMode]]&lt;br /&gt;
| recm&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IMG3+ ===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Type&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Any&lt;br /&gt;
| &amp;lt;code&amp;gt;0x00&amp;lt;/code&amp;gt;&lt;br /&gt;
| Represents ''any'' image type&lt;br /&gt;
|-&lt;br /&gt;
| ACIBT&lt;br /&gt;
| acib&lt;br /&gt;
| ACI Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| ACIWIFI&lt;br /&gt;
| aciw&lt;br /&gt;
| ACI WiFi&lt;br /&gt;
|-&lt;br /&gt;
| Alamo&lt;br /&gt;
| almo&lt;br /&gt;
|-&lt;br /&gt;
| ANE Firmware&lt;br /&gt;
| anef&lt;br /&gt;
|-&lt;br /&gt;
| AOP&lt;br /&gt;
| aopf&lt;br /&gt;
|-&lt;br /&gt;
| [[AppleLogo]]&lt;br /&gt;
| logo&lt;br /&gt;
|-&lt;br /&gt;
| Audio Codec Firmware&lt;br /&gt;
| acfw&lt;br /&gt;
|-&lt;br /&gt;
| AVE Firmware&lt;br /&gt;
| avef&lt;br /&gt;
|-&lt;br /&gt;
| [[BatteryCharging0]]&lt;br /&gt;
| chg0&lt;br /&gt;
| Charging indicator (bright)&lt;br /&gt;
|-&lt;br /&gt;
| [[BatteryCharging1]]&lt;br /&gt;
| chg1&lt;br /&gt;
| Charging Indicator (dim)&lt;br /&gt;
|-&lt;br /&gt;
| [[BatteryFull]]&lt;br /&gt;
| batF&lt;br /&gt;
|-&lt;br /&gt;
| [[BatteryLow0]]&lt;br /&gt;
| bat0&lt;br /&gt;
| Empty battery&lt;br /&gt;
|-&lt;br /&gt;
| [[BatteryLow1]]&lt;br /&gt;
| bat1&lt;br /&gt;
| Red composed onto empty battery&lt;br /&gt;
|-&lt;br /&gt;
| CFELoader&lt;br /&gt;
| cfel&lt;br /&gt;
| Silicon Validation &amp;lt;ref&amp;gt;[https://www.linkedin.com/jobs/view/silicon-validation-test-and-triage-engineer-at-apple-543262317 Job listing on LinkedIn]&amp;lt;/ref&amp;gt; CFE loader&lt;br /&gt;
|-&lt;br /&gt;
| [[Dali]]&lt;br /&gt;
| dali&lt;br /&gt;
|-&lt;br /&gt;
| [[DeviceTree]]&lt;br /&gt;
| dtre&lt;br /&gt;
|-&lt;br /&gt;
| Diags&lt;br /&gt;
| diag&lt;br /&gt;
|-&lt;br /&gt;
| EngineeringTrustCache&lt;br /&gt;
| dtrs&lt;br /&gt;
|-&lt;br /&gt;
| Environment Variables&lt;br /&gt;
| ienv&lt;br /&gt;
|-&lt;br /&gt;
| FDR Trust Object for AP&lt;br /&gt;
| fdrt&lt;br /&gt;
|-&lt;br /&gt;
| FDR Trust Object for SEP&lt;br /&gt;
| fdrs&lt;br /&gt;
|-&lt;br /&gt;
| [[GlyphCharging]]&lt;br /&gt;
| glyC&lt;br /&gt;
|-&lt;br /&gt;
| [[GlyphPlugin]]&lt;br /&gt;
| glyP&lt;br /&gt;
|-&lt;br /&gt;
| GPU Firmware&lt;br /&gt;
| gfxf&lt;br /&gt;
|-&lt;br /&gt;
| Homer&lt;br /&gt;
| homr&lt;br /&gt;
|-&lt;br /&gt;
| Hypervisor&lt;br /&gt;
| hypr&lt;br /&gt;
|-&lt;br /&gt;
| [[iBEC]]&lt;br /&gt;
| ibec&lt;br /&gt;
|-&lt;br /&gt;
| [[iBoot (Bootloader)|iBoot]]&lt;br /&gt;
| ibot&lt;br /&gt;
|-&lt;br /&gt;
| iBootTest&lt;br /&gt;
| itst&lt;br /&gt;
|-&lt;br /&gt;
| [[iBSS]]&lt;br /&gt;
| ibss&lt;br /&gt;
|-&lt;br /&gt;
| Input Device&lt;br /&gt;
| ipdf&lt;br /&gt;
|-&lt;br /&gt;
| iSpoof(?)&lt;br /&gt;
| ispf&lt;br /&gt;
|-&lt;br /&gt;
| [[Kernelcache|KernelCache]]&lt;br /&gt;
| krnl&lt;br /&gt;
|-&lt;br /&gt;
| LeapHaptics&lt;br /&gt;
| lphp&lt;br /&gt;
|-&lt;br /&gt;
| [[LLB]]&lt;br /&gt;
| illb&lt;br /&gt;
|-&lt;br /&gt;
| LoadableTrustCache&lt;br /&gt;
| ltrs&lt;br /&gt;
|-&lt;br /&gt;
| LowPowerWallet0&lt;br /&gt;
| lpw0&lt;br /&gt;
|-&lt;br /&gt;
| LowPowerWallet1&lt;br /&gt;
| lpw1&lt;br /&gt;
|-&lt;br /&gt;
| LowPowerWallet2&lt;br /&gt;
| lpw2&lt;br /&gt;
|-&lt;br /&gt;
| Mac EFI&lt;br /&gt;
| mefi&lt;br /&gt;
|-&lt;br /&gt;
| [[Maggie Firmware]]&lt;br /&gt;
| magg&lt;br /&gt;
|-&lt;br /&gt;
| Multitouch Firmware&lt;br /&gt;
| mtfw&lt;br /&gt;
|-&lt;br /&gt;
| [[NeedService]]&lt;br /&gt;
| nsrv&lt;br /&gt;
|-&lt;br /&gt;
| OSRamdisk&lt;br /&gt;
| osrd&lt;br /&gt;
|-&lt;br /&gt;
| PEHammer&lt;br /&gt;
| hmmr&lt;br /&gt;
| [[PE]] Hammer test&lt;br /&gt;
|-&lt;br /&gt;
| PersonalizedDMG&lt;br /&gt;
| pdmg&lt;br /&gt;
|-&lt;br /&gt;
| PERTOS&lt;br /&gt;
| pert&lt;br /&gt;
| [[PE]] [https://en.wikipedia.org/wiki/Real-time_operating_system RTOS] environment&lt;br /&gt;
|-&lt;br /&gt;
| PHLEET&lt;br /&gt;
| phlt&lt;br /&gt;
| Silicon Validation PHLEET test&lt;br /&gt;
|-&lt;br /&gt;
| PMP&lt;br /&gt;
| pmpf&lt;br /&gt;
|-&lt;br /&gt;
| [[Restore Ramdisk|RestoreRamDisk]]&lt;br /&gt;
| rdsk&lt;br /&gt;
|-&lt;br /&gt;
| RBM&lt;br /&gt;
| rbmt&lt;br /&gt;
| Silicon Validation RBM test&lt;br /&gt;
|-&lt;br /&gt;
| [[RecoveryMode]]&lt;br /&gt;
| recm&lt;br /&gt;
|-&lt;br /&gt;
| RestoreDeviceTree&lt;br /&gt;
| rdtr&lt;br /&gt;
|-&lt;br /&gt;
| RestoreKernelCache&lt;br /&gt;
| rkrn&lt;br /&gt;
|-&lt;br /&gt;
| RestoreLogo&lt;br /&gt;
| rlgo&lt;br /&gt;
|-&lt;br /&gt;
| RestoreOS&lt;br /&gt;
| rosi&lt;br /&gt;
|-&lt;br /&gt;
| RestoreSEP&lt;br /&gt;
| rsep&lt;br /&gt;
| rsep is also present in [[sepboot]]&lt;br /&gt;
|-&lt;br /&gt;
| RestoreTrustCache&lt;br /&gt;
| rtsc&lt;br /&gt;
|-&lt;br /&gt;
| RTP&lt;br /&gt;
| rtpf&lt;br /&gt;
|-&lt;br /&gt;
| SCE&lt;br /&gt;
| scef&lt;br /&gt;
|-&lt;br /&gt;
| [[Secure Enclave Processor|SEP]]&lt;br /&gt;
| sepi&lt;br /&gt;
|-&lt;br /&gt;
| SmartIOFirmware&lt;br /&gt;
| siof&lt;br /&gt;
|-&lt;br /&gt;
| StaticTrustCache&lt;br /&gt;
| trst&lt;br /&gt;
|-&lt;br /&gt;
| System Locker&lt;br /&gt;
| lckr&lt;br /&gt;
|-&lt;br /&gt;
| TSYS Tester&lt;br /&gt;
| tsys&lt;br /&gt;
|-&lt;br /&gt;
| WCHFirmwareUpdater&lt;br /&gt;
| wchf&lt;br /&gt;
|-&lt;br /&gt;
| Wireless Charging&lt;br /&gt;
| wchf&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{stub|firmware}}&lt;br /&gt;
[[Category:Firmware Tags]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=SHSH_Protocol&amp;diff=102241</id>
		<title>SHSH Protocol</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=SHSH_Protocol&amp;diff=102241"/>
		<updated>2020-04-20T03:40:41Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Revised HTTP headers... will revise again soon&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a description of the protocol that is used when [[iTunes]] requests the [[SHSH]] certificate from Apple. For details about what this is used for, please see the main article [[SHSH]].&lt;br /&gt;
&lt;br /&gt;
This is a simple [[wikipedia:Hypertext Transfer Protocol|HTTP]] ([[wikipedia:POST (HTTP)|POST]]) request and answer. You can retry this via a [[wikipedia:Telnet|Telnet]] session or similar. The destination host is [http://gs.apple.com/TSS/controller?action=2 gs.apple.com] and runs on the common  [[wikipedia:TCP and UDP port|port]] 80. The data is plaintext and not encoded in any way. For details about the [[wikipedia:Hypertext Transfer Protocol|HTTP]] protocol itself, please see [http://www.w3.org/Protocols/HTTP/1.1/rfc2616.pdf RFC2616].&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
Reliable communication to the TSS server is best achieved with the following HTTP header configuration:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Proxy-Connection: Keep-Alive&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Pragma: no-cache&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Content-Type: text/xml; charset=&amp;quot;utf-8&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following [https://curl.haxx.se/ curl] command demonstrates a command-line request to the server:&lt;br /&gt;
&lt;br /&gt;
 curl -i -s -m 1.0 -X POST -A &amp;quot;InetURL/1.0&amp;quot; -H &amp;quot;Proxy-Connection: Keep=Alive&amp;quot; -H &amp;quot;Pragma: no-cache&amp;quot; -H &amp;quot;Content-Type: text/xml; charset=\&amp;quot;utf-8\&amp;quot;&amp;quot; -d @/location/to/TSSRequest.xml gs.apple.com/TSS/controller?action=2&lt;br /&gt;
&lt;br /&gt;
===Action types===&lt;br /&gt;
Attached to the http://gs.apple.com/TSS/controller URL is commonly &amp;lt;code&amp;gt;?action=2&amp;lt;/code&amp;gt;, which can be discovered when performing an iTunes restore and observing packets sent with a packet sniffer such as [https://www.wireshark.org Wireshark]. However, values other than 2 may produce different server responses, of which all known value/response pairs have been listed below.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=0&amp;lt;/code&amp;gt;: Performs a &amp;quot;Tatsu Signing Server HealthCheck&amp;quot;, returning an HTML body of &amp;quot;Server not ready&amp;quot;. This may be a general ping protocol for ensuring the TSS service is online.&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=2&amp;lt;/code&amp;gt;: Common SHSH protocol. See [[#Status responses]] for all known server responses.&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=3&amp;lt;/code&amp;gt;: Functionally the same as &amp;lt;code&amp;gt;?action=2&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=5&amp;lt;/code&amp;gt;: Generates &amp;lt;code&amp;gt;respCode&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;respMsg&amp;lt;/code&amp;gt;. This response syntax differs slightly from the SHSH protocol. The name &amp;quot;cpsn&amp;quot; is referenced.&lt;br /&gt;
&lt;br /&gt;
All unlisted action types appear to respond without HTML content, only status.&lt;br /&gt;
&lt;br /&gt;
===Sending data (request)===&lt;br /&gt;
The request is actually a single XML-encoded property list. It contains a dictionary which describes the target iOS version, restore behavior, etc. Some of the required information can be taken from the BuildManifest.plist. BuildManifest contains some info about the firmware version and &amp;quot;BuildIdentities&amp;quot; dictionary. Inside it you can find two (or more?) build identities. Each of them contains the information which depends on every type of restore (&amp;quot;Erase&amp;quot; or &amp;quot;Update&amp;quot;). Some information is device-dependent (ECID, nonce) and is received from the device.&lt;br /&gt;
&lt;br /&gt;
Request property list should have these properties:&lt;br /&gt;
&lt;br /&gt;
* '''@APTicket:''' Optional boolean value. If true, the server adds an [[APTicket]] to the request.&lt;br /&gt;
* '''@BBTicket:''' Optional boolean value. The same for the [[BBTicket]].&lt;br /&gt;
* '''@UDID:''' Optional string value. Just request UDID (ex. D9C1F33D-62E0-4D25-8068-F5F46FE80057).&lt;br /&gt;
* '''@HostPlatformInfo:''' Optional string value. &amp;quot;mac&amp;quot; for OS X client, &amp;quot;windows&amp;quot; for Windows client (can be everything you want).&lt;br /&gt;
* '''@Locality:''' Optional string value. Language used for the error response (ex. &amp;quot;en_US&amp;quot;).&lt;br /&gt;
* '''@VersionInfo:''' Optional string value. The version of 'libauthinstall' used (ex. &amp;quot;libauthinstall-391.0.0.1.3&amp;quot;). You can pass any string here.&lt;br /&gt;
* '''ApBoardID:''' Integer value. [[BORD |Board ID]] of the target device. You can take this value from build manifest.&lt;br /&gt;
* '''ApChipID:''' Integer value. [[CHIP|Chip ID]] of the target device. You can take this value from build manifest.&lt;br /&gt;
* '''ApECID:''' Integer value. [[ECID]] of the target device.&lt;br /&gt;
* '''ApNonce:''' Data value. The [[nonce]] generated by your device.&lt;br /&gt;
* '''ApProductionMode:''' Boolean value. Always true (unless your SOC is PROD 0 - Apple only).&lt;br /&gt;
* '''ApSecurityDomain:''' Integer value. The use is unknown. You can take this value from build manifest.&lt;br /&gt;
* '''UniqueBuildID:''' Optional data value. This is a unique identifier for every build (different even for &amp;quot;Erase&amp;quot; and &amp;quot;Update&amp;quot; types of restore).  You can take this value from build manifest.&lt;br /&gt;
&lt;br /&gt;
The SHSH request also contains information about files from the [[IPSW]] (or restore bundle for [[PurpleRestore]]). They can be obtained from the 'build identity' you've chosen in the previous step. Each 'build identity' contains a &amp;quot;Manifest&amp;quot; dictionary. It's entries look like&lt;br /&gt;
 &amp;lt;key&amp;gt;BatteryCharging0&amp;lt;/key&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;Digest&amp;lt;/key&amp;gt;&lt;br /&gt;
  	&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt;...&amp;lt;/data&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;Info&amp;lt;/key&amp;gt;&lt;br /&gt;
 	&amp;lt;dict&amp;gt;...&amp;lt;/dict&amp;gt;&lt;br /&gt;
  	&amp;lt;key&amp;gt;Trusted&amp;lt;key/&amp;gt;&lt;br /&gt;
 	&amp;lt;true/&amp;gt;&lt;br /&gt;
 &amp;lt;dict/&amp;gt;&lt;br /&gt;
They are just copied to the SHSH request, but the &amp;quot;Info&amp;quot; dictionary is removed.&lt;br /&gt;
Example of a SHSH request (... values are identical, *** values are different per device):&lt;br /&gt;
 &amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt; &lt;br /&gt;
 &amp;lt;dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@[[APTicket]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@[[BBTicket]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@HostPlatformInfo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;mac&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@Locality&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;en_US&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@UUID&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;D9C1F33D-62E0-4D25-8068-F5F46FE80057&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@VersionInfo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;libauthinstall-391.0.0.1.3&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[BORD |ApBoardID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;10&amp;lt;/integer&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;[[CHIP |ApChipID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;35152&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[ECID |ApECID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;***&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[Nonce |ApNonce]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt;***&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;ApProductionMode&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;ApSecurityDomain&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;UniqueBuildID&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;data&amp;gt; fqzW0B++Zdrs+PRwohkwU6prjbk=&amp;lt;/data&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;AppleLogo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;Digest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; uH5QQax5YmIrgcuEHwOhAB//yc8=&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		&amp;lt;key&amp;gt;Trusted&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;/dict&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryCharging0&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... See AppleLogo dictionary.&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryCharging1&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryFull&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... &lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryLow0&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryLow1&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryPlugin&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;DeviceTree&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;KernelCache&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;LLB&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;PartialDigest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; QAAAAHhRAgC22ZPWJB9J1Nh3H+0XeyRTU72ObA==&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RecoveryMode&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreDeviceTree&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreKernelCache&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreLogo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... &lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreRamDisk&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBEC]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBSS]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;PartialDigest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; QAAAAHhBAQCRc2PuoresMjW7zNLePMPmX7zaHg==&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBoot]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 &amp;lt;/dict&amp;gt; &lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Receiving data (answer)===&lt;br /&gt;
The response is a simple HTTP POST response, containing 3 values: STATUS, MESSAGE (a description string) and REQUEST_STRING (only if the request was successful). STATUS contains numeric status, MESSAGE contains an error message on error and &amp;quot;SUCCESS&amp;quot; string on success and REQUEST_STRING contains response property list encoded as XML.&lt;br /&gt;
&lt;br /&gt;
===Status responses===&lt;br /&gt;
*'''STATUS=0&amp;amp;MESSAGE=SUCCESS'''&lt;br /&gt;
** The request was sent successfully, and a response was returned.'''&lt;br /&gt;
*'''STATUS=8&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A key contained an unknown name.&lt;br /&gt;
*'''STATUS=69&amp;amp;MESSAGE=This device isn't eligible for the requested build.'''&lt;br /&gt;
*'''STATUS=83&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A key was assigned an invalid value type.&lt;br /&gt;
*'''STATUS=92&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The request contained more than 65536 bytes.&lt;br /&gt;
*'''STATUS=93&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The request contained less than 10 bytes.&lt;br /&gt;
*'''STATUS=94&amp;amp;MESSAGE=This device isn't eligible for the requested build.'''&lt;br /&gt;
** The specified build is either unsigned or nonexistent.&lt;br /&gt;
*'''STATUS=98&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The XML/PList identification tag is missing or the start of the tag is malformed.&lt;br /&gt;
*'''STATUS=100&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A general XML error was found: the XML/PList version is nonexistent or not &amp;quot;1.0&amp;quot;, the end of the XML/PList identification tag is malformed, an unknown or empty tag was found, the root &amp;lt;code&amp;gt;&amp;lt;plist&amp;gt;&amp;lt;/code&amp;gt; tag is missing, no keys were found, a value tag contained an invalid type, an unescaped ampersand character was found, two consecutive dash characters were found in a comment, or a tag was found without its counterpart.&lt;br /&gt;
*'''STATUS=103&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** Multiple '@' characters were found at the beginning of a key name.&lt;br /&gt;
*'''STATUS=128&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
*'''STATUS=131&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** ''TBD: Something to do with &amp;lt;code&amp;gt;@APTicket&amp;lt;/code&amp;gt;?''&lt;br /&gt;
*'''STATUS=132&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
*'''STATUS=133&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The &amp;lt;code&amp;gt;BbGoldCertId&amp;lt;/code&amp;gt; key is missing in a Baseband install.&lt;br /&gt;
*'''STATUS=511&amp;amp;MESSAGE=No data in the request'''&lt;br /&gt;
*'''STATUS=551&amp;amp;MESSAGE=Error occured while importing config packet with cpsn: '''&lt;br /&gt;
*'''STATUS=5000&amp;amp;MESSAGE=Invalid Option!'''&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* Interestingly, if all you're interested in is the ServerVersion (and a SUCCESS response), sending any one valid Ap-prefixed key will do, like so:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;plist&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;ApSecurityDomain&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In regards to fuzzing and malformed data, the server (as of 2.1.0, at least) seems to have no bounds checking for the ApNonce, or even checking to see if the ApNonce exists. Because the APTicket changes even when specifying an invalid-sized nonce, it is assumed nonces too short are padded while nonces too large are ignored past the 16th character.&lt;br /&gt;
&lt;br /&gt;
* Most textual characters between tags are ignored. For example, inserting non-bracket text (excluding XML special characters, such as '&amp;amp;') after a &amp;lt;code&amp;gt;&amp;lt;dict&amp;gt;&amp;lt;/code&amp;gt; and before the following &amp;lt;code&amp;gt;&amp;lt;key&amp;gt;&amp;lt;/code&amp;gt; will have no effect.&lt;br /&gt;
&lt;br /&gt;
* A version string in the XML/Plist identification tag is '''required''', or a &amp;lt;code&amp;gt;STATUS=100&amp;lt;/code&amp;gt; internal error message will result. Any encoding string provided is ignored and defaulted to (presumably) &amp;quot;UTF-8&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* The DOCTYPE tag is completely ignored. As such, specifying any non-PList DTD has no effect.&lt;br /&gt;
&lt;br /&gt;
===Other parameters / open questions===&lt;br /&gt;
Some parameters could have other values. Not all details are known.&lt;br /&gt;
*ApSecurityDomain: Meaning? (Related to [[SDOM]] tag)&lt;br /&gt;
*Trusted: What is this for?&lt;br /&gt;
*Full description of the above values for UniqueBuildID, Digest, PartialDigest and BuildString.&lt;br /&gt;
&lt;br /&gt;
==PartialDigest==&lt;br /&gt;
The PartialDigest is structured like so:&lt;br /&gt;
&lt;br /&gt;
 typedef struct PartialDigest {&lt;br /&gt;
     uint32_t transformSize;     // Always 0x40.&lt;br /&gt;
     uint32_t img3DataSize;      // data size of the img3.&lt;br /&gt;
     uint8_t hash[SHA1HashSize];  // Result of SHA1ResultPartial from the stripped img3.&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
The img3 is first stripped of it's code signature (if present) and then passed through SHA1Update. SHA1ResultPartial is then performed. It is purposely not the final resulting SHA1. The reason for this being, when TSS processes the PartialDigest, it performs one more SHA1Update on the hash to include the [[ECID]] before doing SHA1Final and creating the SHSH blob.&lt;br /&gt;
&lt;br /&gt;
Code for SHA1ResultPartial:&lt;br /&gt;
 int SHA1ResultPartial(SHA1Context* ctx, unsigned char* buf) {&lt;br /&gt;
 	// Do we have valid buffer and context pointers?&lt;br /&gt;
 	if(ctx &amp;amp;&amp;amp; buf) {&lt;br /&gt;
 		// Is the Context in good shape?&lt;br /&gt;
 		if(!ctx-&amp;gt;Corrupted &amp;amp;&amp;amp; !ctx-&amp;gt;Computed &amp;amp;&amp;amp; !ctx-&amp;gt;Message_Block_Index) {&lt;br /&gt;
 			for(int i = 0; i &amp;lt; SHA1HashSize; i++) {&lt;br /&gt;
 				buf[i] = ctx-&amp;gt;Intermediate_Hash[i &amp;gt;&amp;gt; 2] &amp;gt;&amp;gt; 8 * (3 - (i &amp;amp; 0x3));&lt;br /&gt;
 			}&lt;br /&gt;
 			return 0;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	return 1;&lt;br /&gt;
 }&lt;br /&gt;
Code for tss_strip_img3_signature:&lt;br /&gt;
 int tss_strip_img3_signature(img3Header* img3, int* len) {&lt;br /&gt;
 	// Do we have a non-null ptr?&lt;br /&gt;
 	if(!img3) {&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Does the buffer start with the img3 magic?&lt;br /&gt;
 	if(img3-&amp;gt;magic != IMG3_MAGIC) {&lt;br /&gt;
 		printf(&amp;quot;tss_strip_img3_signature: bad magic 0x%08x expecting 0x%08x\n&amp;quot;, img3-&amp;gt;magic, IMG3_MAGIC);&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Sanity checks&lt;br /&gt;
 	if(img3-&amp;gt;shshOffset &amp;gt; img3-&amp;gt;dataSize) {&lt;br /&gt;
 		printf(&amp;quot;tss_strip_img3_signature: signed length %u too large for buffer length %u\n&amp;quot;, img3-&amp;gt;shshOffset, img3-&amp;gt;dataSize);&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Trim the image by adjusting the header.&lt;br /&gt;
 	if(img3-&amp;gt;shshOffset) {&lt;br /&gt;
 		*len += img3-&amp;gt;shshOffset - img3-&amp;gt;dataSize;&lt;br /&gt;
 		img3-&amp;gt;dataSize = img3-&amp;gt;shshOffset;&lt;br /&gt;
 		img3-&amp;gt;fullSize = *len;&lt;br /&gt;
 	}&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Digest==&lt;br /&gt;
Digest is the SHA1 of the stripped img3. They are used instead of PartialDigests for the APTicket since the ticket is already personalized for the ECID and all other tags.&lt;br /&gt;
&lt;br /&gt;
[[Category:Firmware Tags]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Baseband_Firmware&amp;diff=102218</id>
		<title>Baseband Firmware</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Baseband_Firmware&amp;diff=102218"/>
		<updated>2020-04-18T21:05:12Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: More information on .bbfw&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The main instruction set of the [[Baseband Device|baseband]]. You can get these files from &amp;lt;code&amp;gt;/usr/local/standalone/firmware&amp;lt;/code&amp;gt; on the corresponding firmware's ramdisk or from an [[IPSW]] under &amp;lt;code&amp;gt;/Firmware&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The baseband version that comes with each iPhone firmware is listed on the [[firmware]] page and also on the [[X-Gold 608#Known_Firmware_Versions|X-Gold 608]] article for the [[N82AP|iPhone 3G]]/[[N88AP|iPhone 3GS]].&lt;br /&gt;
&lt;br /&gt;
== File Structure ==&lt;br /&gt;
The &amp;lt;code&amp;gt;.bbfw&amp;lt;/code&amp;gt; file format is a ZIP archive containing &amp;lt;code&amp;gt;Info.plist&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Options.plist&amp;lt;/code&amp;gt;, and multiple firmware files. In the past, these were EEP and FLS files, the external EEPROM and firmware, respectively. In modern iOS versions, these are &amp;lt;code&amp;gt;.mbn&amp;lt;/code&amp;gt; files. As of [[iOS]] version 4.2.1, the baseband version is now checked by iOS.&lt;br /&gt;
&lt;br /&gt;
Some possible &amp;lt;code&amp;gt;.mbn&amp;lt;/code&amp;gt; files include:&lt;br /&gt;
* acdb.mbn&lt;br /&gt;
* apps.mbn&lt;br /&gt;
* bbcfg.mbn&lt;br /&gt;
* mba.mbn&lt;br /&gt;
* qdsp6sw.mbn&lt;br /&gt;
* restoresbl1.mbn&lt;br /&gt;
* rpm.mbn&lt;br /&gt;
* sbl1.mbn&lt;br /&gt;
* tz.mbn&lt;br /&gt;
&lt;br /&gt;
For example, the [[N90AP|iPhone 4]] has a single baseband firmware file. The 4.0 baseband firmware filename is &amp;lt;code&amp;gt;ICE3_01.59.00_BOOT_02.06.Release.bbfw&amp;lt;/code&amp;gt; and contains contains four baseband firmware files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;.bbfw&amp;lt;/code&amp;gt; files have been codenamed [[Trek-3.4.03|Trek]], ICE, and Mav.&lt;br /&gt;
&lt;br /&gt;
== Info.plist ==&lt;br /&gt;
&lt;br /&gt;
The main identifying document for a given Baseband firmware is its &amp;lt;code&amp;gt;Info.plist&amp;lt;/code&amp;gt;. This [[PList File Format|PList]] contains the Build, ChipID, RestoreSBLVersion, SBLVersion, and Baseband Version of the firmware.&lt;br /&gt;
&lt;br /&gt;
==Other Links==&lt;br /&gt;
[http://www.deloware.com/iphone/doku.php?id=bbupdater bbupdater]&lt;br /&gt;
&lt;br /&gt;
[[Category:Baseband]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Secure_Element&amp;diff=102217</id>
		<title>Secure Element</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Secure_Element&amp;diff=102217"/>
		<updated>2020-04-18T20:43:13Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Information about firmware packages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''Secure Element''' (or SE) is the NFC/ApplePay chip. This chip is codenamed '''Stockholm'''. Firmware packages for the chip are codenamed '''Icefall''' and use the &amp;lt;code&amp;gt;.sefw&amp;lt;/code&amp;gt; file extension. Internally, the firmware packages seem to be divided into sections marked with the [https://en.wikipedia.org/wiki/Magic_number_(programming) magics] &amp;lt;code&amp;gt;SLALOM_PACKAGE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CRS_PACKAGE&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;FTA_PACKAGE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Apple's description of ApplePay and the Secure element: https://support.apple.com/en-us/HT203027&lt;br /&gt;
&lt;br /&gt;
{{stub|hardware}}&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=SEPO&amp;diff=102216</id>
		<title>SEPO</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=SEPO&amp;diff=102216"/>
		<updated>2020-04-18T20:01:52Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Reformatted into a table...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''SEPO''' ('''Security EPOch''') tag specifies the minimum Security Epoch required for the device to run the provided image. This allows Apple to prevent devices from running previously vulnerable loaders. An example of this is when Apple increased the SEPO on iPod touch (2nd generation) MC models in addition to patching [[0x24000 Segment Overflow]] to prevent the use of the [[ARM7_Go]] vulnerability from the 2.1.1 loaders.  &lt;br /&gt;
&lt;br /&gt;
== [[Application Processor|Processors]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! [[CHIP|SoC]]&lt;br /&gt;
! Security Epoch&lt;br /&gt;
|-&lt;br /&gt;
| [[S5L8900]]&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[S5L8920]]&lt;br /&gt;
| 0x01 (later 0x02, then 0x04)&lt;br /&gt;
|-&lt;br /&gt;
| [[S5L8922]]&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| [[S5L8930]]&lt;br /&gt;
| 0x02&lt;br /&gt;
|-&lt;br /&gt;
| [[S5L8940]]&lt;br /&gt;
| 0x11&lt;br /&gt;
|-&lt;br /&gt;
| [[S5L8942]]&lt;br /&gt;
| 0x10&lt;br /&gt;
|-&lt;br /&gt;
| [[S5L8945]]&lt;br /&gt;
| 0x10&lt;br /&gt;
|-&lt;br /&gt;
| [[S5L8947]]&lt;br /&gt;
| 0x10&lt;br /&gt;
|-&lt;br /&gt;
| [[S5L8950]]&lt;br /&gt;
| 0x10&lt;br /&gt;
|-&lt;br /&gt;
| [[S5L8955]]&lt;br /&gt;
| 0x10&lt;br /&gt;
|-&lt;br /&gt;
| [[S5L8960]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [[S5L8965]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [[T7000]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [[T7001]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [[S7002]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [[S8000]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [[S8001]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [[S8003]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [[T8002]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [[T8004]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [[T8010]]&lt;br /&gt;
| 0x01&lt;br /&gt;
|-&lt;br /&gt;
| [[T8011]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [[T8015]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [[T8020]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [[T8027]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| [[T8030]]&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{stub|firmware}}&lt;br /&gt;
[[Category:Firmware Tags]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=BORD&amp;diff=102215</id>
		<title>BORD</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=BORD&amp;diff=102215"/>
		<updated>2020-04-18T19:43:32Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Added BDID characteristics. I would additionally change the long bulleted list to a wikitable, but I accidentally refreshed my page a few minutes ago while doing so, so I've lost all my motivation to that for the moment&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''Board ID''' of a device (also known as '''BORD''', '''BDID''', or '''ApBoardId''') is a 6-bit value (although usually represented as &amp;lt;code&amp;gt;uint8_t&amp;lt;/code&amp;gt;) that represents multiple characteristics of the logic board. In a BuildManifest, this value is found in the &amp;lt;code&amp;gt;ApBoardId&amp;lt;/code&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
== Board ID Characteristics ==&lt;br /&gt;
The following table charts each of a Board ID's 6 bits to known board characteristics.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! Bit 5&lt;br /&gt;
! Bit 4&lt;br /&gt;
! Bit 3&lt;br /&gt;
! Bit 2&lt;br /&gt;
! Bit 1&lt;br /&gt;
! Bit 0&lt;br /&gt;
|-&lt;br /&gt;
! Meaning&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| '''Eureka/Karoo'''&lt;br /&gt;
| '''Form Factor'''&lt;br /&gt;
| '''Production Type'''&lt;br /&gt;
|-&lt;br /&gt;
! Values&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;: Eureka&lt;br /&gt;
* &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;: Karoo&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;: Form Factor 'A'&lt;br /&gt;
* &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;: Form Factor 'B'&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;: Production (MLB)&lt;br /&gt;
* &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;: Development (DEV)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
* [[List of AirPods|AirPods]]&lt;br /&gt;
** [[AirPods (1st generation)]]: N/A&lt;br /&gt;
** [[AirPods (2nd generation)]]: 0x12&lt;br /&gt;
* [[List of Apple TVs|Apple TV]]&lt;br /&gt;
** [[K66AP|Apple TV (2nd generation)]]: 0x10&lt;br /&gt;
** [[J33AP|Apple TV (3rd generation) (AppleTV3,1)]]: 0x08&lt;br /&gt;
** [[J33IAP|Apple TV (3rd generation) (AppleTV3,2)]]: 0x00&lt;br /&gt;
** [[J42dAP|Apple TV (4th generation)]]: 0x34&lt;br /&gt;
** [[J105aAP|Apple TV 4K]]: 0x02&lt;br /&gt;
* [[Apple Watch (1st generation)]]&lt;br /&gt;
** [[N27aAP|Watch1,1]]: 0x02&lt;br /&gt;
** [[N28aAP|Watch1,2]]: 0x04&lt;br /&gt;
* [[Apple Watch Series 1]]&lt;br /&gt;
** [[N27dAP|Watch2,6]]: 0x02&lt;br /&gt;
** [[N28dAP|Watch2,7]]: 0x04&lt;br /&gt;
* [[Apple Watch Series 2]]&lt;br /&gt;
** [[N74AP|Watch2,3]]: 0x0C&lt;br /&gt;
** [[N75AP|Watch2,4]]: 0x0E&lt;br /&gt;
* [[Apple Watch Series 3]]&lt;br /&gt;
** [[N111sAP|Watch3,1]]: 0x1C&lt;br /&gt;
** [[N111bAP|Watch3,2]]: 0x1E&lt;br /&gt;
** [[N121sAP|Watch3,3]]: 0x18&lt;br /&gt;
** [[N121bAP|Watch3,4]]: 0x1A&lt;br /&gt;
* [[Apple Watch Series 4]]&lt;br /&gt;
** [[N131sAP|Watch4,1]]: 0x08&lt;br /&gt;
** [[N131bAP|Watch4,2]]: 0x0A&lt;br /&gt;
** [[N141sAP|Watch4,3]]: 0x0C&lt;br /&gt;
** [[N141bAP|Watch4,4]]: 0x0E&lt;br /&gt;
* [[Apple Watch Series 5]]&lt;br /&gt;
** [[N144sAP|Watch5,1]]: 0x10&lt;br /&gt;
** [[N144bAP|Watch5,2]]: 0x12&lt;br /&gt;
** [[N146sAP|Watch5,3]]: 0x14&lt;br /&gt;
** [[N146bAP|Watch5,4]]: 0x16&lt;br /&gt;
* [[HomePod]]&lt;br /&gt;
** [[B238aAP|AudioAccessory1,1]]: 0x38&lt;br /&gt;
** [[B238AP|AudioAccessory1,2]]: 0x1A&lt;br /&gt;
* [[List of iPads|iPad]]&lt;br /&gt;
** [[K48AP|iPad]]: 0x02&lt;br /&gt;
** [[iPad 2]]&lt;br /&gt;
*** [[K93AP|iPad2,1]]: 0x04&lt;br /&gt;
*** [[K94AP|iPad2,2]]: 0x06&lt;br /&gt;
*** [[K95AP|iPad2,3]]: 0x02&lt;br /&gt;
*** [[K93AAP|iPad2,4]]: 0x06&lt;br /&gt;
** [[iPad (3rd generation)]]&lt;br /&gt;
*** [[J1AP|iPad3,1]]: 0x00&lt;br /&gt;
*** [[J2AP|iPad3,2]]: 0x02&lt;br /&gt;
*** [[J2AAP|iPad3,3]]: 0x04&lt;br /&gt;
** [[iPad (4th generation)]]&lt;br /&gt;
*** [[P101AP|iPad3,4]]: 0x00&lt;br /&gt;
*** [[P102AP|iPad3,5]]: 0x02&lt;br /&gt;
*** [[P103AP|iPad3,6]]: 0x04&lt;br /&gt;
** [[iPad Air]]&lt;br /&gt;
*** [[J71AP|iPad4,1]]: 0x10&lt;br /&gt;
*** [[J72AP|iPad4,2]]: 0x12&lt;br /&gt;
*** [[J73AP|iPad4,3]]: 0x14&lt;br /&gt;
** [[iPad Air 2]]&lt;br /&gt;
*** [[J81AP|iPad5,3]]: 0x06&lt;br /&gt;
*** [[J82AP|iPad5,4]]: 0x02&lt;br /&gt;
** [[iPad Pro (12.9-inch)]]&lt;br /&gt;
*** [[J98aAP|iPad6,7]]: 0x10&lt;br /&gt;
*** [[J99aAP|iPad6,8]]: 0x12&lt;br /&gt;
** [[iPad Pro (9.7-inch)]]&lt;br /&gt;
*** [[J127AP|iPad6,3]]: 0x08&lt;br /&gt;
*** [[J128AP|iPad6,4]]: 0x0A&lt;br /&gt;
** [[iPad (5th generation)]]&lt;br /&gt;
*** [[iPad6,11]]: 0x10&amp;lt;!-- J71sAP and J71tAP --&amp;gt;&lt;br /&gt;
*** [[iPad6,12]]: 0x12&amp;lt;!-- J72sAP and J72tAP --&amp;gt;&lt;br /&gt;
** [[iPad Pro (12.9-inch) (2nd generation)]]&lt;br /&gt;
*** [[J120AP|iPad7,1]]: 0x0C&lt;br /&gt;
*** [[J121AP|iPad7,2]]: 0x0E&lt;br /&gt;
** [[iPad Pro (10.5-inch)]]&lt;br /&gt;
*** [[J207AP|iPad7,3]]: 0x04&lt;br /&gt;
*** [[J208AP|iPad7,4]]: 0x06&lt;br /&gt;
** [[iPad (6th generation)]]&lt;br /&gt;
*** [[J71bAP|iPad7,5]]: 0x18&lt;br /&gt;
*** [[J72bAP|iPad7,6]]: 0x1A&lt;br /&gt;
** [[iPad (7th generation)]]&lt;br /&gt;
*** [[J171AP|iPad7,11]]: 0x1C&lt;br /&gt;
*** [[J172AP|iPad7,12]]: 0x1E&lt;br /&gt;
** [[iPad Pro (11-inch)]]&lt;br /&gt;
*** [[J317AP|iPad8,1]]: 0x0C&lt;br /&gt;
*** [[J317xAP|iPad8,2]]: 0x1C&lt;br /&gt;
*** [[J318AP|iPad8,3]]: 0x0E&lt;br /&gt;
*** [[J318xAP|iPad8,4]]: 0x1E&lt;br /&gt;
** [[iPad Pro (12.9-inch) (3rd generation)]]&lt;br /&gt;
*** [[J320AP|iPad8,5]]: 0x08&lt;br /&gt;
*** [[J320xAP|iPad8,6]]: 0x18&lt;br /&gt;
*** [[J321AP|iPad8,7]]: 0x0A&lt;br /&gt;
*** [[J321xAP|iPad8,8]]: 0x1A&lt;br /&gt;
** [[iPad Pro (11-inch) (2nd generation)]]&lt;br /&gt;
*** [[J417AP|iPad8,9]]: 0x3C&lt;br /&gt;
*** [[J418AP|iPad8,10]]: 0x3E&lt;br /&gt;
** [[iPad Pro (12.9-inch) (4th generation)]]&lt;br /&gt;
*** [[J420AP|iPad8,11]]: 0x38&lt;br /&gt;
*** [[J421AP|iPad8,12]]: 0x3A&lt;br /&gt;
** [[iPad Air (3rd generation)]]&lt;br /&gt;
*** [[J217AP|iPad11,3]]: 0x1C&lt;br /&gt;
*** [[J218AP|iPad11,4]]: 0x1E&lt;br /&gt;
* [[List of iPad minis|iPad mini]]&lt;br /&gt;
** [[iPad mini]]&lt;br /&gt;
*** [[P105AP|iPad2,5]]: 0x0A&lt;br /&gt;
*** [[P106AP|iPad2,6]]: 0x0C&lt;br /&gt;
*** [[P107AP|iPad2,7]]: 0x0E&lt;br /&gt;
** [[iPad mini 2]]&lt;br /&gt;
*** [[J85AP|iPad4,4]]: 0x0A&lt;br /&gt;
*** [[J86AP|iPad4,5]]: 0x0C&lt;br /&gt;
*** [[J87AP|iPad4,6]]: 0x0E&lt;br /&gt;
** [[iPad mini 3]]&lt;br /&gt;
*** [[J85mAP|iPad4,7]]: 0x32&lt;br /&gt;
*** [[J86mAP|iPad4,8]]: 0x34&lt;br /&gt;
*** [[J87mAP|iPad4,9]]: 0x36&lt;br /&gt;
** [[iPad mini 4]]&lt;br /&gt;
*** [[J96AP|iPad5,1]]: 0x0A&lt;br /&gt;
*** [[J97AP|iPad5,2]]: 0x08&lt;br /&gt;
** [[iPad mini (5th generation)]]&lt;br /&gt;
*** [[J210AP|iPad11,1]]: 0x14&lt;br /&gt;
*** [[J211AP|iPad11,2]]: 0x16&lt;br /&gt;
* [[List of iPhones|iPhone]]&lt;br /&gt;
** [[M68AP|iPhone]]: 0x00&lt;br /&gt;
** [[N82AP|iPhone 3G]]: 0x04&lt;br /&gt;
** [[N88AP|iPhone 3GS]]: 0x00&lt;br /&gt;
** [[iPhone 4]]&lt;br /&gt;
*** [[N90AP|iPhone3,1]]: 0x00&lt;br /&gt;
*** [[N90BAP|iPhone3,2]]: 0x04&lt;br /&gt;
*** [[N92AP|iPhone3,3]]: 0x06&lt;br /&gt;
** [[N94AP|iPhone 4S]]: 0x08&lt;br /&gt;
** [[iPhone 5]]&lt;br /&gt;
*** [[N41AP|iPhone5,1]]: 0x02&lt;br /&gt;
*** [[N42AP|iPhone5,2]]: 0x00&lt;br /&gt;
** [[iPhone 5c]]&lt;br /&gt;
*** [[N48AP|iPhone5,3]]: 0x0A or 0x0B&lt;br /&gt;
*** [[N49AP|iPhone5,4]]: 0x0E&lt;br /&gt;
** [[iPhone 5s]]&lt;br /&gt;
*** [[N51AP|iPhone6,1]]: 0x00&lt;br /&gt;
*** [[N53AP|iPhone6,2]]: 0x02&lt;br /&gt;
** [[N61AP|iPhone 6]]: 0x06&lt;br /&gt;
** [[N56AP|iPhone 6 Plus]]: 0x04&lt;br /&gt;
** [[iPhone 6s]]: 0x04&lt;br /&gt;
** [[iPhone 6s Plus]]: 0x06&lt;br /&gt;
** [[iPhone SE]]: 0x02&lt;br /&gt;
** [[iPhone 7]]&lt;br /&gt;
*** [[D10AP|iPhone9,1]]: 0x08&lt;br /&gt;
*** [[D101AP|iPhone9,3]]: 0x0c&lt;br /&gt;
** [[iPhone 7 Plus]]&lt;br /&gt;
*** [[D11AP|iPhone9,2]]: 0x0a&lt;br /&gt;
*** [[D111AP|iPhone9,4]]: 0x0e&lt;br /&gt;
** [[iPhone 8]]&lt;br /&gt;
*** [[iPhone10,1]]: 0x02&lt;br /&gt;
*** [[iPhone10,4]]: 0x0A&lt;br /&gt;
** [[iPhone 8 Plus]]&lt;br /&gt;
*** [[iPhone10,2]]: 0x04&lt;br /&gt;
*** [[iPhone10,5]]: 0x0C&lt;br /&gt;
** [[iPhone X]]&lt;br /&gt;
*** [[D22AP|iPhone10,3]]: 0x06&lt;br /&gt;
*** [[D221AP|iPhone10,6]]: 0x0E&lt;br /&gt;
** [[N841AP|iPhone XR]]: 0x0C&lt;br /&gt;
** [[D321AP|iPhone XS]]: 0x0E&lt;br /&gt;
** [[iPhone XS Max]]&lt;br /&gt;
*** [[iPhone11,4]]: 0x0A&lt;br /&gt;
*** [[iPhone11,6]]: 0x1A&lt;br /&gt;
** [[N104AP|iPhone 11]]: 0x04&lt;br /&gt;
** [[D421AP|iPhone 11 Pro]]: 0x06&lt;br /&gt;
** [[D421AP|iPhone 11 Pro Max]]: 0x02&lt;br /&gt;
** [[D79AP|iPhone SE (2nd generation)]]: 0x10&lt;br /&gt;
* [[List of iPod touches|iPod touch]]&lt;br /&gt;
** [[N45AP|iPod touch]]: 0x02&lt;br /&gt;
** [[N72AP|iPod touch (2nd generation)]]: 0x00&lt;br /&gt;
** [[N18AP|iPod touch (3rd generation)]]: 0x02&lt;br /&gt;
** [[N81AP|iPod touch (4th generation)]]: 0x08&lt;br /&gt;
** [[iPod touch (5th generation)]]: 0x00&lt;br /&gt;
** [[N102AP|iPod touch (6th generation)]]: 0x10&lt;br /&gt;
** [[N112AP|iPod touch (7th generation)]]: 0x16&lt;br /&gt;
&lt;br /&gt;
[[Category:Firmware Tags]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=DFU_Mode&amp;diff=102214</id>
		<title>DFU Mode</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=DFU_Mode&amp;diff=102214"/>
		<updated>2020-04-18T18:35:47Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: GPIO pin information; creating GPIO soon...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''DFU''' or '''Device Firmware Upgrade''' mode allows all devices to be restored from any state. It is essentially a mode where the BootROM can accept iBSS. DFU is part of the [[Bootrom|SecureROM]] which is burned into the hardware, so it cannot be removed. On A7+ devices, it generates an ApNonce and recognizes APTickets as well, so even in DFU, it can accept an APTicket.&lt;br /&gt;
&lt;br /&gt;
== Entering DFU Mode ==&lt;br /&gt;
NOTE: If you are using a USB-C cable to enter DFU mode, it might not work. If this happens, you need to use the normal USB cable. You can use a normal USB cable and a USB to USB-C adaptor.&lt;br /&gt;
=== Apple TV ===&lt;br /&gt;
# Plug the device into your computer using a Micro-USB cable.&lt;br /&gt;
# Force the device to reboot by holding down the &amp;quot;Menu&amp;quot; and &amp;quot;Down&amp;quot; buttons simultaneously for 6-7 seconds.&lt;br /&gt;
# Press &amp;quot;Menu&amp;quot; and &amp;quot;Play&amp;quot; simultaneously right after reboot, until a message pops up in [[iTunes]], saying that it has detected an Apple TV in Recovery Mode.&lt;br /&gt;
&lt;br /&gt;
=== A9 and older devices (iPad other than the ones listed below, iPhone 6s and below, iPhone SE and iPod touch 6 and below) ===&lt;br /&gt;
# Connect the device to a computer using a USB cable.&lt;br /&gt;
# Hold down both the Home button and Lock button.&lt;br /&gt;
# After 8 seconds, release the Lock button while continuing to hold down the Home button.&lt;br /&gt;
#* If the Apple logo appears, the Lock button was held down for too long.&lt;br /&gt;
# Nothing will be displayed on the screen when the device is in DFU mode. If open, iTunes will alert you that a device was detected in recovery mode.&lt;br /&gt;
#* If your device shows a screen telling you to connect the device to iTunes, retry these steps.&lt;br /&gt;
&lt;br /&gt;
=== A10 devices (iPhone 7 and iPhone 7 Plus, iPad 2018, iPod touch 7) ===&lt;br /&gt;
# Connect the device to a computer using a USB cable.&lt;br /&gt;
# Hold down both the Side button and Volume Down button.&lt;br /&gt;
# After 8 seconds, release the Side button while continuing to hold down the Volume Down button.&lt;br /&gt;
#* If the Apple logo appears, the Side button was held down for too long.&lt;br /&gt;
# Nothing will be displayed on the screen when the device is in DFU mode. If open, iTunes will alert you that a device was detected in recovery mode.&lt;br /&gt;
#* If your device shows a screen telling you to connect the device to iTunes, retry these steps.&lt;br /&gt;
&lt;br /&gt;
=== A11 and newer devices (iPhone 8 and above, iPad Pro 2018, iPad Air 2019, iPad Mini 2019) ===&lt;br /&gt;
# Connect the device to a computer using a USB cable.&lt;br /&gt;
# Quick-press the Volume Up button&lt;br /&gt;
# Quick-press the Volume Down button&lt;br /&gt;
# Hold down the Side button until the screen goes black, then hold down both the Side button and Volume Down button.&lt;br /&gt;
# After 5 seconds, release the Side button while continuing to hold down the Volume Down button.&lt;br /&gt;
#* If the Apple logo appears, the Side button was held down for too long.&lt;br /&gt;
# Nothing will be displayed on the screen when the device is in DFU mode. If open, iTunes will alert you that a device was detected in recovery mode.&lt;br /&gt;
#* If your device shows a screen telling you to connect the device to iTunes, retry these steps.&lt;br /&gt;
&lt;br /&gt;
=== GPIO Pins ===&lt;br /&gt;
If you have access to the SoC, you can either perform the above methods for your device by utilizing the &amp;lt;code&amp;gt;GPIO_REQUEST_DFU1&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GPIO_REQUEST_DFU2&amp;lt;/code&amp;gt; GPIO pins (previously &amp;lt;code&amp;gt;HOLD_KEY&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MENU_KEY&amp;lt;/code&amp;gt; and corresponding to Power and Home/Vol-, respectively) or by setting your board's &amp;lt;code&amp;gt;GPIO_FORCE_DFU&amp;lt;/code&amp;gt; pin to 1 at SecureROM startup (unless you are using an [[iFPGA]], where Force DFU mode is the default).&lt;br /&gt;
&lt;br /&gt;
The corresponding GPIO pins for each SoC varies, and the most important ones (including the DFU pins) are listed on the [[GPIO]] page.&lt;br /&gt;
&lt;br /&gt;
== Exiting DFU Mode ==&lt;br /&gt;
To exit DFU Mode, simply force restart your device.&lt;br /&gt;
&lt;br /&gt;
* For Apple TV, hold down the &amp;quot;Menu&amp;quot; and &amp;quot;Down&amp;quot; buttons on your remote until the Apple TV reboots.&lt;br /&gt;
* For iPad, iPhone 6s and below, iPhone SE and iPod touch, hold the Home button and the Lock button until the device reboots.&lt;br /&gt;
* For iPhone 7 and iPhone 7 Plus, hold down the Side button and Volume Down button until the device reboots.&lt;br /&gt;
* For iPhone 8, iPhone 8 Plus, and iPhone X, quick-press the Volume Up button, then quick-press the Volume Down button, then hold down the Side button until the device reboots.&lt;br /&gt;
&lt;br /&gt;
==Enter True Hardware DFU Mode Automatically==&lt;br /&gt;
The EnterDFU function in the [[MobileDevice Library]] does not enter the true DFU Mode in the hardware. It's possible to enter the true DFU Mode without doing it manually, but it cannot be exited unless a restore is performed, as it creates a [[DFU Loop]]. This doesn't work with [[S5L8900]] devices.&lt;br /&gt;
&lt;br /&gt;
===Steps===&lt;br /&gt;
# Make a copy of a fresh IPSW file.&lt;br /&gt;
# Open the IPSW as a zip folder and browse to /firmware/all_flash/all_flash.xxxxx.production/&lt;br /&gt;
# Extract LLB.*****.RELEASE.img3/im4p and open it in a hex editor.&lt;br /&gt;
# Change some random bit or bits, it doesn't matter which or what you write.&lt;br /&gt;
# Add the edited file back to the zip, rename zip to ipsw and restore it to your device using iTunes.&lt;br /&gt;
# The restore will error out and your device will be in DFU Mode.&lt;br /&gt;
&lt;br /&gt;
===Alternative Method===&lt;br /&gt;
If the previous method does not work for you, try this one.&lt;br /&gt;
# Do steps 1 and 2 from above.&lt;br /&gt;
# Delete LLB.*****.RELEASE.img3.&lt;br /&gt;
# Copy applelogo.********.img3 to temporary directory.&lt;br /&gt;
# Rename the copy of applelogo.********.img3/im4p to LLB.*****.RELEASE.img3/im4p. (If you forget the name of the LLB file, you can find it again in the file named manifest.)&lt;br /&gt;
# Copy the renamed applelogo file back to the all_flash.xxxxx.production directory.&lt;br /&gt;
# Rename the zip.&lt;br /&gt;
# Restore the file using iTunes. (If every thing goes well, you should receive an error 31 from iTunes.)&lt;br /&gt;
&lt;br /&gt;
==DFU Mode Output to the computer==&lt;br /&gt;
&amp;lt;pre&amp;gt;iProduct: &amp;quot;Apple Mobile Device (DFU Mode)&amp;quot;&amp;lt;/pre&amp;gt; &amp;lt;pre&amp;gt;iSerialNumber: &amp;quot;CPID:XXXX CPRV:15 CPFM:03 SCEP:03 BDID:00 ECID:XXXXXXXXXXXXXXXX SRTG:[iBoot-XXX.X.X]&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Revisions==&lt;br /&gt;
===[[S5L8900]] (0x1222)===&lt;br /&gt;
This is the device ID in the [[N45AP|iPod touch]], the [[M68AP|iPhone]], and the [[N82AP|iPhone 3G]]. For more information about the protocol, see [[DFU 0x1222]].&lt;br /&gt;
&lt;br /&gt;
===[[S5L8720 Bootrom|S5L8720]], [[S5L8920]], and [[WTF|WTF mode post-2.0]] (0x1227)===&lt;br /&gt;
This is the device ID in the [[N72AP|iPod touch (2nd generation)]], the [[N88AP|iPhone 3GS]], the [[N90AP|iPhone 4]], subsequent 32 bit devices, all 64 bit devices, and [[WTF|WTF mode]]. For more information on the protocol, see [[DFU 0x1227]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Bootrom]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=IFPGA&amp;diff=102213</id>
		<title>IFPGA</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=IFPGA&amp;diff=102213"/>
		<updated>2020-04-18T18:28:48Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Reorganized table, more FPGAs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
'''iFPGAs''' are Apple's internal [https://en.wikipedia.org/wiki/Field-programmable_gate_array field-programmable gate arrays] and are used for prototyping new device models before manufacturing.&lt;br /&gt;
&lt;br /&gt;
== FastSim ==&lt;br /&gt;
A variant of iFPGA is called '''FastSim''', which is likely derived from &amp;quot;Fast Simulation&amp;quot;. References to the &amp;quot;FastSim&amp;quot; name are scarce online, but one possible match for Apple's use of it is http://pages.cs.wisc.edu/~wwt/fastsim/index.html, which is a micro-architecture simulator.&lt;br /&gt;
&lt;br /&gt;
== List of Known iFPGAs ==&lt;br /&gt;
''iFPGA devices with &amp;quot;sim&amp;quot; in the name are FastSim.''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! SoC&lt;br /&gt;
! Device&lt;br /&gt;
! [[BORD]]&lt;br /&gt;
|-&lt;br /&gt;
| [[S7002]]&lt;br /&gt;
| s7002simdev&lt;br /&gt;
| 0xFD&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | [[S8000]]&lt;br /&gt;
| s8000simdev&lt;br /&gt;
| 0xFD&lt;br /&gt;
|-&lt;br /&gt;
| s8000fpgadev&lt;br /&gt;
| 0xFF&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | [[S8001]]&lt;br /&gt;
| s8001simdev&lt;br /&gt;
| 0xFD&lt;br /&gt;
|-&lt;br /&gt;
| s8001fpgadev&lt;br /&gt;
| 0xFF&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | [[S8003]]&lt;br /&gt;
| s8003simdev&lt;br /&gt;
| 0xFD&lt;br /&gt;
|-&lt;br /&gt;
| s8003fpgadev&lt;br /&gt;
| 0xFF&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | [[T8002]]&lt;br /&gt;
| t8002simdev&lt;br /&gt;
| 0x3D&lt;br /&gt;
|-&lt;br /&gt;
| t8002fpgadev&lt;br /&gt;
| 0x3F&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | [[T8004]]&lt;br /&gt;
| t8004simdev&lt;br /&gt;
| 0x3D&lt;br /&gt;
|-&lt;br /&gt;
| t8004fpgadev&lt;br /&gt;
| 0x3F&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | [[T8010]]&lt;br /&gt;
| t8010simdev&lt;br /&gt;
| 0xFD&lt;br /&gt;
|-&lt;br /&gt;
| t8010fpgadev&lt;br /&gt;
| 0xFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{stub|hardware}}&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=IFPGA&amp;diff=102182</id>
		<title>IFPGA</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=IFPGA&amp;diff=102182"/>
		<updated>2020-04-16T03:26:39Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Add stub, list of iFPGAs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
'''iFPGAs''' are Apple's internal [https://en.wikipedia.org/wiki/Field-programmable_gate_array field-programmable gate arrays], which are used for prototyping new device models before manufacturing.&lt;br /&gt;
&lt;br /&gt;
== FastSim ==&lt;br /&gt;
A variant of iFPGA is called '''FastSim''', which is likely derived from &amp;quot;Fast Simulation&amp;quot;. References to the &amp;quot;FastSim&amp;quot; name are scarce online, but one possible match for Apple's use of it is http://pages.cs.wisc.edu/~wwt/fastsim/index.html, which is a micro-architecture simulator.&lt;br /&gt;
&lt;br /&gt;
== List of Known iFPGAs ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Device&lt;br /&gt;
! [[BORD]]&lt;br /&gt;
! FastSim?&lt;br /&gt;
|-&lt;br /&gt;
| s7002simdev&lt;br /&gt;
| 0x3D&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|-&lt;br /&gt;
| s8001fpgadev&lt;br /&gt;
| 0xFF&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
| t8004simdev&lt;br /&gt;
| 0x3D&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|-&lt;br /&gt;
| t8004fpgadev&lt;br /&gt;
| 0x3F&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
| t8010simdev&lt;br /&gt;
| 0xFD&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|-&lt;br /&gt;
| t8010fpgadev&lt;br /&gt;
| 0xFF&lt;br /&gt;
| {{no}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{stub|hardware}}&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=IFPGA&amp;diff=102181</id>
		<title>IFPGA</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=IFPGA&amp;diff=102181"/>
		<updated>2020-04-16T03:01:50Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Make lowercase&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}&lt;br /&gt;
'''iFPGAs''' are Apple's internal [https://en.wikipedia.org/wiki/Field-programmable_gate_array field-programmable gate arrays], which are used for prototyping new device models before manufacturing.&lt;br /&gt;
&lt;br /&gt;
== FastSim ==&lt;br /&gt;
A variant of iFPGA is called '''FastSim''', which is likely derived from &amp;quot;Fast Simulation&amp;quot;. References to the &amp;quot;FastSim&amp;quot; name are scarce online, but one possible match for Apple's use of it is http://pages.cs.wisc.edu/~wwt/fastsim/index.html, which is a micro-architecture simulator.&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=IFPGA&amp;diff=102180</id>
		<title>IFPGA</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=IFPGA&amp;diff=102180"/>
		<updated>2020-04-16T03:01:03Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Created page with &amp;quot;'''iFPGAs''' are Apple's internal [https://en.wikipedia.org/wiki/Field-programmable_gate_array field-programmable gate arrays], which are used for prototyping new device model...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''iFPGAs''' are Apple's internal [https://en.wikipedia.org/wiki/Field-programmable_gate_array field-programmable gate arrays], which are used for prototyping new device models before manufacturing.&lt;br /&gt;
&lt;br /&gt;
== FastSim ==&lt;br /&gt;
A variant of iFPGA is called '''FastSim''', which is likely derived from &amp;quot;Fast Simulation&amp;quot;. References to the &amp;quot;FastSim&amp;quot; name are scarce online, but one possible match for Apple's use of it is http://pages.cs.wisc.edu/~wwt/fastsim/index.html, which is a micro-architecture simulator.&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=SHSH_Protocol&amp;diff=102049</id>
		<title>SHSH Protocol</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=SHSH_Protocol&amp;diff=102049"/>
		<updated>2020-04-11T02:06:04Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Moar statuses&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a description of the protocol that is used when [[iTunes]] requests the [[SHSH]] certificate from Apple. For details about what this is used for, please see the main article [[SHSH]].&lt;br /&gt;
&lt;br /&gt;
This is a simple [[wikipedia:Hypertext Transfer Protocol|HTTP]] ([[wikipedia:POST (HTTP)|POST]]) request and answer. You can retry this via a [[wikipedia:Telnet|Telnet]] session or similar. The destination host is [http://gs.apple.com/TSS/controller?action=2 gs.apple.com] and runs on the common  [[wikipedia:TCP and UDP port|port]] 80. The data is plaintext and not encoded in any way. For details about the [[wikipedia:Hypertext Transfer Protocol|HTTP]] protocol itself, please see [http://www.w3.org/Protocols/HTTP/1.1/rfc2616.pdf RFC2616].&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
Reliable communication to the TSS server is best achieved with the following HTTP header configuration:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Host: gs.apple.com&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;User-Agent: InetURL/1.0&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Content-Type: text/xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following [https://curl.haxx.se/ curl] command demonstrates a command-line request to the server:&lt;br /&gt;
&lt;br /&gt;
 curl -i -s -m 1.0 -A 'InetURL/1.0' -X POST -H 'Content-Type: text/xml' -H 'Host: gs.apple.com' -d @/location/to/my/request.xml gs.apple.com/TSS/controller?action=2&lt;br /&gt;
&lt;br /&gt;
===Action types===&lt;br /&gt;
Attached to the http://gs.apple.com/TSS/controller URL is commonly &amp;lt;code&amp;gt;?action=2&amp;lt;/code&amp;gt;, which can be discovered when performing an iTunes restore and observing packets sent with a packet sniffer such as [https://www.wireshark.org Wireshark]. However, values other than 2 may produce different server responses, of which all known value/response pairs have been listed below.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=0&amp;lt;/code&amp;gt;: Performs a &amp;quot;Tatsu Signing Server HealthCheck&amp;quot;, returning an HTML body of &amp;quot;Server not ready&amp;quot;. This may be a general ping protocol for ensuring the TSS service is online.&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=2&amp;lt;/code&amp;gt;: Common SHSH protocol. See [[#Status responses]] for all known server responses.&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=3&amp;lt;/code&amp;gt;: Functionally the same as &amp;lt;code&amp;gt;?action=2&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=5&amp;lt;/code&amp;gt;: Generates &amp;lt;code&amp;gt;respCode&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;respMsg&amp;lt;/code&amp;gt;. This response syntax differs slightly from the SHSH protocol. The name &amp;quot;cpsn&amp;quot; is referenced.&lt;br /&gt;
&lt;br /&gt;
All unlisted action types appear to respond without HTML content, only status.&lt;br /&gt;
&lt;br /&gt;
===Sending data (request)===&lt;br /&gt;
The request is actually a single XML-encoded property list. It contains a dictionary which describes the target iOS version, restore behavior, etc. Some of the required information can be taken from the BuildManifest.plist. BuildManifest contains some info about the firmware version and &amp;quot;BuildIdentities&amp;quot; dictionary. Inside it you can find two (or more?) build identities. Each of them contains the information which depends on every type of restore (&amp;quot;Erase&amp;quot; or &amp;quot;Update&amp;quot;). Some information is device-dependent (ECID, nonce) and is received from the device.&lt;br /&gt;
&lt;br /&gt;
Request property list should have these properties:&lt;br /&gt;
&lt;br /&gt;
* '''@APTicket:''' Optional boolean value. If true, the server adds an [[APTicket]] to the request.&lt;br /&gt;
* '''@BBTicket:''' Optional boolean value. The same for the [[BBTicket]].&lt;br /&gt;
* '''@UDID:''' Optional string value. Just request UDID (ex. D9C1F33D-62E0-4D25-8068-F5F46FE80057).&lt;br /&gt;
* '''@HostPlatformInfo:''' Optional string value. &amp;quot;mac&amp;quot; for OS X client, &amp;quot;windows&amp;quot; for Windows client (can be everything you want).&lt;br /&gt;
* '''@Locality:''' Optional string value. Language used for the error response (ex. &amp;quot;en_US&amp;quot;).&lt;br /&gt;
* '''@VersionInfo:''' Optional string value. The version of 'libauthinstall' used (ex. &amp;quot;libauthinstall-391.0.0.1.3&amp;quot;). You can pass any string here.&lt;br /&gt;
* '''ApBoardID:''' Integer value. [[BORD |Board ID]] of the target device. You can take this value from build manifest.&lt;br /&gt;
* '''ApChipID:''' Integer value. [[CHIP|Chip ID]] of the target device. You can take this value from build manifest.&lt;br /&gt;
* '''ApECID:''' Integer value. [[ECID]] of the target device.&lt;br /&gt;
* '''ApNonce:''' Data value. The [[nonce]] generated by your device.&lt;br /&gt;
* '''ApProductionMode:''' Boolean value. Always true (unless your SOC is PROD 0 - Apple only).&lt;br /&gt;
* '''ApSecurityDomain:''' Integer value. The use is unknown. You can take this value from build manifest.&lt;br /&gt;
* '''UniqueBuildID:''' Optional data value. This is a unique identifier for every build (different even for &amp;quot;Erase&amp;quot; and &amp;quot;Update&amp;quot; types of restore).  You can take this value from build manifest.&lt;br /&gt;
&lt;br /&gt;
The SHSH request also contains information about files from the [[IPSW]] (or restore bundle for [[PurpleRestore]]). They can be obtained from the 'build identity' you've chosen in the previous step. Each 'build identity' contains a &amp;quot;Manifest&amp;quot; dictionary. It's entries look like&lt;br /&gt;
 &amp;lt;key&amp;gt;BatteryCharging0&amp;lt;/key&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;Digest&amp;lt;/key&amp;gt;&lt;br /&gt;
  	&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt;...&amp;lt;/data&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;Info&amp;lt;/key&amp;gt;&lt;br /&gt;
 	&amp;lt;dict&amp;gt;...&amp;lt;/dict&amp;gt;&lt;br /&gt;
  	&amp;lt;key&amp;gt;Trusted&amp;lt;key/&amp;gt;&lt;br /&gt;
 	&amp;lt;true/&amp;gt;&lt;br /&gt;
 &amp;lt;dict/&amp;gt;&lt;br /&gt;
They are just copied to the SHSH request, but the &amp;quot;Info&amp;quot; dictionary is removed.&lt;br /&gt;
Example of a SHSH request (... values are identical, *** values are different per device):&lt;br /&gt;
 &amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt; &lt;br /&gt;
 &amp;lt;dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@[[APTicket]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@[[BBTicket]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@HostPlatformInfo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;mac&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@Locality&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;en_US&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@UUID&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;D9C1F33D-62E0-4D25-8068-F5F46FE80057&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@VersionInfo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;libauthinstall-391.0.0.1.3&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[BORD |ApBoardID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;10&amp;lt;/integer&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;[[CHIP |ApChipID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;35152&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[ECID |ApECID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;***&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[Nonce |ApNonce]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt;***&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;ApProductionMode&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;ApSecurityDomain&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;UniqueBuildID&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;data&amp;gt; fqzW0B++Zdrs+PRwohkwU6prjbk=&amp;lt;/data&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;AppleLogo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;Digest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; uH5QQax5YmIrgcuEHwOhAB//yc8=&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		&amp;lt;key&amp;gt;Trusted&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;/dict&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryCharging0&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... See AppleLogo dictionary.&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryCharging1&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryFull&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... &lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryLow0&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryLow1&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryPlugin&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;DeviceTree&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;KernelCache&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;LLB&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;PartialDigest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; QAAAAHhRAgC22ZPWJB9J1Nh3H+0XeyRTU72ObA==&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RecoveryMode&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreDeviceTree&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreKernelCache&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreLogo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... &lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreRamDisk&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBEC]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBSS]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;PartialDigest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; QAAAAHhBAQCRc2PuoresMjW7zNLePMPmX7zaHg==&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBoot]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 &amp;lt;/dict&amp;gt; &lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Receiving data (answer)===&lt;br /&gt;
The response is a simple HTTP POST response, containing 3 values: STATUS, MESSAGE (a description string) and REQUEST_STRING (only if the request was successful). STATUS contains numeric status, MESSAGE contains an error message on error and &amp;quot;SUCCESS&amp;quot; string on success and REQUEST_STRING contains response property list encoded as XML.&lt;br /&gt;
&lt;br /&gt;
===Status responses===&lt;br /&gt;
*'''STATUS=0&amp;amp;MESSAGE=SUCCESS'''&lt;br /&gt;
** The request was sent successfully, and a response was returned.'''&lt;br /&gt;
*'''STATUS=8&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A key contained an unknown name.&lt;br /&gt;
*'''STATUS=69&amp;amp;MESSAGE=This device isn't eligible for the requested build.'''&lt;br /&gt;
*'''STATUS=83&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A key was assigned an invalid value type.&lt;br /&gt;
*'''STATUS=92&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The request contained more than 65536 bytes.&lt;br /&gt;
*'''STATUS=93&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The request contained less than 10 bytes.&lt;br /&gt;
*'''STATUS=94&amp;amp;MESSAGE=This device isn't eligible for the requested build.'''&lt;br /&gt;
** The specified build is either unsigned or nonexistent.&lt;br /&gt;
*'''STATUS=98&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The XML/PList identification tag is missing or the start of the tag is malformed.&lt;br /&gt;
*'''STATUS=100&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A general XML error was found: the XML/PList version is nonexistent or not &amp;quot;1.0&amp;quot;, the end of the XML/PList identification tag is malformed, an unknown or empty tag was found, the root &amp;lt;code&amp;gt;&amp;lt;plist&amp;gt;&amp;lt;/code&amp;gt; tag is missing, no keys were found, a value tag contained an invalid type, an unescaped ampersand character was found, two consecutive dash characters were found in a comment, or a tag was found without its counterpart.&lt;br /&gt;
*'''STATUS=103&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** Multiple '@' characters were found at the beginning of a key name.&lt;br /&gt;
*'''STATUS=128&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
*'''STATUS=131&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** ''TBD: Something to do with &amp;lt;code&amp;gt;@APTicket&amp;lt;/code&amp;gt;?''&lt;br /&gt;
*'''STATUS=132&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
*'''STATUS=133&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The &amp;lt;code&amp;gt;BbGoldCertId&amp;lt;/code&amp;gt; key is missing in a Baseband install.&lt;br /&gt;
*'''STATUS=511&amp;amp;MESSAGE=No data in the request'''&lt;br /&gt;
*'''STATUS=551&amp;amp;MESSAGE=Error occured while importing config packet with cpsn: '''&lt;br /&gt;
*'''STATUS=5000&amp;amp;MESSAGE=Invalid Option!'''&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* Interestingly, if all you're interested in is the ServerVersion (and a SUCCESS response), sending any one valid Ap-prefixed key will do, like so:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;plist&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;ApSecurityDomain&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In regards to fuzzing and malformed data, the server (as of 2.1.0, at least) seems to have no bounds checking for the ApNonce, or even checking to see if the ApNonce exists. Because the APTicket changes even when specifying an invalid-sized nonce, it is assumed nonces too short are padded while nonces too large are ignored past the 16th character.&lt;br /&gt;
&lt;br /&gt;
* Most textual characters between tags are ignored. For example, inserting non-bracket text (excluding XML special characters, such as '&amp;amp;') after a &amp;lt;code&amp;gt;&amp;lt;dict&amp;gt;&amp;lt;/code&amp;gt; and before the following &amp;lt;code&amp;gt;&amp;lt;key&amp;gt;&amp;lt;/code&amp;gt; will have no effect.&lt;br /&gt;
&lt;br /&gt;
* A version string in the XML/Plist identification tag is '''required''', or a &amp;lt;code&amp;gt;STATUS=100&amp;lt;/code&amp;gt; internal error message will result. Any encoding string provided is ignored and defaulted to (presumably) &amp;quot;UTF-8&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* The DOCTYPE tag is completely ignored. As such, specifying any non-PList DTD has no effect.&lt;br /&gt;
&lt;br /&gt;
===Other parameters / open questions===&lt;br /&gt;
Some parameters could have other values. Not all details are known.&lt;br /&gt;
*ApSecurityDomain: Meaning? (Related to [[SDOM]] tag)&lt;br /&gt;
*Trusted: What is this for?&lt;br /&gt;
*Full description of the above values for UniqueBuildID, Digest, PartialDigest and BuildString.&lt;br /&gt;
&lt;br /&gt;
==PartialDigest==&lt;br /&gt;
The PartialDigest is structured like so:&lt;br /&gt;
&lt;br /&gt;
 typedef struct PartialDigest {&lt;br /&gt;
     uint32_t transformSize;     // Always 0x40.&lt;br /&gt;
     uint32_t img3DataSize;      // data size of the img3.&lt;br /&gt;
     uint8_t hash[SHA1HashSize];  // Result of SHA1ResultPartial from the stripped img3.&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
The img3 is first stripped of it's code signature (if present) and then passed through SHA1Update. SHA1ResultPartial is then performed. It is purposely not the final resulting SHA1. The reason for this being, when TSS processes the PartialDigest, it performs one more SHA1Update on the hash to include the [[ECID]] before doing SHA1Final and creating the SHSH blob.&lt;br /&gt;
&lt;br /&gt;
Code for SHA1ResultPartial:&lt;br /&gt;
 int SHA1ResultPartial(SHA1Context* ctx, unsigned char* buf) {&lt;br /&gt;
 	// Do we have valid buffer and context pointers?&lt;br /&gt;
 	if(ctx &amp;amp;&amp;amp; buf) {&lt;br /&gt;
 		// Is the Context in good shape?&lt;br /&gt;
 		if(!ctx-&amp;gt;Corrupted &amp;amp;&amp;amp; !ctx-&amp;gt;Computed &amp;amp;&amp;amp; !ctx-&amp;gt;Message_Block_Index) {&lt;br /&gt;
 			for(int i = 0; i &amp;lt; SHA1HashSize; i++) {&lt;br /&gt;
 				buf[i] = ctx-&amp;gt;Intermediate_Hash[i &amp;gt;&amp;gt; 2] &amp;gt;&amp;gt; 8 * (3 - (i &amp;amp; 0x3));&lt;br /&gt;
 			}&lt;br /&gt;
 			return 0;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	return 1;&lt;br /&gt;
 }&lt;br /&gt;
Code for tss_strip_img3_signature:&lt;br /&gt;
 int tss_strip_img3_signature(img3Header* img3, int* len) {&lt;br /&gt;
 	// Do we have a non-null ptr?&lt;br /&gt;
 	if(!img3) {&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Does the buffer start with the img3 magic?&lt;br /&gt;
 	if(img3-&amp;gt;magic != IMG3_MAGIC) {&lt;br /&gt;
 		printf(&amp;quot;tss_strip_img3_signature: bad magic 0x%08x expecting 0x%08x\n&amp;quot;, img3-&amp;gt;magic, IMG3_MAGIC);&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Sanity checks&lt;br /&gt;
 	if(img3-&amp;gt;shshOffset &amp;gt; img3-&amp;gt;dataSize) {&lt;br /&gt;
 		printf(&amp;quot;tss_strip_img3_signature: signed length %u too large for buffer length %u\n&amp;quot;, img3-&amp;gt;shshOffset, img3-&amp;gt;dataSize);&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Trim the image by adjusting the header.&lt;br /&gt;
 	if(img3-&amp;gt;shshOffset) {&lt;br /&gt;
 		*len += img3-&amp;gt;shshOffset - img3-&amp;gt;dataSize;&lt;br /&gt;
 		img3-&amp;gt;dataSize = img3-&amp;gt;shshOffset;&lt;br /&gt;
 		img3-&amp;gt;fullSize = *len;&lt;br /&gt;
 	}&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Digest==&lt;br /&gt;
Digest is the SHA1 of the stripped img3. They are used instead of PartialDigests for the APTicket since the ticket is already personalized for the ECID and all other tags.&lt;br /&gt;
&lt;br /&gt;
[[Category:Firmware Tags]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=SHSH_Protocol&amp;diff=102048</id>
		<title>SHSH Protocol</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=SHSH_Protocol&amp;diff=102048"/>
		<updated>2020-04-10T23:25:24Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Another status error&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a description of the protocol that is used when [[iTunes]] requests the [[SHSH]] certificate from Apple. For details about what this is used for, please see the main article [[SHSH]].&lt;br /&gt;
&lt;br /&gt;
This is a simple [[wikipedia:Hypertext Transfer Protocol|HTTP]] ([[wikipedia:POST (HTTP)|POST]]) request and answer. You can retry this via a [[wikipedia:Telnet|Telnet]] session or similar. The destination host is [http://gs.apple.com/TSS/controller?action=2 gs.apple.com] and runs on the common  [[wikipedia:TCP and UDP port|port]] 80. The data is plaintext and not encoded in any way. For details about the [[wikipedia:Hypertext Transfer Protocol|HTTP]] protocol itself, please see [http://www.w3.org/Protocols/HTTP/1.1/rfc2616.pdf RFC2616].&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
Reliable communication to the TSS server is best achieved with the following HTTP header configuration:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Host: gs.apple.com&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;User-Agent: InetURL/1.0&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Content-Type: text/xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following [https://curl.haxx.se/ curl] command demonstrates a command-line request to the server:&lt;br /&gt;
&lt;br /&gt;
 curl -i -s -m 1.0 -A 'InetURL/1.0' -X POST -H 'Content-Type: text/xml' -H 'Host: gs.apple.com' -d @/location/to/my/request.xml gs.apple.com/TSS/controller?action=2&lt;br /&gt;
&lt;br /&gt;
===Action types===&lt;br /&gt;
Attached to the http://gs.apple.com/TSS/controller URL is commonly &amp;lt;code&amp;gt;?action=2&amp;lt;/code&amp;gt;, which can be discovered when performing an iTunes restore and observing packets sent with a packet sniffer such as [https://www.wireshark.org Wireshark]. However, values other than 2 may produce different server responses, of which all known value/response pairs have been listed below.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=0&amp;lt;/code&amp;gt;: Performs a &amp;quot;Tatsu Signing Server HealthCheck&amp;quot;, returning an HTML body of &amp;quot;Server not ready&amp;quot;. This may be a general ping protocol for ensuring the TSS service is online.&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=2&amp;lt;/code&amp;gt;: Common SHSH protocol. See [[#Status responses]] for all known server responses.&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=3&amp;lt;/code&amp;gt;: Functionally the same as &amp;lt;code&amp;gt;?action=2&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=5&amp;lt;/code&amp;gt;: Generates &amp;lt;code&amp;gt;respCode&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;respMsg&amp;lt;/code&amp;gt;. This response syntax differs slightly from the SHSH protocol. The name &amp;quot;cpsn&amp;quot; is referenced.&lt;br /&gt;
&lt;br /&gt;
All unlisted action types appear to respond without HTML content, only status.&lt;br /&gt;
&lt;br /&gt;
===Sending data (request)===&lt;br /&gt;
The request is actually a single XML-encoded property list. It contains a dictionary which describes the target iOS version, restore behavior, etc. Some of the required information can be taken from the BuildManifest.plist. BuildManifest contains some info about the firmware version and &amp;quot;BuildIdentities&amp;quot; dictionary. Inside it you can find two (or more?) build identities. Each of them contains the information which depends on every type of restore (&amp;quot;Erase&amp;quot; or &amp;quot;Update&amp;quot;). Some information is device-dependent (ECID, nonce) and is received from the device.&lt;br /&gt;
&lt;br /&gt;
Request property list should have these properties:&lt;br /&gt;
&lt;br /&gt;
* '''@APTicket:''' Optional boolean value. If true, the server adds an [[APTicket]] to the request.&lt;br /&gt;
* '''@BBTicket:''' Optional boolean value. The same for the [[BBTicket]].&lt;br /&gt;
* '''@UDID:''' Optional string value. Just request UDID (ex. D9C1F33D-62E0-4D25-8068-F5F46FE80057).&lt;br /&gt;
* '''@HostPlatformInfo:''' Optional string value. &amp;quot;mac&amp;quot; for OS X client, &amp;quot;windows&amp;quot; for Windows client (can be everything you want).&lt;br /&gt;
* '''@Locality:''' Optional string value. Language used for the error response (ex. &amp;quot;en_US&amp;quot;).&lt;br /&gt;
* '''@VersionInfo:''' Optional string value. The version of 'libauthinstall' used (ex. &amp;quot;libauthinstall-391.0.0.1.3&amp;quot;). You can pass any string here.&lt;br /&gt;
* '''ApBoardID:''' Integer value. [[BORD |Board ID]] of the target device. You can take this value from build manifest.&lt;br /&gt;
* '''ApChipID:''' Integer value. [[CHIP|Chip ID]] of the target device. You can take this value from build manifest.&lt;br /&gt;
* '''ApECID:''' Integer value. [[ECID]] of the target device.&lt;br /&gt;
* '''ApNonce:''' Data value. The [[nonce]] generated by your device.&lt;br /&gt;
* '''ApProductionMode:''' Boolean value. Always true (unless your SOC is PROD 0 - Apple only).&lt;br /&gt;
* '''ApSecurityDomain:''' Integer value. The use is unknown. You can take this value from build manifest.&lt;br /&gt;
* '''UniqueBuildID:''' Optional data value. This is a unique identifier for every build (different even for &amp;quot;Erase&amp;quot; and &amp;quot;Update&amp;quot; types of restore).  You can take this value from build manifest.&lt;br /&gt;
&lt;br /&gt;
The SHSH request also contains information about files from the [[IPSW]] (or restore bundle for [[PurpleRestore]]). They can be obtained from the 'build identity' you've chosen in the previous step. Each 'build identity' contains a &amp;quot;Manifest&amp;quot; dictionary. It's entries look like&lt;br /&gt;
 &amp;lt;key&amp;gt;BatteryCharging0&amp;lt;/key&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;Digest&amp;lt;/key&amp;gt;&lt;br /&gt;
  	&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt;...&amp;lt;/data&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;Info&amp;lt;/key&amp;gt;&lt;br /&gt;
 	&amp;lt;dict&amp;gt;...&amp;lt;/dict&amp;gt;&lt;br /&gt;
  	&amp;lt;key&amp;gt;Trusted&amp;lt;key/&amp;gt;&lt;br /&gt;
 	&amp;lt;true/&amp;gt;&lt;br /&gt;
 &amp;lt;dict/&amp;gt;&lt;br /&gt;
They are just copied to the SHSH request, but the &amp;quot;Info&amp;quot; dictionary is removed.&lt;br /&gt;
Example of a SHSH request (... values are identical, *** values are different per device):&lt;br /&gt;
 &amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt; &lt;br /&gt;
 &amp;lt;dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@[[APTicket]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@[[BBTicket]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@HostPlatformInfo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;mac&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@Locality&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;en_US&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@UUID&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;D9C1F33D-62E0-4D25-8068-F5F46FE80057&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@VersionInfo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;libauthinstall-391.0.0.1.3&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[BORD |ApBoardID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;10&amp;lt;/integer&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;[[CHIP |ApChipID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;35152&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[ECID |ApECID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;***&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[Nonce |ApNonce]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt;***&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;ApProductionMode&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;ApSecurityDomain&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;UniqueBuildID&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;data&amp;gt; fqzW0B++Zdrs+PRwohkwU6prjbk=&amp;lt;/data&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;AppleLogo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;Digest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; uH5QQax5YmIrgcuEHwOhAB//yc8=&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		&amp;lt;key&amp;gt;Trusted&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;/dict&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryCharging0&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... See AppleLogo dictionary.&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryCharging1&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryFull&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... &lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryLow0&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryLow1&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryPlugin&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;DeviceTree&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;KernelCache&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;LLB&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;PartialDigest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; QAAAAHhRAgC22ZPWJB9J1Nh3H+0XeyRTU72ObA==&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RecoveryMode&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreDeviceTree&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreKernelCache&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreLogo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... &lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreRamDisk&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBEC]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBSS]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;PartialDigest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; QAAAAHhBAQCRc2PuoresMjW7zNLePMPmX7zaHg==&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBoot]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 &amp;lt;/dict&amp;gt; &lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Receiving data (answer)===&lt;br /&gt;
The response is a simple HTTP POST response, containing 3 values: STATUS, MESSAGE (a description string) and REQUEST_STRING (only if the request was successful). STATUS contains numeric status, MESSAGE contains an error message on error and &amp;quot;SUCCESS&amp;quot; string on success and REQUEST_STRING contains response property list encoded as XML.&lt;br /&gt;
&lt;br /&gt;
===Status responses===&lt;br /&gt;
*'''STATUS=0&amp;amp;MESSAGE=SUCCESS'''&lt;br /&gt;
** The request was sent successfully, and a response was returned.'''&lt;br /&gt;
*'''STATUS=8&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A key contained an unknown name.&lt;br /&gt;
*'''STATUS=69&amp;amp;MESSAGE=This device isn't eligible for the requested build.'''&lt;br /&gt;
*'''STATUS=83&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A key was assigned an invalid value type.&lt;br /&gt;
*'''STATUS=92&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The request contained more than 65536 bytes.&lt;br /&gt;
*'''STATUS=93&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The request contained less than 10 bytes.&lt;br /&gt;
*'''STATUS=94&amp;amp;MESSAGE=This device isn't eligible for the requested build.'''&lt;br /&gt;
** The specified build is either unsigned or nonexistent.&lt;br /&gt;
*'''STATUS=98&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The XML/PList identification tag is missing or the start of the tag is malformed.&lt;br /&gt;
*'''STATUS=100&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A general XML error was found: the XML/PList version is nonexistent or not &amp;quot;1.0&amp;quot;, the end of the XML/PList identification tag is malformed, an unknown or empty tag was found, the root &amp;lt;code&amp;gt;&amp;lt;plist&amp;gt;&amp;lt;/code&amp;gt; tag is missing, no keys were found, a value tag contained an invalid type, an unescaped ampersand character was found, two consecutive dash characters were found in a comment, or a tag was found without its counterpart.&lt;br /&gt;
*'''STATUS=103&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** Multiple '@' characters were found at the beginning of a key name.&lt;br /&gt;
*'''STATUS=128&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
*'''STATUS=131&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** ''TBD: Something to do with @APTicket?''&lt;br /&gt;
*'''STATUS=132&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
*'''STATUS=511&amp;amp;MESSAGE=No data in the request'''&lt;br /&gt;
*'''STATUS=551&amp;amp;MESSAGE=Error occured while importing config packet with cpsn: '''&lt;br /&gt;
*'''STATUS=5000&amp;amp;MESSAGE=Invalid Option!'''&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* Interestingly, if all you're interested in is the ServerVersion (and a SUCCESS response), sending any one valid Ap-prefixed key will do, like so:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;plist&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;ApSecurityDomain&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In regards to fuzzing and malformed data, the server (as of 2.1.0, at least) seems to have no bounds checking for the ApNonce, or even checking to see if the ApNonce exists. Because the APTicket changes even when specifying an invalid-sized nonce, it is assumed nonces too short are padded while nonces too large are ignored past the 16th character.&lt;br /&gt;
&lt;br /&gt;
* Most textual characters between tags are ignored. For example, inserting non-bracket text (excluding XML special characters, such as '&amp;amp;') after a &amp;lt;code&amp;gt;&amp;lt;dict&amp;gt;&amp;lt;/code&amp;gt; and before the following &amp;lt;code&amp;gt;&amp;lt;key&amp;gt;&amp;lt;/code&amp;gt; will have no effect.&lt;br /&gt;
&lt;br /&gt;
* A version string in the XML/Plist identification tag is '''required''', or a &amp;lt;code&amp;gt;STATUS=100&amp;lt;/code&amp;gt; internal error message will result. Any encoding string provided is ignored and defaulted to (presumably) &amp;quot;UTF-8&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* The DOCTYPE tag is completely ignored. As such, specifying any non-PList DTD has no effect.&lt;br /&gt;
&lt;br /&gt;
===Other parameters / open questions===&lt;br /&gt;
Some parameters could have other values. Not all details are known.&lt;br /&gt;
*ApSecurityDomain: Meaning? (Related to [[SDOM]] tag)&lt;br /&gt;
*Trusted: What is this for?&lt;br /&gt;
*Full description of the above values for UniqueBuildID, Digest, PartialDigest and BuildString.&lt;br /&gt;
&lt;br /&gt;
==PartialDigest==&lt;br /&gt;
The PartialDigest is structured like so:&lt;br /&gt;
&lt;br /&gt;
 typedef struct PartialDigest {&lt;br /&gt;
     uint32_t transformSize;     // Always 0x40.&lt;br /&gt;
     uint32_t img3DataSize;      // data size of the img3.&lt;br /&gt;
     uint8_t hash[SHA1HashSize];  // Result of SHA1ResultPartial from the stripped img3.&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
The img3 is first stripped of it's code signature (if present) and then passed through SHA1Update. SHA1ResultPartial is then performed. It is purposely not the final resulting SHA1. The reason for this being, when TSS processes the PartialDigest, it performs one more SHA1Update on the hash to include the [[ECID]] before doing SHA1Final and creating the SHSH blob.&lt;br /&gt;
&lt;br /&gt;
Code for SHA1ResultPartial:&lt;br /&gt;
 int SHA1ResultPartial(SHA1Context* ctx, unsigned char* buf) {&lt;br /&gt;
 	// Do we have valid buffer and context pointers?&lt;br /&gt;
 	if(ctx &amp;amp;&amp;amp; buf) {&lt;br /&gt;
 		// Is the Context in good shape?&lt;br /&gt;
 		if(!ctx-&amp;gt;Corrupted &amp;amp;&amp;amp; !ctx-&amp;gt;Computed &amp;amp;&amp;amp; !ctx-&amp;gt;Message_Block_Index) {&lt;br /&gt;
 			for(int i = 0; i &amp;lt; SHA1HashSize; i++) {&lt;br /&gt;
 				buf[i] = ctx-&amp;gt;Intermediate_Hash[i &amp;gt;&amp;gt; 2] &amp;gt;&amp;gt; 8 * (3 - (i &amp;amp; 0x3));&lt;br /&gt;
 			}&lt;br /&gt;
 			return 0;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	return 1;&lt;br /&gt;
 }&lt;br /&gt;
Code for tss_strip_img3_signature:&lt;br /&gt;
 int tss_strip_img3_signature(img3Header* img3, int* len) {&lt;br /&gt;
 	// Do we have a non-null ptr?&lt;br /&gt;
 	if(!img3) {&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Does the buffer start with the img3 magic?&lt;br /&gt;
 	if(img3-&amp;gt;magic != IMG3_MAGIC) {&lt;br /&gt;
 		printf(&amp;quot;tss_strip_img3_signature: bad magic 0x%08x expecting 0x%08x\n&amp;quot;, img3-&amp;gt;magic, IMG3_MAGIC);&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Sanity checks&lt;br /&gt;
 	if(img3-&amp;gt;shshOffset &amp;gt; img3-&amp;gt;dataSize) {&lt;br /&gt;
 		printf(&amp;quot;tss_strip_img3_signature: signed length %u too large for buffer length %u\n&amp;quot;, img3-&amp;gt;shshOffset, img3-&amp;gt;dataSize);&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Trim the image by adjusting the header.&lt;br /&gt;
 	if(img3-&amp;gt;shshOffset) {&lt;br /&gt;
 		*len += img3-&amp;gt;shshOffset - img3-&amp;gt;dataSize;&lt;br /&gt;
 		img3-&amp;gt;dataSize = img3-&amp;gt;shshOffset;&lt;br /&gt;
 		img3-&amp;gt;fullSize = *len;&lt;br /&gt;
 	}&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Digest==&lt;br /&gt;
Digest is the SHA1 of the stripped img3. They are used instead of PartialDigests for the APTicket since the ticket is already personalized for the ECID and all other tags.&lt;br /&gt;
&lt;br /&gt;
[[Category:Firmware Tags]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=SHSH_Protocol&amp;diff=102047</id>
		<title>SHSH Protocol</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=SHSH_Protocol&amp;diff=102047"/>
		<updated>2020-04-10T21:02:59Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Added new error status&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a description of the protocol that is used when [[iTunes]] requests the [[SHSH]] certificate from Apple. For details about what this is used for, please see the main article [[SHSH]].&lt;br /&gt;
&lt;br /&gt;
This is a simple [[wikipedia:Hypertext Transfer Protocol|HTTP]] ([[wikipedia:POST (HTTP)|POST]]) request and answer. You can retry this via a [[wikipedia:Telnet|Telnet]] session or similar. The destination host is [http://gs.apple.com/TSS/controller?action=2 gs.apple.com] and runs on the common  [[wikipedia:TCP and UDP port|port]] 80. The data is plaintext and not encoded in any way. For details about the [[wikipedia:Hypertext Transfer Protocol|HTTP]] protocol itself, please see [http://www.w3.org/Protocols/HTTP/1.1/rfc2616.pdf RFC2616].&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
Reliable communication to the TSS server is best achieved with the following HTTP header configuration:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Host: gs.apple.com&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;User-Agent: InetURL/1.0&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Content-Type: text/xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following [https://curl.haxx.se/ curl] command demonstrates a command-line request to the server:&lt;br /&gt;
&lt;br /&gt;
 curl -i -s -m 1.0 -A 'InetURL/1.0' -X POST -H 'Content-Type: text/xml' -H 'Host: gs.apple.com' -d @/location/to/my/request.xml gs.apple.com/TSS/controller?action=2&lt;br /&gt;
&lt;br /&gt;
===Action types===&lt;br /&gt;
Attached to the http://gs.apple.com/TSS/controller URL is commonly &amp;lt;code&amp;gt;?action=2&amp;lt;/code&amp;gt;, which can be discovered when performing an iTunes restore and observing packets sent with a packet sniffer such as [https://www.wireshark.org Wireshark]. However, values other than 2 may produce different server responses, of which all known value/response pairs have been listed below.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=0&amp;lt;/code&amp;gt;: Performs a &amp;quot;Tatsu Signing Server HealthCheck&amp;quot;, returning an HTML body of &amp;quot;Server not ready&amp;quot;. This may be a general ping protocol for ensuring the TSS service is online.&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=2&amp;lt;/code&amp;gt;: Common SHSH protocol. See [[#Status responses]] for all known server responses.&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=3&amp;lt;/code&amp;gt;: Functionally the same as &amp;lt;code&amp;gt;?action=2&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=5&amp;lt;/code&amp;gt;: Generates &amp;lt;code&amp;gt;respCode&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;respMsg&amp;lt;/code&amp;gt;. This response syntax differs slightly from the SHSH protocol. The name &amp;quot;cpsn&amp;quot; is referenced.&lt;br /&gt;
&lt;br /&gt;
All unlisted action types appear to respond without HTML content, only status.&lt;br /&gt;
&lt;br /&gt;
===Sending data (request)===&lt;br /&gt;
The request is actually a single XML-encoded property list. It contains a dictionary which describes the target iOS version, restore behavior, etc. Some of the required information can be taken from the BuildManifest.plist. BuildManifest contains some info about the firmware version and &amp;quot;BuildIdentities&amp;quot; dictionary. Inside it you can find two (or more?) build identities. Each of them contains the information which depends on every type of restore (&amp;quot;Erase&amp;quot; or &amp;quot;Update&amp;quot;). Some information is device-dependent (ECID, nonce) and is received from the device.&lt;br /&gt;
&lt;br /&gt;
Request property list should have these properties:&lt;br /&gt;
&lt;br /&gt;
* '''@APTicket:''' Optional boolean value. If true, the server adds an [[APTicket]] to the request.&lt;br /&gt;
* '''@BBTicket:''' Optional boolean value. The same for the [[BBTicket]].&lt;br /&gt;
* '''@UDID:''' Optional string value. Just request UDID (ex. D9C1F33D-62E0-4D25-8068-F5F46FE80057).&lt;br /&gt;
* '''@HostPlatformInfo:''' Optional string value. &amp;quot;mac&amp;quot; for OS X client, &amp;quot;windows&amp;quot; for Windows client (can be everything you want).&lt;br /&gt;
* '''@Locality:''' Optional string value. Language used for the error response (ex. &amp;quot;en_US&amp;quot;).&lt;br /&gt;
* '''@VersionInfo:''' Optional string value. The version of 'libauthinstall' used (ex. &amp;quot;libauthinstall-391.0.0.1.3&amp;quot;). You can pass any string here.&lt;br /&gt;
* '''ApBoardID:''' Integer value. [[BORD |Board ID]] of the target device. You can take this value from build manifest.&lt;br /&gt;
* '''ApChipID:''' Integer value. [[CHIP|Chip ID]] of the target device. You can take this value from build manifest.&lt;br /&gt;
* '''ApECID:''' Integer value. [[ECID]] of the target device.&lt;br /&gt;
* '''ApNonce:''' Data value. The [[nonce]] generated by your device.&lt;br /&gt;
* '''ApProductionMode:''' Boolean value. Always true (unless your SOC is PROD 0 - Apple only).&lt;br /&gt;
* '''ApSecurityDomain:''' Integer value. The use is unknown. You can take this value from build manifest.&lt;br /&gt;
* '''UniqueBuildID:''' Optional data value. This is a unique identifier for every build (different even for &amp;quot;Erase&amp;quot; and &amp;quot;Update&amp;quot; types of restore).  You can take this value from build manifest.&lt;br /&gt;
&lt;br /&gt;
The SHSH request also contains information about files from the [[IPSW]] (or restore bundle for [[PurpleRestore]]). They can be obtained from the 'build identity' you've chosen in the previous step. Each 'build identity' contains a &amp;quot;Manifest&amp;quot; dictionary. It's entries look like&lt;br /&gt;
 &amp;lt;key&amp;gt;BatteryCharging0&amp;lt;/key&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;Digest&amp;lt;/key&amp;gt;&lt;br /&gt;
  	&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt;...&amp;lt;/data&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;Info&amp;lt;/key&amp;gt;&lt;br /&gt;
 	&amp;lt;dict&amp;gt;...&amp;lt;/dict&amp;gt;&lt;br /&gt;
  	&amp;lt;key&amp;gt;Trusted&amp;lt;key/&amp;gt;&lt;br /&gt;
 	&amp;lt;true/&amp;gt;&lt;br /&gt;
 &amp;lt;dict/&amp;gt;&lt;br /&gt;
They are just copied to the SHSH request, but the &amp;quot;Info&amp;quot; dictionary is removed.&lt;br /&gt;
Example of a SHSH request (... values are identical, *** values are different per device):&lt;br /&gt;
 &amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt; &lt;br /&gt;
 &amp;lt;dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@[[APTicket]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@[[BBTicket]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@HostPlatformInfo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;mac&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@Locality&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;en_US&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@UUID&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;D9C1F33D-62E0-4D25-8068-F5F46FE80057&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@VersionInfo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;libauthinstall-391.0.0.1.3&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[BORD |ApBoardID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;10&amp;lt;/integer&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;[[CHIP |ApChipID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;35152&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[ECID |ApECID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;***&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[Nonce |ApNonce]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt;***&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;ApProductionMode&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;ApSecurityDomain&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;UniqueBuildID&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;data&amp;gt; fqzW0B++Zdrs+PRwohkwU6prjbk=&amp;lt;/data&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;AppleLogo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;Digest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; uH5QQax5YmIrgcuEHwOhAB//yc8=&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		&amp;lt;key&amp;gt;Trusted&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;/dict&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryCharging0&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... See AppleLogo dictionary.&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryCharging1&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryFull&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... &lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryLow0&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryLow1&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryPlugin&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;DeviceTree&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;KernelCache&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;LLB&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;PartialDigest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; QAAAAHhRAgC22ZPWJB9J1Nh3H+0XeyRTU72ObA==&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RecoveryMode&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreDeviceTree&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreKernelCache&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreLogo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... &lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreRamDisk&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBEC]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBSS]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;PartialDigest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; QAAAAHhBAQCRc2PuoresMjW7zNLePMPmX7zaHg==&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBoot]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 &amp;lt;/dict&amp;gt; &lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Receiving data (answer)===&lt;br /&gt;
The response is a simple HTTP POST response, containing 3 values: STATUS, MESSAGE (a description string) and REQUEST_STRING (only if the request was successful). STATUS contains numeric status, MESSAGE contains an error message on error and &amp;quot;SUCCESS&amp;quot; string on success and REQUEST_STRING contains response property list encoded as XML.&lt;br /&gt;
&lt;br /&gt;
===Status responses===&lt;br /&gt;
*'''STATUS=0&amp;amp;MESSAGE=SUCCESS'''&lt;br /&gt;
** The request was sent successfully, and a response was returned.'''&lt;br /&gt;
*'''STATUS=8&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A key contained an unknown name.&lt;br /&gt;
*'''STATUS=83&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A key was assigned an invalid value type.&lt;br /&gt;
*'''STATUS=92&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The request contained more than 65536 bytes.&lt;br /&gt;
*'''STATUS=93&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The request contained less than 10 bytes.&lt;br /&gt;
*'''STATUS=94&amp;amp;MESSAGE=This device isn't eligible for the requested build.'''&lt;br /&gt;
** The specified build is either unsigned or nonexistent.&lt;br /&gt;
*'''STATUS=98&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The XML/PList identification tag is missing or the start of the tag is malformed.&lt;br /&gt;
*'''STATUS=100&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A general XML error was found: the XML/PList version is nonexistent or not &amp;quot;1.0&amp;quot;, the end of the XML/PList identification tag is malformed, an unknown or empty tag was found, the root &amp;lt;code&amp;gt;&amp;lt;plist&amp;gt;&amp;lt;/code&amp;gt; tag is missing, no keys were found, a value tag contained an invalid type, an unescaped ampersand character was found, two consecutive dash characters were found in a comment, or a tag was found without its counterpart.&lt;br /&gt;
*'''STATUS=103&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** Multiple '@' characters were found at the beginning of a key name.&lt;br /&gt;
*'''STATUS=128&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
*'''STATUS=131&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
*'''STATUS=511&amp;amp;MESSAGE=No data in the request'''&lt;br /&gt;
*'''STATUS=551&amp;amp;MESSAGE=Error occured while importing config packet with cpsn: '''&lt;br /&gt;
*'''STATUS=5000&amp;amp;MESSAGE=Invalid Option!'''&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* Interestingly, if all you're interested in is the ServerVersion (and a SUCCESS response), sending any one valid Ap-prefixed key will do, like so:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;plist&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;ApSecurityDomain&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In regards to fuzzing and malformed data, the server (as of 2.1.0, at least) seems to have no bounds checking for the ApNonce, or even checking to see if the ApNonce exists. Because the APTicket changes even when specifying an invalid-sized nonce, it is assumed nonces too short are padded while nonces too large are ignored past the 16th character.&lt;br /&gt;
&lt;br /&gt;
* Most textual characters between tags are ignored. For example, inserting non-bracket text (excluding XML special characters, such as '&amp;amp;') after a &amp;lt;code&amp;gt;&amp;lt;dict&amp;gt;&amp;lt;/code&amp;gt; and before the following &amp;lt;code&amp;gt;&amp;lt;key&amp;gt;&amp;lt;/code&amp;gt; will have no effect.&lt;br /&gt;
&lt;br /&gt;
* A version string in the XML/Plist identification tag is '''required''', or a &amp;lt;code&amp;gt;STATUS=100&amp;lt;/code&amp;gt; internal error message will result. Any encoding string provided is ignored and defaulted to (presumably) &amp;quot;UTF-8&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* The DOCTYPE tag is completely ignored. As such, specifying any non-PList DTD has no effect.&lt;br /&gt;
&lt;br /&gt;
===Other parameters / open questions===&lt;br /&gt;
Some parameters could have other values. Not all details are known.&lt;br /&gt;
*ApSecurityDomain: Meaning? (Related to [[SDOM]] tag)&lt;br /&gt;
*Trusted: What is this for?&lt;br /&gt;
*Full description of the above values for UniqueBuildID, Digest, PartialDigest and BuildString.&lt;br /&gt;
&lt;br /&gt;
==PartialDigest==&lt;br /&gt;
The PartialDigest is structured like so:&lt;br /&gt;
&lt;br /&gt;
 typedef struct PartialDigest {&lt;br /&gt;
     uint32_t transformSize;     // Always 0x40.&lt;br /&gt;
     uint32_t img3DataSize;      // data size of the img3.&lt;br /&gt;
     uint8_t hash[SHA1HashSize];  // Result of SHA1ResultPartial from the stripped img3.&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
The img3 is first stripped of it's code signature (if present) and then passed through SHA1Update. SHA1ResultPartial is then performed. It is purposely not the final resulting SHA1. The reason for this being, when TSS processes the PartialDigest, it performs one more SHA1Update on the hash to include the [[ECID]] before doing SHA1Final and creating the SHSH blob.&lt;br /&gt;
&lt;br /&gt;
Code for SHA1ResultPartial:&lt;br /&gt;
 int SHA1ResultPartial(SHA1Context* ctx, unsigned char* buf) {&lt;br /&gt;
 	// Do we have valid buffer and context pointers?&lt;br /&gt;
 	if(ctx &amp;amp;&amp;amp; buf) {&lt;br /&gt;
 		// Is the Context in good shape?&lt;br /&gt;
 		if(!ctx-&amp;gt;Corrupted &amp;amp;&amp;amp; !ctx-&amp;gt;Computed &amp;amp;&amp;amp; !ctx-&amp;gt;Message_Block_Index) {&lt;br /&gt;
 			for(int i = 0; i &amp;lt; SHA1HashSize; i++) {&lt;br /&gt;
 				buf[i] = ctx-&amp;gt;Intermediate_Hash[i &amp;gt;&amp;gt; 2] &amp;gt;&amp;gt; 8 * (3 - (i &amp;amp; 0x3));&lt;br /&gt;
 			}&lt;br /&gt;
 			return 0;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	return 1;&lt;br /&gt;
 }&lt;br /&gt;
Code for tss_strip_img3_signature:&lt;br /&gt;
 int tss_strip_img3_signature(img3Header* img3, int* len) {&lt;br /&gt;
 	// Do we have a non-null ptr?&lt;br /&gt;
 	if(!img3) {&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Does the buffer start with the img3 magic?&lt;br /&gt;
 	if(img3-&amp;gt;magic != IMG3_MAGIC) {&lt;br /&gt;
 		printf(&amp;quot;tss_strip_img3_signature: bad magic 0x%08x expecting 0x%08x\n&amp;quot;, img3-&amp;gt;magic, IMG3_MAGIC);&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Sanity checks&lt;br /&gt;
 	if(img3-&amp;gt;shshOffset &amp;gt; img3-&amp;gt;dataSize) {&lt;br /&gt;
 		printf(&amp;quot;tss_strip_img3_signature: signed length %u too large for buffer length %u\n&amp;quot;, img3-&amp;gt;shshOffset, img3-&amp;gt;dataSize);&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Trim the image by adjusting the header.&lt;br /&gt;
 	if(img3-&amp;gt;shshOffset) {&lt;br /&gt;
 		*len += img3-&amp;gt;shshOffset - img3-&amp;gt;dataSize;&lt;br /&gt;
 		img3-&amp;gt;dataSize = img3-&amp;gt;shshOffset;&lt;br /&gt;
 		img3-&amp;gt;fullSize = *len;&lt;br /&gt;
 	}&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Digest==&lt;br /&gt;
Digest is the SHA1 of the stripped img3. They are used instead of PartialDigests for the APTicket since the ticket is already personalized for the ECID and all other tags.&lt;br /&gt;
&lt;br /&gt;
[[Category:Firmware Tags]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Tatsu_Signing_Server&amp;diff=101793</id>
		<title>Tatsu Signing Server</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Tatsu_Signing_Server&amp;diff=101793"/>
		<updated>2020-03-28T19:40:54Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: It was fun while it lasted.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''Tatsu Signing Server''' ('''TSS''') is a collection of services provided by Apple. In late 2012, the list of available services was briefly made public at [https://web.archive.org/web/20121128012112/http://gs.apple.com/TSS/ gs.apple.com]. This index page has since been removed, although at least one archived capture exists.&lt;br /&gt;
TSS is accessed chiefly for use of the [[SHSH Protocol]] to receive signed blobs for a given iOS build. This is achieved with the SHSH controller at http://gs.apple.com/TSS/controller.&lt;br /&gt;
&lt;br /&gt;
There is an Apple internal equivalent, known as SpiderCab, running at [http://tatsu-tss-internal.apple.com:80 tatsu-tss-internal.apple.com] and [http://tss-int.apple.com:80 tss-int.apple.com], which are only accessible within Apple's VPN. SpiderCab is used to sign internal/debug and test builds of iOS, including old versions that are no longer signed on production.&lt;br /&gt;
&lt;br /&gt;
'''Note: As of 2/18/2020, access to TSS SOAP services is forbidden, likely to all outside of Apple's internal network.''' Reliable communication to the TSS server requires the appropriate HTTP header, as described in [[SHSH Protocol#Communication]]. If you are communicating with a TSS service and not the SHSH controller itself, you must additionally provide a &amp;lt;code&amp;gt;SOAPAction:&amp;lt;/code&amp;gt; header containing the URL of the service you are accessing. Also note that '''not all TSS servers accept SOAP requests.'''&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
&lt;br /&gt;
There are two services provided, both accessible via [https://en.wikipedia.org/wiki/SOAP SOAP] requests. They are located in http://gs.apple.com/TSS/services/ under their respective names. A sample request concerning &amp;quot;getReceiptPacketStatus&amp;quot; from the &amp;quot;tatsuReceiptsStatusPort&amp;quot; service is demonstrated below:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; POST /TSS/services/tatsuReceiptsStatusPort HTTP/1.1&lt;br /&gt;
 &amp;gt; Host: gs.apple.com&lt;br /&gt;
 &amp;gt; User-Agent: InetURL/1.0&lt;br /&gt;
 &amp;gt; Accept: */*&lt;br /&gt;
 &amp;gt; Content-Length: 588&lt;br /&gt;
 &amp;gt; Content-Type: text/xml;charset=utf-8&lt;br /&gt;
 &amp;gt; SOAPAction: http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&lt;br /&gt;
&lt;br /&gt;
SOAP XML:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;soapenv:Envelope&lt;br /&gt;
 	xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;&lt;br /&gt;
 	xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
 	xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;
 	&amp;lt;ns1:getReceiptPacketStatus&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xmlns:ns1=&amp;quot;http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&amp;quot;&amp;gt;&lt;br /&gt;
 		&amp;lt;ns1:param0&lt;br /&gt;
 			xsi:type=&amp;quot;ns2:ReceiptDataPacketStatusRequest&amp;quot;&lt;br /&gt;
 			xmlns:ns2=&amp;quot;http://receiptsstatus.web.tss.apple.com&amp;quot;&amp;gt;&lt;br /&gt;
 			&amp;lt;ns2:status&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/ns2:status&amp;gt;&lt;br /&gt;
 		&amp;lt;/ns1:param0&amp;gt;&lt;br /&gt;
 	&amp;lt;/ns1:getReceiptPacketStatus&amp;gt;&lt;br /&gt;
 &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;soapenv:Envelope&lt;br /&gt;
 	xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;&lt;br /&gt;
 	xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
 	xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;
 	&amp;lt;ns1:getReceiptPacketStatusResponse&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xmlns:ns1=&amp;quot;http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 		&amp;lt;param1 href=&amp;quot;#id0&amp;quot;/&amp;gt;&lt;br /&gt;
 	&amp;lt;/ns1:getReceiptPacketStatusResponse&amp;gt;&lt;br /&gt;
 	&amp;lt;multiRef&lt;br /&gt;
 		id=&amp;quot;id0&amp;quot;&lt;br /&gt;
 		soapenc:root=&amp;quot;0&amp;quot;&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xsi:type=&amp;quot;ns2:ReceiptDataPacketStatusResponse&amp;quot;&lt;br /&gt;
 		xmlns:soapenc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xmlns:ns2=&amp;quot;http://receiptsstatus.web.tss.apple.com&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 		&amp;lt;batchIdhref=&amp;quot;#id1&amp;quot;/&amp;gt;&lt;br /&gt;
 		&amp;lt;status href=&amp;quot;#id2&amp;quot;/&amp;gt;&lt;br /&gt;
 		&amp;lt;ip xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;10.108.105.161&amp;lt;/ip&amp;gt;&lt;br /&gt;
 	&amp;lt;/multiRef&amp;gt;&lt;br /&gt;
 	&amp;lt;multiRef&lt;br /&gt;
 		id=&amp;quot;id1&amp;quot;&lt;br /&gt;
 		soapenc:root=&amp;quot;0&amp;quot;&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xsi:type=&amp;quot;xsd:long&amp;quot;&lt;br /&gt;
 		xmlns:soapenc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
 		0&lt;br /&gt;
 	&amp;lt;/multiRef&amp;gt;&lt;br /&gt;
 	&amp;lt;multiRef&lt;br /&gt;
 		id=&amp;quot;id2&amp;quot;&lt;br /&gt;
 		soapenc:root=&amp;quot;0&amp;quot;&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xsi:type=&amp;quot;ns3:status&amp;quot;&lt;br /&gt;
 		xmlns:ns3=&amp;quot;http://receiptsstatus.web.tss.apple.com&amp;quot;&lt;br /&gt;
 		xmlns:soapenc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;code href=&amp;quot;#id3&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		&amp;lt;desc xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;&amp;lt;/desc&amp;gt;&lt;br /&gt;
 	&amp;lt;/multiRef&amp;gt;&lt;br /&gt;
 	&amp;lt;multiRef&lt;br /&gt;
 		id=&amp;quot;id3&amp;quot;&lt;br /&gt;
 		soapenc:root=&amp;quot;0&amp;quot;&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xsi:type=&amp;quot;xsd:int&amp;quot;&lt;br /&gt;
 		xmlns:soapenc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
 		3&lt;br /&gt;
 	&amp;lt;/multiRef&amp;gt;&lt;br /&gt;
 &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This type of SOAP request/response can be performed with a cURL request, like so (where &amp;lt;code&amp;gt;soap.xml&amp;lt;/code&amp;gt; is the location of the aforementioned SOAP XML):&lt;br /&gt;
&lt;br /&gt;
 curl -i -m 1.0 -H &amp;quot;Content-Type: text/xml;charset=utf-8&amp;quot; -A InetURL/1.0 -H &amp;quot;SOAPAction: http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&amp;quot; -H &amp;quot;Host: gs.apple.com&amp;quot; -d @soap.xml http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&lt;br /&gt;
&lt;br /&gt;
'''Note: ''' The server may occasionally return &amp;lt;code&amp;gt;java.lang.NullPointerException&amp;lt;/code&amp;gt; despite a valid response. Retrying the request will likely remedy this. ''Is this a race condition bug on the server side?''&lt;br /&gt;
&lt;br /&gt;
===PacketPort===&lt;br /&gt;
&lt;br /&gt;
====pushDataPacket====&lt;br /&gt;
&lt;br /&gt;
* '''Input Message''' (&amp;lt;code&amp;gt;pushDataPacketRequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''Output Message''' (&amp;lt;code&amp;gt;pushDataPacketResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
===tatsuReceiptsStatusPort===&lt;br /&gt;
&lt;br /&gt;
====Custom Types====&lt;br /&gt;
&lt;br /&gt;
These are custom types defined by the http://receiptsstatus.web.tss.apple.com/ namespace, documented below:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; contains a status code and the description for the aforementioned code. The only known status code is 3.&lt;br /&gt;
** &amp;lt;code&amp;gt;code&amp;lt;/code&amp;gt; (Integer)&lt;br /&gt;
** &amp;lt;code&amp;gt;desc&amp;lt;/code&amp;gt; (String)&lt;br /&gt;
* &amp;lt;code&amp;gt;ReceiptDataPacketStatusRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;code&amp;lt;/code&amp;gt; (Number)&lt;br /&gt;
* &amp;lt;code&amp;gt;ReceiptDataPacketStatusResponse&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;[no name]&amp;lt;/code&amp;gt; (Long)&lt;br /&gt;
** &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; (type=&amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;ip&amp;lt;/code&amp;gt; (String)&lt;br /&gt;
* &amp;lt;code&amp;gt;ExpireTSAQueryRequest&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;tsa&amp;lt;/code&amp;gt; (Number)&lt;br /&gt;
* &amp;lt;code&amp;gt;ExpireTSAQueryResponse&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====getReceiptPacketStatus====&lt;br /&gt;
&lt;br /&gt;
Returns an unknown number, a status type, and a [https://en.m.wikipedia.org/wiki/Reserved_IP_addresses private IP address] (likely meant to be accessed within Apple’s internal VPN).&lt;br /&gt;
&lt;br /&gt;
* '''Input Message''' (&amp;lt;code&amp;gt;getReceiptPacketStatusRequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param0&amp;lt;/code&amp;gt; (type=&amp;lt;code&amp;gt;ReceiptDataPacketStatusRequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''Output Message''' (&amp;lt;code&amp;gt;getReceiptPacketStatusResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param1&amp;lt;/code&amp;gt; (type=&amp;lt;code&amp;gt;ReceiptDataPacketStatusResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
====queryTASExpireTSA====&lt;br /&gt;
&lt;br /&gt;
* '''Input Message''' (&amp;lt;code&amp;gt;queryTASExpireTSARequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param2&amp;lt;/code&amp;gt; (type=&amp;lt;code&amp;gt;ExpireTSAQueryRequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''Output Message''' (&amp;lt;code&amp;gt;queryTASExpireTSAResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param3&amp;lt;/code&amp;gt; (type=&amp;lt;code&amp;gt;ExpireTSAQueryResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
====updateTSSStatus====&lt;br /&gt;
&lt;br /&gt;
* '''Input Message''' (&amp;lt;code&amp;gt;updateTSSStatusRequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param4&amp;lt;/code&amp;gt; (type=&amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''Output Message''' (&amp;lt;code&amp;gt;updateTSSStatusResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param5&amp;lt;/code&amp;gt; (type=&amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
[https://www.soapui.org SoapUI], a test automation framework for the SOAP protocol, lists Apple among their largest users [https://www.soapui.org/downloads/download-soapui-pro-trial.html].&lt;br /&gt;
&lt;br /&gt;
===Server Details===&lt;br /&gt;
It is of moderate security concern to know that the TSS server runs [http://tomcat.apache.org/ Apache Tomcat], which is exposed, alongside version number, in the default 404 page. The SOAP implementation used is [http://axis.apache.org/axis/ Apache Axis] (Java).&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* [[TinyUmbrella]]&lt;br /&gt;
* [https://www.w3.org/TR/2000/NOTE-SOAP-20000508 SOAP specification]&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* [https://web.archive.org/web/20121128012112/http://gs.apple.com/TSS/ List of available services (archive.org)]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Tatsu_Signing_Server&amp;diff=99155</id>
		<title>Tatsu Signing Server</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Tatsu_Signing_Server&amp;diff=99155"/>
		<updated>2020-02-18T05:13:39Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: The IP is unreachable because it is private. Likely meant for Apple’s VPN&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''Tatsu Signing Server''' ('''TSS''') is a collection of services provided by Apple. In late 2012, the list of available services was briefly made public at [https://web.archive.org/web/20121128012112/http://gs.apple.com/TSS/ gs.apple.com]. This index page has since been removed, although at least one archived capture exists.&lt;br /&gt;
TSS is accessed chiefly for use of the [[SHSH Protocol]] to receive signed blobs for a given iOS build. This is achieved with the SHSH controller at http://gs.apple.com/TSS/controller.&lt;br /&gt;
&lt;br /&gt;
There is an Apple internal equivalent, known as SpiderCab, running at [http://tatsu-tss-internal.apple.com:80 tatsu-tss-internal.apple.com] and [http://tss-int.apple.com:80 tss-int.apple.com], which are only accessible within Apple's VPN. SpiderCab is used to sign internal/debug and test builds of iOS, including old versions that are no longer signed on production.&lt;br /&gt;
&lt;br /&gt;
Reliable communication to the TSS server requires the appropriate HTTP header, as described in [[SHSH Protocol#Communication]]. If you are communicating with a TSS service and not the SHSH controller itself, you must additionally provide a &amp;lt;code&amp;gt;SOAPAction:&amp;lt;/code&amp;gt; header containing the URL of the service you are accessing. Also note that '''not all TSS servers accept SOAP requests.''' Because http://gs.apple.com automatically resolves to one of the half-a-dozen TSS servers, some of which indiscriminately returning &amp;quot;403 Forbidden&amp;quot; to SOAP, it is recommended to communicate directly with a known-working TSS IP address.&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
&lt;br /&gt;
There are two services provided, both accessible via [https://en.wikipedia.org/wiki/SOAP SOAP] requests. They are located in http://gs.apple.com/TSS/services/ under their respective names. A sample request concerning &amp;quot;getReceiptPacketStatus&amp;quot; from the &amp;quot;tatsuReceiptsStatusPort&amp;quot; service is demonstrated below:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; POST /TSS/services/tatsuReceiptsStatusPort HTTP/1.1&lt;br /&gt;
 &amp;gt; Host: gs.apple.com&lt;br /&gt;
 &amp;gt; User-Agent: InetURL/1.0&lt;br /&gt;
 &amp;gt; Accept: */*&lt;br /&gt;
 &amp;gt; Content-Length: 588&lt;br /&gt;
 &amp;gt; Content-Type: text/xml;charset=utf-8&lt;br /&gt;
 &amp;gt; SOAPAction: http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&lt;br /&gt;
&lt;br /&gt;
SOAP XML:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;soapenv:Envelope&lt;br /&gt;
 	xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;&lt;br /&gt;
 	xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
 	xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;
 	&amp;lt;ns1:getReceiptPacketStatus&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xmlns:ns1=&amp;quot;http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&amp;quot;&amp;gt;&lt;br /&gt;
 		&amp;lt;ns1:param0&lt;br /&gt;
 			xsi:type=&amp;quot;ns2:ReceiptDataPacketStatusRequest&amp;quot;&lt;br /&gt;
 			xmlns:ns2=&amp;quot;http://receiptsstatus.web.tss.apple.com&amp;quot;&amp;gt;&lt;br /&gt;
 			&amp;lt;ns2:status&amp;gt;&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&amp;lt;/ns2:status&amp;gt;&lt;br /&gt;
 		&amp;lt;/ns1:param0&amp;gt;&lt;br /&gt;
 	&amp;lt;/ns1:getReceiptPacketStatus&amp;gt;&lt;br /&gt;
 &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;soapenv:Envelope&lt;br /&gt;
 	xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;&lt;br /&gt;
 	xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
 	xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;
 	&amp;lt;ns1:getReceiptPacketStatusResponse&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xmlns:ns1=&amp;quot;http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 		&amp;lt;param1 href=&amp;quot;#id0&amp;quot;/&amp;gt;&lt;br /&gt;
 	&amp;lt;/ns1:getReceiptPacketStatusResponse&amp;gt;&lt;br /&gt;
 	&amp;lt;multiRef&lt;br /&gt;
 		id=&amp;quot;id0&amp;quot;&lt;br /&gt;
 		soapenc:root=&amp;quot;0&amp;quot;&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xsi:type=&amp;quot;ns2:ReceiptDataPacketStatusResponse&amp;quot;&lt;br /&gt;
 		xmlns:soapenc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xmlns:ns2=&amp;quot;http://receiptsstatus.web.tss.apple.com&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 		&amp;lt;batchIdhref=&amp;quot;#id1&amp;quot;/&amp;gt;&lt;br /&gt;
 		&amp;lt;status href=&amp;quot;#id2&amp;quot;/&amp;gt;&lt;br /&gt;
 		&amp;lt;ip xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;10.108.105.161&amp;lt;/ip&amp;gt;&lt;br /&gt;
 	&amp;lt;/multiRef&amp;gt;&lt;br /&gt;
 	&amp;lt;multiRef&lt;br /&gt;
 		id=&amp;quot;id1&amp;quot;&lt;br /&gt;
 		soapenc:root=&amp;quot;0&amp;quot;&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xsi:type=&amp;quot;xsd:long&amp;quot;&lt;br /&gt;
 		xmlns:soapenc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
 		0&lt;br /&gt;
 	&amp;lt;/multiRef&amp;gt;&lt;br /&gt;
 	&amp;lt;multiRef&lt;br /&gt;
 		id=&amp;quot;id2&amp;quot;&lt;br /&gt;
 		soapenc:root=&amp;quot;0&amp;quot;&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xsi:type=&amp;quot;ns3:status&amp;quot;&lt;br /&gt;
 		xmlns:ns3=&amp;quot;http://receiptsstatus.web.tss.apple.com&amp;quot;&lt;br /&gt;
 		xmlns:soapenc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;code href=&amp;quot;#id3&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		&amp;lt;desc xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;&amp;lt;/desc&amp;gt;&lt;br /&gt;
 	&amp;lt;/multiRef&amp;gt;&lt;br /&gt;
 	&amp;lt;multiRef&lt;br /&gt;
 		id=&amp;quot;id3&amp;quot;&lt;br /&gt;
 		soapenc:root=&amp;quot;0&amp;quot;&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xsi:type=&amp;quot;xsd:int&amp;quot;&lt;br /&gt;
 		xmlns:soapenc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
 		3&lt;br /&gt;
 	&amp;lt;/multiRef&amp;gt;&lt;br /&gt;
 &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This type of SOAP request/response can be performed with a cURL request, like so (where &amp;lt;code&amp;gt;soap.xml&amp;lt;/code&amp;gt; is the location of the aforementioned SOAP XML):&lt;br /&gt;
&lt;br /&gt;
 curl -i -m 1.0 -H &amp;quot;Content-Type: text/xml;charset=utf-8&amp;quot; -A InetURL/1.0 -H &amp;quot;SOAPAction: http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&amp;quot; -H &amp;quot;Host: gs.apple.com&amp;quot; -d @soap.xml http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&lt;br /&gt;
&lt;br /&gt;
'''Note: ''' The server may occasionally return &amp;lt;code&amp;gt;java.lang.NullPointerException&amp;lt;/code&amp;gt; despite a valid response. Retrying the request will likely remedy this. ''Is this a race condition bug on the server side?''&lt;br /&gt;
&lt;br /&gt;
===PacketPort===&lt;br /&gt;
&lt;br /&gt;
====pushDataPacket====&lt;br /&gt;
&lt;br /&gt;
* '''Input Message''' (&amp;lt;code&amp;gt;pushDataPacketRequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''Output Message''' (&amp;lt;code&amp;gt;pushDataPacketResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
===tatsuReceiptsStatusPort===&lt;br /&gt;
&lt;br /&gt;
====getReceiptPacketStatus====&lt;br /&gt;
&lt;br /&gt;
Returns two unknown numbers, a [https://en.m.wikipedia.org/wiki/Reserved_IP_addresses private IP address] (likely meant to be accessed within Apple’s internal VPN), and some &amp;lt;code&amp;gt;multiRef&amp;lt;/code&amp;gt; tags (how are these supposed to be parsed?).&lt;br /&gt;
&lt;br /&gt;
* '''Input Message''' (&amp;lt;code&amp;gt;getReceiptPacketStatusRequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param0&amp;lt;/code&amp;gt;: (type=&amp;lt;code&amp;gt;ReceiptDataPacketStatusRequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
*** Elements: &amp;lt;code&amp;gt;code&amp;lt;/code&amp;gt; (Number)&lt;br /&gt;
* '''Output Message''' (&amp;lt;code&amp;gt;getReceiptPacketStatusResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param1&amp;lt;/code&amp;gt;: (type=&amp;lt;code&amp;gt;ReceiptDataPacketStatusResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
*** Elements: &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ip&amp;lt;/code&amp;gt; (String), &amp;lt;code&amp;gt;code&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;desc&amp;lt;/code&amp;gt; (String)&lt;br /&gt;
&lt;br /&gt;
====queryTASExpireTSA====&lt;br /&gt;
&lt;br /&gt;
* '''Input Message''' (&amp;lt;code&amp;gt;queryTASExpireTSARequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param2&amp;lt;/code&amp;gt;: (type=&amp;lt;code&amp;gt;ExpireTSAQueryRequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
*** Elements: &amp;lt;code&amp;gt;tsa&amp;lt;/code&amp;gt; (Number)&lt;br /&gt;
* '''Output Message''' (&amp;lt;code&amp;gt;queryTASExpireTSAResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param3&amp;lt;/code&amp;gt;: (type=&amp;lt;code&amp;gt;ExpireTSAQueryResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
====updateTSSStatus====&lt;br /&gt;
&lt;br /&gt;
* '''Input Message''' (&amp;lt;code&amp;gt;updateTSSStatusRequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param4&amp;lt;/code&amp;gt;: (type=&amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''Output Message''' (&amp;lt;code&amp;gt;updateTSSStatusResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param5&amp;lt;/code&amp;gt;: (type=&amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;)&lt;br /&gt;
*** Elements: &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; (Number)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
[https://www.soapui.org SoapUI], a test automation framework for the SOAP protocol, lists Apple among their largest users [https://www.soapui.org/downloads/download-soapui-pro-trial.html].&lt;br /&gt;
&lt;br /&gt;
===Server Details===&lt;br /&gt;
It is of moderate security concern to know that the TSS server runs [http://tomcat.apache.org/ Apache Tomcat], which is exposed, alongside version number, in the default 404 page. The SOAP implementation used is [http://axis.apache.org/axis/ Apache Axis] (Java).&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* [[TinyUmbrella]]&lt;br /&gt;
* [https://www.w3.org/TR/2000/NOTE-SOAP-20000508 SOAP specification]&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* [https://web.archive.org/web/20121128012112/http://gs.apple.com/TSS/ List of available services (archive.org)]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Tatsu_Signing_Server&amp;diff=99154</id>
		<title>Tatsu Signing Server</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Tatsu_Signing_Server&amp;diff=99154"/>
		<updated>2020-02-17T23:04:20Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Nevermind, looks like this may be possible&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''Tatsu Signing Server''' ('''TSS''') is a collection of services provided by Apple. In late 2012, the list of available services was briefly made public at [https://web.archive.org/web/20121128012112/http://gs.apple.com/TSS/ gs.apple.com]. This index page has since been removed, although at least one archived capture exists.&lt;br /&gt;
TSS is accessed chiefly for use of the [[SHSH Protocol]] to receive signed blobs for a given iOS build. This is achieved with the SHSH controller at http://gs.apple.com/TSS/controller.&lt;br /&gt;
&lt;br /&gt;
There is an Apple internal equivalent, known as SpiderCab, running at [http://tatsu-tss-internal.apple.com:80 tatsu-tss-internal.apple.com] and [http://tss-int.apple.com:80 tss-int.apple.com], which are only accessible within Apple's VPN. SpiderCab is used to sign internal/debug and test builds of iOS, including old versions that are no longer signed on production.&lt;br /&gt;
&lt;br /&gt;
Reliable communication to the TSS server requires the appropriate HTTP header, as described in [[SHSH Protocol#Communication]]. If you are communicating with a TSS service and not the SHSH controller itself, you must additionally provide a &amp;lt;code&amp;gt;SOAPAction:&amp;lt;/code&amp;gt; header containing the URL of the service you are accessing. Also note that '''not all TSS servers accept SOAP requests.''' Because http://gs.apple.com automatically resolves to one of the half-a-dozen TSS servers, some of which indiscriminately returning &amp;quot;403 Forbidden&amp;quot; to SOAP, it is recommended to communicate directly with a known-working TSS IP address.&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
&lt;br /&gt;
There are two services provided, both accessible via [https://en.wikipedia.org/wiki/SOAP SOAP] requests. They are located in http://gs.apple.com/TSS/services/ under their respective names. A sample request concerning &amp;quot;getReceiptPacketStatus&amp;quot; from the &amp;quot;tatsuReceiptsStatusPort&amp;quot; service is demonstrated below:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; POST /TSS/services/tatsuReceiptsStatusPort HTTP/1.1&lt;br /&gt;
 &amp;gt; Host: gs.apple.com&lt;br /&gt;
 &amp;gt; User-Agent: InetURL/1.0&lt;br /&gt;
 &amp;gt; Accept: */*&lt;br /&gt;
 &amp;gt; Content-Length: 588&lt;br /&gt;
 &amp;gt; Content-Type: text/xml;charset=utf-8&lt;br /&gt;
 &amp;gt; SOAPAction: http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&lt;br /&gt;
&lt;br /&gt;
SOAP XML:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;soapenv:Envelope&lt;br /&gt;
 	xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;&lt;br /&gt;
 	xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
 	xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;
 	&amp;lt;ns1:getReceiptPacketStatus&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xmlns:ns1=&amp;quot;http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&amp;quot;&amp;gt;&lt;br /&gt;
 		&amp;lt;ns1:param0&lt;br /&gt;
 			xsi:type=&amp;quot;ns2:ReceiptDataPacketStatusRequest&amp;quot;&lt;br /&gt;
 			xmlns:ns2=&amp;quot;http://receiptsstatus.web.tss.apple.com&amp;quot;&amp;gt;&lt;br /&gt;
 			&amp;lt;ns2:status&amp;gt;&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&amp;lt;/ns2:status&amp;gt;&lt;br /&gt;
 		&amp;lt;/ns1:param0&amp;gt;&lt;br /&gt;
 	&amp;lt;/ns1:getReceiptPacketStatus&amp;gt;&lt;br /&gt;
 &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;soapenv:Envelope&lt;br /&gt;
 	xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;&lt;br /&gt;
 	xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
 	xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;
 	&amp;lt;ns1:getReceiptPacketStatusResponse&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xmlns:ns1=&amp;quot;http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 		&amp;lt;param1 href=&amp;quot;#id0&amp;quot;/&amp;gt;&lt;br /&gt;
 	&amp;lt;/ns1:getReceiptPacketStatusResponse&amp;gt;&lt;br /&gt;
 	&amp;lt;multiRef&lt;br /&gt;
 		id=&amp;quot;id0&amp;quot;&lt;br /&gt;
 		soapenc:root=&amp;quot;0&amp;quot;&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xsi:type=&amp;quot;ns2:ReceiptDataPacketStatusResponse&amp;quot;&lt;br /&gt;
 		xmlns:soapenc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xmlns:ns2=&amp;quot;http://receiptsstatus.web.tss.apple.com&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 		&amp;lt;batchIdhref=&amp;quot;#id1&amp;quot;/&amp;gt;&lt;br /&gt;
 		&amp;lt;status href=&amp;quot;#id2&amp;quot;/&amp;gt;&lt;br /&gt;
 		&amp;lt;ip xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;10.108.105.161&amp;lt;/ip&amp;gt;&lt;br /&gt;
 	&amp;lt;/multiRef&amp;gt;&lt;br /&gt;
 	&amp;lt;multiRef&lt;br /&gt;
 		id=&amp;quot;id1&amp;quot;&lt;br /&gt;
 		soapenc:root=&amp;quot;0&amp;quot;&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xsi:type=&amp;quot;xsd:long&amp;quot;&lt;br /&gt;
 		xmlns:soapenc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
 		0&lt;br /&gt;
 	&amp;lt;/multiRef&amp;gt;&lt;br /&gt;
 	&amp;lt;multiRef&lt;br /&gt;
 		id=&amp;quot;id2&amp;quot;&lt;br /&gt;
 		soapenc:root=&amp;quot;0&amp;quot;&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xsi:type=&amp;quot;ns3:status&amp;quot;&lt;br /&gt;
 		xmlns:ns3=&amp;quot;http://receiptsstatus.web.tss.apple.com&amp;quot;&lt;br /&gt;
 		xmlns:soapenc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;code href=&amp;quot;#id3&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		&amp;lt;desc xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;&amp;lt;/desc&amp;gt;&lt;br /&gt;
 	&amp;lt;/multiRef&amp;gt;&lt;br /&gt;
 	&amp;lt;multiRef&lt;br /&gt;
 		id=&amp;quot;id3&amp;quot;&lt;br /&gt;
 		soapenc:root=&amp;quot;0&amp;quot;&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xsi:type=&amp;quot;xsd:int&amp;quot;&lt;br /&gt;
 		xmlns:soapenc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
 		3&lt;br /&gt;
 	&amp;lt;/multiRef&amp;gt;&lt;br /&gt;
 &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This type of SOAP request/response can be performed with a cURL request, like so (where &amp;lt;code&amp;gt;soap.xml&amp;lt;/code&amp;gt; is the location of the aforementioned SOAP XML):&lt;br /&gt;
&lt;br /&gt;
 curl -i -m 1.0 -H &amp;quot;Content-Type: text/xml;charset=utf-8&amp;quot; -A InetURL/1.0 -H &amp;quot;SOAPAction: http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&amp;quot; -H &amp;quot;Host: gs.apple.com&amp;quot; -d @soap.xml http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&lt;br /&gt;
&lt;br /&gt;
'''Note: ''' The server may occasionally return &amp;lt;code&amp;gt;java.lang.NullPointerException&amp;lt;/code&amp;gt; despite a valid response. Retrying the request will likely remedy this. ''Is this a race condition bug on the server side?''&lt;br /&gt;
&lt;br /&gt;
===PacketPort===&lt;br /&gt;
&lt;br /&gt;
====pushDataPacket====&lt;br /&gt;
&lt;br /&gt;
* '''Input Message''' (&amp;lt;code&amp;gt;pushDataPacketRequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''Output Message''' (&amp;lt;code&amp;gt;pushDataPacketResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
===tatsuReceiptsStatusPort===&lt;br /&gt;
&lt;br /&gt;
====getReceiptPacketStatus====&lt;br /&gt;
&lt;br /&gt;
Returns two unknown numbers, an IP address with an unreachable destination (not in the common 17.x.x.x Apple IP range, either), and some &amp;lt;code&amp;gt;multiRef&amp;lt;/code&amp;gt; tags (how are these supposed to be parsed?).&lt;br /&gt;
&lt;br /&gt;
* '''Input Message''' (&amp;lt;code&amp;gt;getReceiptPacketStatusRequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param0&amp;lt;/code&amp;gt;: (type=&amp;lt;code&amp;gt;ReceiptDataPacketStatusRequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
*** Elements: &amp;lt;code&amp;gt;code&amp;lt;/code&amp;gt; (Number)&lt;br /&gt;
* '''Output Message''' (&amp;lt;code&amp;gt;getReceiptPacketStatusResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param1&amp;lt;/code&amp;gt;: (type=&amp;lt;code&amp;gt;ReceiptDataPacketStatusResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
*** Elements: &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ip&amp;lt;/code&amp;gt; (String), &amp;lt;code&amp;gt;code&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;desc&amp;lt;/code&amp;gt; (String)&lt;br /&gt;
&lt;br /&gt;
====queryTASExpireTSA====&lt;br /&gt;
&lt;br /&gt;
* '''Input Message''' (&amp;lt;code&amp;gt;queryTASExpireTSARequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param2&amp;lt;/code&amp;gt;: (type=&amp;lt;code&amp;gt;ExpireTSAQueryRequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
*** Elements: &amp;lt;code&amp;gt;tsa&amp;lt;/code&amp;gt; (Number)&lt;br /&gt;
* '''Output Message''' (&amp;lt;code&amp;gt;queryTASExpireTSAResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param3&amp;lt;/code&amp;gt;: (type=&amp;lt;code&amp;gt;ExpireTSAQueryResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
====updateTSSStatus====&lt;br /&gt;
&lt;br /&gt;
* '''Input Message''' (&amp;lt;code&amp;gt;updateTSSStatusRequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param4&amp;lt;/code&amp;gt;: (type=&amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''Output Message''' (&amp;lt;code&amp;gt;updateTSSStatusResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param5&amp;lt;/code&amp;gt;: (type=&amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;)&lt;br /&gt;
*** Elements: &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; (Number)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
[https://www.soapui.org SoapUI], an automation framework for the SOAP protocol, lists Apple among their largest users [https://www.soapui.org/downloads/download-soapui-pro-trial.html].&lt;br /&gt;
&lt;br /&gt;
===Server Details===&lt;br /&gt;
It is of moderate security concern to know that the TSS server runs [http://tomcat.apache.org/ Apache Tomcat], which is exposed, alongside version number, in the default 404 page. The SOAP implementation used is [http://axis.apache.org/axis/ Apache Axis] (Java).&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* [[TinyUmbrella]]&lt;br /&gt;
* [https://www.w3.org/TR/2000/NOTE-SOAP-20000508 SOAP specification]&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* [https://web.archive.org/web/20121128012112/http://gs.apple.com/TSS/ List of available services (archive.org)]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Tatsu_Signing_Server&amp;diff=99149</id>
		<title>Tatsu Signing Server</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Tatsu_Signing_Server&amp;diff=99149"/>
		<updated>2020-02-17T22:07:20Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Don't think I can get much farther without seeing the WSDL itself.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''Tatsu Signing Server''' ('''TSS''') is a collection of services provided by Apple. In late 2012, the list of available services was briefly made public at [https://web.archive.org/web/20121128012112/http://gs.apple.com/TSS/ gs.apple.com]. This index page has since been removed, although at least one archived capture exists.&lt;br /&gt;
TSS is accessed chiefly for use of the [[SHSH Protocol]] to receive signed blobs for a given iOS build. This is achieved with the SHSH controller at http://gs.apple.com/TSS/controller.&lt;br /&gt;
&lt;br /&gt;
There is an Apple internal equivalent, known as SpiderCab, running at [http://tatsu-tss-internal.apple.com:80 tatsu-tss-internal.apple.com] and [http://tss-int.apple.com:80 tss-int.apple.com], which are only accessible within Apple's VPN. SpiderCab is used to sign internal/debug and test builds of iOS, including old versions that are no longer signed on production.&lt;br /&gt;
&lt;br /&gt;
Reliable communication to the TSS server requires the appropriate HTTP header, as described in [[SHSH Protocol#Communication]]. If you are communicating with a TSS service and not the SHSH controller itself, you must additionally provide a &amp;lt;code&amp;gt;SOAPAction:&amp;lt;/code&amp;gt; header containing the URL of the service you are accessing. Also note that '''not all TSS servers accept SOAP requests.''' Because http://gs.apple.com automatically resolves to one of the half-a-dozen TSS servers, some of which indiscriminately returning &amp;quot;403 Forbidden&amp;quot; to SOAP, it is recommended to communicate directly with a known-working TSS IP address.&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
&lt;br /&gt;
There are two services provided, both accessible via [https://en.wikipedia.org/wiki/SOAP SOAP] requests. They are located in http://gs.apple.com/TSS/services/ under their respective names. A sample request concerning &amp;quot;getReceiptPacketStatus&amp;quot; from the &amp;quot;tatsuReceiptsStatusPort&amp;quot; service is demonstrated below:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; POST /TSS/services/tatsuReceiptsStatusPort HTTP/1.1&lt;br /&gt;
 &amp;gt; Host: gs.apple.com&lt;br /&gt;
 &amp;gt; User-Agent: InetURL/1.0&lt;br /&gt;
 &amp;gt; Accept: */*&lt;br /&gt;
 &amp;gt; Content-Length: 588&lt;br /&gt;
 &amp;gt; Content-Type: text/xml;charset=utf-8&lt;br /&gt;
 &amp;gt; SOAPAction: http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&lt;br /&gt;
&lt;br /&gt;
SOAP XML:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;soapenv:Envelope&lt;br /&gt;
 	xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;&lt;br /&gt;
 	xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
 	xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;
 	&amp;lt;ns1:getReceiptPacketStatus&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xmlns:ns1=&amp;quot;http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&amp;quot;&amp;gt;&lt;br /&gt;
 		&amp;lt;ns1:param0&lt;br /&gt;
 			xsi:type=&amp;quot;ns2:ReceiptDataPacketStatusRequest&amp;quot;&lt;br /&gt;
 			xmlns:ns2=&amp;quot;http://receiptsstatus.web.tss.apple.com&amp;quot;&amp;gt;&lt;br /&gt;
 		&amp;lt;/ns1:param0&amp;gt;&lt;br /&gt;
 	&amp;lt;/ns1:getReceiptPacketStatus&amp;gt;&lt;br /&gt;
 &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;soapenv:Envelope&lt;br /&gt;
 	xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;&lt;br /&gt;
 	xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
 	xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;
 	&amp;lt;ns1:getReceiptPacketStatusResponse&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xmlns:ns1=&amp;quot;http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&amp;quot;&amp;gt;&lt;br /&gt;
 		&amp;lt;param1&lt;br /&gt;
 			xsi:type=&amp;quot;ns2:ReceiptDataPacketStatusResponse&amp;quot;&lt;br /&gt;
 			xsi:nil=&amp;quot;true&amp;quot;&lt;br /&gt;
 			xmlns:ns2=&amp;quot;http://receiptsstatus.web.tss.apple.com&amp;quot;/&amp;gt;&lt;br /&gt;
 	&amp;lt;/ns1:getReceiptPacketStatusResponse&amp;gt;&lt;br /&gt;
 &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This type of SOAP request/response can be performed with a cURL request, like so (where &amp;lt;code&amp;gt;soap.xml&amp;lt;/code&amp;gt; is the location of the aforementioned SOAP XML):&lt;br /&gt;
&lt;br /&gt;
 curl -i -m 1.0 -H &amp;quot;Content-Type: text/xml;charset=utf-8&amp;quot; -A InetURL/1.0 -H &amp;quot;SOAPAction: http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&amp;quot; -H &amp;quot;Host: gs.apple.com&amp;quot; -d @soap.xml http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&lt;br /&gt;
&lt;br /&gt;
'''Note: ''' The server may occasionally return &amp;lt;code&amp;gt;java.lang.NullPointerException&amp;lt;/code&amp;gt; despite a valid response. Retrying the request will likely remedy this. ''Is this a race condition bug on the server side?''&lt;br /&gt;
&lt;br /&gt;
===PacketPort===&lt;br /&gt;
&lt;br /&gt;
====pushDataPacket====&lt;br /&gt;
&lt;br /&gt;
* '''Input Message''' (&amp;lt;code&amp;gt;pushDataPacketRequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''Output Message''' (&amp;lt;code&amp;gt;pushDataPacketResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
===tatsuReceiptsStatusPort===&lt;br /&gt;
&lt;br /&gt;
====getReceiptPacketStatus====&lt;br /&gt;
&lt;br /&gt;
* '''Input Message''' (&amp;lt;code&amp;gt;getReceiptPacketStatusRequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param0&amp;lt;/code&amp;gt;: (type=&amp;lt;code&amp;gt;ReceiptDataPacketStatusRequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''Output Message''' (&amp;lt;code&amp;gt;getReceiptPacketStatusResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param1&amp;lt;/code&amp;gt;: (type=&amp;lt;code&amp;gt;ReceiptDataPacketStatusResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
====queryTASExpireTSA====&lt;br /&gt;
&lt;br /&gt;
* '''Input Message''' (&amp;lt;code&amp;gt;queryTASExpireTSARequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param2&amp;lt;/code&amp;gt;: (type=&amp;lt;code&amp;gt;ExpireTSAQueryRequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
* '''Output Message''' (&amp;lt;code&amp;gt;queryTASExpireTSAResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param3&amp;lt;/code&amp;gt;: (type=&amp;lt;code&amp;gt;ExpireTSAQueryResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
====updateTSSStatus====&lt;br /&gt;
&lt;br /&gt;
* '''Input Message''' (&amp;lt;code&amp;gt;updateTSSStatusRequest&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param4&amp;lt;/code&amp;gt;: (type=&amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;)&lt;br /&gt;
*** Elements: &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; (Number)&lt;br /&gt;
* '''Output Message''' (&amp;lt;code&amp;gt;updateTSSStatusResponse&amp;lt;/code&amp;gt;)&lt;br /&gt;
** &amp;lt;code&amp;gt;param5&amp;lt;/code&amp;gt;: (type=&amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;)&lt;br /&gt;
*** Elements: &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; (Number)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
[https://www.soapui.org SoapUI], an automation framework for the SOAP protocol, lists Apple among their largest users [https://www.soapui.org/downloads/download-soapui-pro-trial.html].&lt;br /&gt;
&lt;br /&gt;
===Server Details===&lt;br /&gt;
It is of moderate security concern to know that the TSS server runs [http://tomcat.apache.org/ Apache Tomcat], which is exposed, alongside version number, in the default 404 page. The SOAP implementation used is [http://axis.apache.org/axis/ Apache Axis] (Java).&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* [[TinyUmbrella]]&lt;br /&gt;
* [https://www.w3.org/TR/2000/NOTE-SOAP-20000508 SOAP specification]&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* [https://web.archive.org/web/20121128012112/http://gs.apple.com/TSS/ List of available services (archive.org)]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Tatsu_Signing_Server&amp;diff=99148</id>
		<title>Tatsu Signing Server</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Tatsu_Signing_Server&amp;diff=99148"/>
		<updated>2020-02-16T23:04:49Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: More research. Still can't access the WSDL, though :(&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''Tatsu Signing Server''' ('''TSS''') is a collection of services provided by Apple. In late 2012, the list of available services was briefly made public at [https://web.archive.org/web/20121128012112/http://gs.apple.com/TSS/ gs.apple.com]. This index page has since been removed, although at least one archived capture exists.&lt;br /&gt;
TSS is accessed chiefly for use of the [[SHSH Protocol]] to receive signed blobs for a given iOS build. This is achieved with the SHSH controller at http://gs.apple.com/TSS/controller.&lt;br /&gt;
&lt;br /&gt;
There is an Apple internal equivalent, known as SpiderCab, running at [http://tatsu-tss-internal.apple.com:80 tatsu-tss-internal.apple.com] and [http://tss-int.apple.com:80 tss-int.apple.com], which are only accessible within Apple's VPN. SpiderCab is used to sign internal/debug and test builds of iOS, including old versions that are no longer signed on production.&lt;br /&gt;
&lt;br /&gt;
Reliable communication to the TSS server requires the appropriate HTTP header, as described in [[SHSH Protocol#Communication]]. If you are communicating with a TSS service and not the SHSH controller itself, you must additionally provide a &amp;lt;code&amp;gt;SOAPAction:&amp;lt;/code&amp;gt; header containing the URL of the service you are accessing.&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
&lt;br /&gt;
There are two services provided, both accessible via [https://en.wikipedia.org/wiki/SOAP SOAP] requests. They are located in http://gs.apple.com/TSS/services/ under their respective names. A sample request concerning &amp;quot;getReceiptPacketStatus&amp;quot; from the &amp;quot;tatsuReceiptsStatusPort&amp;quot; service is demonstrated below:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; POST /TSS/services/tatsuReceiptsStatusPort HTTP/1.1&lt;br /&gt;
 &amp;gt; Host: gs.apple.com&lt;br /&gt;
 &amp;gt; User-Agent: InetURL/1.0&lt;br /&gt;
 &amp;gt; Accept: */*&lt;br /&gt;
 &amp;gt; Content-Length: 458&lt;br /&gt;
 &amp;gt; Content-Type: text/xml;charset=utf-8&lt;br /&gt;
 &amp;gt; SOAPAction: http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&lt;br /&gt;
&lt;br /&gt;
SOAP XML:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;soapenv:Envelope&lt;br /&gt;
 	xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;&lt;br /&gt;
 	xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
 	xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;
 	&amp;lt;ns1:getReceiptPacketStatus&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xmlns:ns1=&amp;quot;http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&amp;quot;&amp;gt;&lt;br /&gt;
 	&amp;lt;/ns1:getReceiptPacketStatus&amp;gt;&lt;br /&gt;
 &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;soapenv:Envelope&lt;br /&gt;
 	xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;&lt;br /&gt;
 	xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;
 	xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;
 	&amp;lt;ns1:getReceiptPacketStatusResponse&lt;br /&gt;
 		soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;
 		xmlns:ns1=&amp;quot;http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&amp;quot;&amp;gt;&lt;br /&gt;
 		&amp;lt;param1&lt;br /&gt;
 			xsi:type=&amp;quot;ns2:ReceiptDataPacketStatusResponse&amp;quot;&lt;br /&gt;
 			xsi:nil=&amp;quot;true&amp;quot;&lt;br /&gt;
 			xmlns:ns2=&amp;quot;http://receiptsstatus.web.tss.apple.com&amp;quot;/&amp;gt;&lt;br /&gt;
 	&amp;lt;/ns1:getReceiptPacketStatusResponse&amp;gt;&lt;br /&gt;
 &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This type of SOAP request/response can be performed with a cURL request, like so (where &amp;lt;code&amp;gt;soap.xml&amp;lt;/code&amp;gt; is the location of the aforementioned SOAP XML):&lt;br /&gt;
&lt;br /&gt;
 curl -i -m 1.0 -H &amp;quot;Content-Type: text/xml;charset=utf-8&amp;quot; -A InetURL/1.0 -H &amp;quot;SOAPAction: http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&amp;quot; -H &amp;quot;Host: gs.apple.com&amp;quot; -d @soap.xml http://gs.apple.com/TSS/services/tatsuReceiptsStatusPort&lt;br /&gt;
&lt;br /&gt;
===PacketPort===&lt;br /&gt;
&lt;br /&gt;
====Operations====&lt;br /&gt;
* pushDataPacket&lt;br /&gt;
** Return type: &amp;lt;code&amp;gt;pushDataPacketResponse&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===tatsuReceiptsStatusPort===&lt;br /&gt;
&lt;br /&gt;
====Operations====&lt;br /&gt;
* getReceiptPacketStatus&lt;br /&gt;
** Parameters: &amp;lt;code&amp;gt;ReceiptDataPacketStatusResponse&amp;lt;/code&amp;gt;&lt;br /&gt;
** Return type: &amp;lt;code&amp;gt;getReceiptPacketStatusResponse&amp;lt;/code&amp;gt;&lt;br /&gt;
* queryTASExpireTSA&lt;br /&gt;
** Parameters: &amp;lt;code&amp;gt;ExpireTSAQueryResponse&amp;lt;/code&amp;gt;&lt;br /&gt;
** Return type: &amp;lt;code&amp;gt;queryTASExpireTSAResponse&amp;lt;/code&amp;gt;&lt;br /&gt;
* updateTSSStatus&lt;br /&gt;
** Parameters: &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;&lt;br /&gt;
** Return type: &amp;lt;code&amp;gt;updateTSSStatusResponse&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
[https://www.soapui.org SoapUI], an automation framework for the SOAP protocol, lists Apple among their largest users [https://www.soapui.org/downloads/download-soapui-pro-trial.html].&lt;br /&gt;
&lt;br /&gt;
===Server Details===&lt;br /&gt;
It is of moderate security concern to know that the TSS server runs [http://tomcat.apache.org/ Apache Tomcat], which is exposed, alongside version number, in the default 404 page. The SOAP implementation used is [http://axis.apache.org/axis/ Apache Axis] (Java).&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* [[TinyUmbrella]]&lt;br /&gt;
* [https://www.w3.org/TR/2000/NOTE-SOAP-20000508 SOAP specification]&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* [https://web.archive.org/web/20121128012112/http://gs.apple.com/TSS/ List of available services (archive.org)]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Unc0ver&amp;diff=99147</id>
		<title>Unc0ver</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Unc0ver&amp;diff=99147"/>
		<updated>2020-02-16T21:54:13Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Updated for v4.0.1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}{{Infobox software&lt;br /&gt;
 | name                   = unc0ver&lt;br /&gt;
 | title                  = unc0ver&lt;br /&gt;
 | developer              = [https://twitter.com/pwn20wnd pwn20wnd]&amp;lt;br /&amp;gt;[https://twitter.com/sbingner sbingner]&lt;br /&gt;
 | released               = {{Start date|2018|10|13|df=yes}}&lt;br /&gt;
 | latest release version = v4.0.1&lt;br /&gt;
 | latest release date    = {{Start date and age|2020|02|16|df=yes}}&lt;br /&gt;
 | operating system       = iOS&lt;br /&gt;
 | language               = English&lt;br /&gt;
 | genre                  = Jailbreaking&lt;br /&gt;
 | website                = [https://unc0ver.dev The Official Website]&amp;lt;br /&amp;gt;[https://www.reddit.com/9nwxei/ The Reddit thread]&amp;lt;br /&amp;gt;[https://github.com/pwn20wndstuff/Undecimus The GitHub repo]&lt;br /&gt;
}}&lt;br /&gt;
'''unc0ver''' is a [[semi-untethered jailbreak]] for all devices running iOS 11.0-12.2 and 12.4 (excluding iOS 12.3, 12.3.1 and 12.3.2) and all A12-A13 devices running iOS 13.0-13.3.&lt;br /&gt;
&lt;br /&gt;
It uses the same, and a few more, exploits as [[Electra]] and [[Chimera]] whilst providing more features.&lt;br /&gt;
&lt;br /&gt;
In order to download the latest IPA, download links from the README section has been moved to the releases section of the repository (you can find this by looking under the colored bars where you can find the releases page which is in the middle, alongside branches and contributors).&lt;br /&gt;
==Release History==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Date&lt;br /&gt;
! Changes&lt;br /&gt;
|-&lt;br /&gt;
| RC1&lt;br /&gt;
| {{date|2018|10|13}}&lt;br /&gt;
|&lt;br /&gt;
* Initial release&lt;br /&gt;
|-&lt;br /&gt;
| RC2&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | {{date|2018|10|14}}&lt;br /&gt;
|&lt;br /&gt;
* Add the Dynastic repo by default&lt;br /&gt;
* Fix a bug in firmware checker&lt;br /&gt;
|-&lt;br /&gt;
| RC3&lt;br /&gt;
|&lt;br /&gt;
* Add a switch to manually enable restoring RootFS&lt;br /&gt;
* Stop erasing user preferences when restoring RootFS&lt;br /&gt;
* Fix bugs&lt;br /&gt;
|-&lt;br /&gt;
| RC4&lt;br /&gt;
|&lt;br /&gt;
* Add a label to display the uptime&lt;br /&gt;
* Add a label to display the app's version number&lt;br /&gt;
* Spawn to the PATH&lt;br /&gt;
* Stop bundling system fonts&lt;br /&gt;
|-&lt;br /&gt;
| RC5&lt;br /&gt;
|&lt;br /&gt;
* Run videosubscriptionsd in the jailed state&lt;br /&gt;
* Fix a bug in firmware and update checker&lt;br /&gt;
|-&lt;br /&gt;
| RC6&lt;br /&gt;
|&lt;br /&gt;
* Start logging again&lt;br /&gt;
* Improve update checker&lt;br /&gt;
* Fix multi_path&lt;br /&gt;
|-&lt;br /&gt;
| RC7&lt;br /&gt;
| {{date|2018|10|17}}&lt;br /&gt;
|&lt;br /&gt;
* Fix a bug in RootFS Restore and multi_path&lt;br /&gt;
|-&lt;br /&gt;
| RC8&lt;br /&gt;
| {{date|2018|10|18}}&lt;br /&gt;
|&lt;br /&gt;
* Fix a bug in RootFS Remount&lt;br /&gt;
* Add a work in progress warning for some firmwares &lt;br /&gt;
|-&lt;br /&gt;
| RC9&lt;br /&gt;
| {{date|2018|10|19}}&lt;br /&gt;
|&lt;br /&gt;
* Fix a bug in RootFS Remount&lt;br /&gt;
* Add even more detailed error messages&lt;br /&gt;
* Add a switch to increase the memory limit to improve the stability&lt;br /&gt;
* Improve the compatibility layer to work correctly with some tweaks that were specifically made for the other jailbreaks&lt;br /&gt;
|-&lt;br /&gt;
| v1&lt;br /&gt;
| {{date|2018|10|20}}&lt;br /&gt;
|&lt;br /&gt;
* Fix a bug in RootFS Restore and Remount&lt;br /&gt;
* Make the settings tab match with the rest of the UI&lt;br /&gt;
* Fix bugs&lt;br /&gt;
|-&lt;br /&gt;
| v1.0.1&lt;br /&gt;
| {{date|2018|10|21}}&lt;br /&gt;
|&lt;br /&gt;
* Disable the RootFS Restore for the unstable versions&lt;br /&gt;
|-&lt;br /&gt;
| v1.0.2&lt;br /&gt;
| {{date|2018|10|22}}&lt;br /&gt;
|&lt;br /&gt;
* Enable and fix the RootFS Restore for all versions&lt;br /&gt;
|-&lt;br /&gt;
| v1.0.3&lt;br /&gt;
| {{date|2018|10|23}}&lt;br /&gt;
|&lt;br /&gt;
* Fix the beta firmwares&lt;br /&gt;
|-&lt;br /&gt;
| v1.1&lt;br /&gt;
| {{date|2018|10|27}}&lt;br /&gt;
|&lt;br /&gt;
* Automatically select the best exploit&lt;br /&gt;
* Rewrite the versions checker&lt;br /&gt;
* Improve assertion&lt;br /&gt;
* Show the code which has failed in the error messages&lt;br /&gt;
* Improve memory management&lt;br /&gt;
* Optimize and clean up the code&lt;br /&gt;
* Fix the Storage settings&lt;br /&gt;
* Switch to a new technique to disable auto updates&lt;br /&gt;
* Remove so much useless logging&lt;br /&gt;
* Only set the boot-nonce if the switch is on without checking if it exists or not&lt;br /&gt;
* Log offsets&lt;br /&gt;
* Remove static sleeps to improve the speed&lt;br /&gt;
* Fix series of bugs and leave no known bug&lt;br /&gt;
|-&lt;br /&gt;
| v1.1.1&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{date|2018|11|03}}&lt;br /&gt;
|&lt;br /&gt;
* Add a label to show the ECID&lt;br /&gt;
* Add a button to open the source code&lt;br /&gt;
* Improve auto layout&lt;br /&gt;
* Fix various bugs within RootFS interaction, Icon cache refresher, Version checker, Exploit selector, jailbreak state detector and others&lt;br /&gt;
|-&lt;br /&gt;
| v1.1.2&lt;br /&gt;
|&lt;br /&gt;
* Improve auto layout and code&lt;br /&gt;
* Significantly improve Empty_List (VFS) exploit&lt;br /&gt;
* Slightly improve Multi_Path (MPTCP)&lt;br /&gt;
|-&lt;br /&gt;
| v1.1.3&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{date|2018|11|06}}&lt;br /&gt;
|&lt;br /&gt;
* Fix a bug in starting jailbreakd&lt;br /&gt;
|-&lt;br /&gt;
| v1.1.4&lt;br /&gt;
|&lt;br /&gt;
* Fix a bug in finding offsets&lt;br /&gt;
|-&lt;br /&gt;
| v2.0&lt;br /&gt;
| {{date|2018|11|30}}&lt;br /&gt;
|&lt;br /&gt;
* Initial Cydia Substrate support&lt;br /&gt;
* OTA upgrades for the jailbreak patches from Cydia without rebooting&lt;br /&gt;
* A new button to restart SpringBoard from the jailed state&lt;br /&gt;
* A switch to (re)install OpenSSH&lt;br /&gt;
* A switch to reinstall Cydia&lt;br /&gt;
* A switch to restart backboardd only so that you can jailbreak with broken tweaks&lt;br /&gt;
* Fix and update bootstrap&lt;br /&gt;
* Fix for the jailbreakd error&lt;br /&gt;
* Battery life fixes&lt;br /&gt;
* ELOD (Electra Loop Of Death) mitigations&lt;br /&gt;
* Improve the speed of system reload&lt;br /&gt;
* Fixes for countless bugs&lt;br /&gt;
* Enable Restart and Restart SpringBoard buttons on iOS 11.4 - 11.4.1 (Jailbreak itself doesn't work on iOS 11.4 - 11.4.1)&lt;br /&gt;
* Improve the reliability of the Restart button&lt;br /&gt;
* Fix the broken multi_path entitlement check&lt;br /&gt;
* Add the compatibility layer for the other jailbreaks back to fix the apps like iCleaner&lt;br /&gt;
* Fix the famous snapshot creation bug&lt;br /&gt;
* Add a button to manually reset the logs instead of automatically resetting them when the diagnostics button is tapped&lt;br /&gt;
* Fix the trust cache injection bug&lt;br /&gt;
|-&lt;br /&gt;
| v2.0.1&lt;br /&gt;
| {{date|2018|12|02}}&lt;br /&gt;
|&lt;br /&gt;
* The official release of v2.0 with a version number bump to make tracking versions easier&lt;br /&gt;
|-&lt;br /&gt;
| v2.0.2&lt;br /&gt;
| {{date|2018|12|06}}&lt;br /&gt;
|&lt;br /&gt;
* Fix bugs in the app&lt;br /&gt;
* Improve the the speed of the jailbreak&lt;br /&gt;
* Update bundled resources&lt;br /&gt;
* Switch to a new technique for blocking revokes&lt;br /&gt;
|-&lt;br /&gt;
| v2.1&lt;br /&gt;
| {{date|2018|12|14}}&lt;br /&gt;
|&lt;br /&gt;
* Make internal changes to make fixing issues easier&lt;br /&gt;
* Add T-Mobile support for the revoke disabler&lt;br /&gt;
* Make re-jailbreaking without restarting possible &lt;br /&gt;
* Make switching from Electra possible without restoring RootFS &lt;br /&gt;
* Update bundled resources&lt;br /&gt;
* Fix a bug in extracting bootstrap&lt;br /&gt;
* Only quit the app if the error is fatal&lt;br /&gt;
* Fix a bug in loading daemons&lt;br /&gt;
* Make the jailbreaking process faster and more stable&lt;br /&gt;
* Add more feedback to the user interface&lt;br /&gt;
* Other fixes and improvements&lt;br /&gt;
* Fix a bug in extracting bootstrap that was introduced with the previous build&lt;br /&gt;
* Fix a bug in installing Cydia that was introduced with the previous build&lt;br /&gt;
* Fix a bug in switching from Electra without restoring RootFS&lt;br /&gt;
* Update &amp;quot;No Tweaks&amp;quot; mode to support new &amp;quot;Disable Loader&amp;quot; option in Cydia Substrate&lt;br /&gt;
* Added the ability to completely disable jailbreakd when Substrate is installed via a future Cydia update.&lt;br /&gt;
* Add internal support for completely disabling jailbreakd with a Resources update&lt;br /&gt;
* Make a special alert for the exploit error to make it more clear&lt;br /&gt;
* Automatically reboot when the user taps &amp;quot;OK&amp;quot; on the exploit error&lt;br /&gt;
* Improve the version checker&lt;br /&gt;
* Fix a really weird bug in the system that would stop Cydia Substrate from loading tweaks although this bug isn't caused by the tool&lt;br /&gt;
* Make the UI support different font sizes or styles (E.g. Bold Text)&lt;br /&gt;
* Add the initial localization support (No localizations included yet)&lt;br /&gt;
* Reduce the number of stages&lt;br /&gt;
* Fix a bug in installing OpenSSH&lt;br /&gt;
* Switch to Sam Bingner's new superb trust cache injector thereby enable support for dual-hash signatures&lt;br /&gt;
* Don't update the hosts file unless it is needed&lt;br /&gt;
* Unblock Saurik's repo if it is blocked&lt;br /&gt;
* Reduce the number of stages&lt;br /&gt;
* Remove unnecessary checks&lt;br /&gt;
* Avoid applying unnecessary kernel patches unless they are needed&lt;br /&gt;
* Make sure that the system snapshot was correctly mounted before using it&lt;br /&gt;
* Unmount the system snapshot after root filesystem snapshot bypass or restore&lt;br /&gt;
* Simplify the credits view&lt;br /&gt;
* Don't do unnecessary logging&lt;br /&gt;
* Improve empty_list (vfs) exploit's success rate&lt;br /&gt;
* Fix runCommand to correctly log&lt;br /&gt;
* Don't run jailbreakd if Cydia Substrate is installed&lt;br /&gt;
* Don't set the boot nonce if it already is&lt;br /&gt;
* Make obvious internal changes&lt;br /&gt;
* Make jailbreaking obviously faster&lt;br /&gt;
* Fix a brutal kernel memory leak&lt;br /&gt;
* Fix shutdown or halt leading to a reboot&lt;br /&gt;
* Fix a logic error that would disable jailbreak patches when Substrate was installed but Load Daemons was disabled that was introduced with the previous build&lt;br /&gt;
* Fix a bug in RootFS Restore for iOS 11.0 - 11.2.6 that was introduced with the previous build&lt;br /&gt;
* Fix a bug in trust cache injection&lt;br /&gt;
* Improve update checker&lt;br /&gt;
* Make jailbreaking obviously faster&lt;br /&gt;
* Fix a bug in RootFS Restore for iOS 11.0 - 11.2.6 that would cause it to not work on some devices&lt;br /&gt;
* Fix a bug in update checker&lt;br /&gt;
* Fix a bug in the posix_spawn wrapper that would cause weird issues on some devices (Known for causing the &amp;quot;(24/40)&amp;quot; issue)&lt;br /&gt;
|-&lt;br /&gt;
| v2.1.1&lt;br /&gt;
| {{date|2019|01|05}}&lt;br /&gt;
|&lt;br /&gt;
* Make jailbreaking faster&lt;br /&gt;
* Don't error out if the hosts file doesn't exist&lt;br /&gt;
* Ignore dependencies in Cydia reinstallation&lt;br /&gt;
* Fix false positives&lt;br /&gt;
* Clean Cydia's user data in RootFS Restore&lt;br /&gt;
* Fix a snapshot name confusion bug in RootFS Restore&lt;br /&gt;
* Fix another bug in RootFS Restore&lt;br /&gt;
* Improve memory management&lt;br /&gt;
* Use less external binaries&lt;br /&gt;
* Completely clean Cydia's user data in RootFS Restore&lt;br /&gt;
|-&lt;br /&gt;
| v2.1.3&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{date|2019|01|26}}&lt;br /&gt;
|&lt;br /&gt;
* Fix a bug in patch finder that affected the shenanigans finder on specific iOS versions&lt;br /&gt;
* Switch to a better versioning system&lt;br /&gt;
* Make downgrading from v2.2.0 possible (Unreleased as of now)&lt;br /&gt;
|-&lt;br /&gt;
| v2.1.4&lt;br /&gt;
|&lt;br /&gt;
*Decrease the app's size from 63MBs to 22MBs by optimizing assets&lt;br /&gt;
|-&lt;br /&gt;
| v2.2.0&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | {{date|2019|01|30}}&lt;br /&gt;
|&lt;br /&gt;
* Install Cydia Substrate if it's not already installed&lt;br /&gt;
* Validate Cydia Substrate files and reinstall it if the validation fails&lt;br /&gt;
* Fix a bug in switching from Electra without RootFS Restore&lt;br /&gt;
* Clean up the kernel data structure patches to improve the performance and the security&lt;br /&gt;
* Remove Substitute support files in the filesystem&lt;br /&gt;
* Remove Substitute support links in the filesystem&lt;br /&gt;
* Uninstall Electra's Cydia Upgrade Helper if it is present&lt;br /&gt;
* Improve preference management&lt;br /&gt;
* Switch to a more efficient versioning system&lt;br /&gt;
* Use a new implementation of the system's libarchive to extract the bootstrap to increase the perfomance&lt;br /&gt;
* Update rsync to increase the performance and the stability of RootFS Restore&lt;br /&gt;
* Improve memory management&lt;br /&gt;
* Re-Extract bootstrap if it was extracted on a different iOS version&lt;br /&gt;
* Credit Saurik in the credits view for Cydia and Substrate&lt;br /&gt;
* Avoid writing to the disk when not necessary&lt;br /&gt;
* Add a verbose log window for the jailbreak&lt;br /&gt;
* Make the exploits slightly faster&lt;br /&gt;
* Make the jailbreak significantly faster and more performant&lt;br /&gt;
* Jailbreak itself now takes almost less than a second run (Exploit not included)&lt;br /&gt;
* Fix a bug in patch finder that would cause the sandbox escape to fail on certain devices&lt;br /&gt;
* Fix theoretical bugs&lt;br /&gt;
* Improve assertion&lt;br /&gt;
* Performance improvements&lt;br /&gt;
* Fix a bug in logging&lt;br /&gt;
* Update bootstrap&lt;br /&gt;
* Enable overwriting files in the bootstrap extractor&lt;br /&gt;
* Fix switching from Electra without restoring root filesystem&lt;br /&gt;
* Fix certain error descriptions&lt;br /&gt;
* Fix RootFS Restore on certain devices&lt;br /&gt;
* Add a switch to hide the log window&lt;br /&gt;
* Decrease the app's size from 81MBs to 25MBs by optimizing assets&lt;br /&gt;
* Add a switch to reset Cydia cache on request&lt;br /&gt;
* Rewrite Cydia installation&lt;br /&gt;
* Install a local repo&lt;br /&gt;
* Remove bootstrap&lt;br /&gt;
* Hide the local APT repo from Cydia&lt;br /&gt;
|-&lt;br /&gt;
| v2.2.1&lt;br /&gt;
|&lt;br /&gt;
* Fix a bug in installing Cydia / extracting bootstrap&lt;br /&gt;
|-&lt;br /&gt;
| v2.2.2&lt;br /&gt;
|&lt;br /&gt;
* Fully fix a bug in installing Cydia / extracting bootstrap&lt;br /&gt;
|-&lt;br /&gt;
| v2.2.3&lt;br /&gt;
| {{date|2019|01|31}}&lt;br /&gt;
|&lt;br /&gt;
* Fix a bug with extracting rsync&lt;br /&gt;
|-&lt;br /&gt;
| v3.0.0&lt;br /&gt;
| {{date|2019|04|19}}&lt;br /&gt;
| &lt;br /&gt;
* Add support for iOS 12.0-12.1.2.&lt;br /&gt;
|-&lt;br /&gt;
| v3.0.1&lt;br /&gt;
| {{date|2019|04|23}}&lt;br /&gt;
| &lt;br /&gt;
* Iterate the proc list with proper data locks in Unrestrict to fix a possible race condition in the kernel (Important stability fix)&lt;br /&gt;
* Fix a typo in the app&lt;br /&gt;
* Fix a bug in logging&lt;br /&gt;
* Add iOS 12.1.3 - 12.2 support for the restart button&lt;br /&gt;
|-&lt;br /&gt;
| v3.1&lt;br /&gt;
| {{date|2019|05|23}}&lt;br /&gt;
| &lt;br /&gt;
* Rewrite the kernel patches from scratch to improve the stability and the reliability of the jailbreak&lt;br /&gt;
* Rewrite the preference management system from scratch to optimize the jailbreak&lt;br /&gt;
* Rewrite the diagnostics system from scratch to provide more useful information&lt;br /&gt;
* Rewrite unrestrict libary from scratch to improve the stability of the system after jailbreak&lt;br /&gt;
* Add support for switching from the other iOS 12 jailbreaks without restoring the root filesystem and losing data&lt;br /&gt;
* Make Unrestrict add sandbox exceptions for mach_lookup and mach_register&lt;br /&gt;
* Fix issues with processes looking up Substrate port on iOS 12 to fix stability and performance issues&lt;br /&gt;
* Fix support for the broken versions of RocketBootstrap and hid-support tweaks&lt;br /&gt;
* Fix the iMessage audio crash&lt;br /&gt;
* Fix FaceTime calls disappearing on some devices&lt;br /&gt;
* Fix Camera crash on some devices&lt;br /&gt;
* Update the local APT repo to include the latest updates from the Elucubratus repository, including the updated uikittools with rewritten uicache and sbreload commands to make refreshing the icon cache and reloading the SpringBoard significantly faster when installing packages from Cydia&lt;br /&gt;
* Refresh the icon cache during the root filesystem restore to fix jailbreak apps staying on the home screen after restoring the root filesystem&lt;br /&gt;
* Update mobilesubstrate to version 0.9.7033 to disable loader in the securityd daemon to fix a freeze issue on iOS 12&lt;br /&gt;
* Significantly improve the reliability of the jailbreak when using the machswap or the machswap2 exploit&lt;br /&gt;
* Wait for the user to tap OK on the jailbreak completed alert before respringing the device&lt;br /&gt;
* Improve the jailbreak's self-repairability feature&lt;br /&gt;
* Add a progress HUD to display the status of the jailbreak process&lt;br /&gt;
* Optimize the code&lt;br /&gt;
* Improve assertion&lt;br /&gt;
* Add error-specific error messages&lt;br /&gt;
* Display info about the device on launch&lt;br /&gt;
* Clean up logging&lt;br /&gt;
* Reconfigure the &amp;quot;Reload System Daemons&amp;quot; and &amp;quot;Enable get-task-allow&amp;quot; preferences&lt;br /&gt;
* Make &amp;quot;Enable get-task-allow&amp;quot; a default option&lt;br /&gt;
|-&lt;br /&gt;
| v3.1.1&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{date|2019|05|24}}&lt;br /&gt;
| &lt;br /&gt;
* Fix running root filesystem restore when not in the jailbroken state on iOS 11&lt;br /&gt;
* Add an option to automatically restart the SpringBoard once the jailbreak is done instead of waiting for the user to tap the OK button (Requested by a Redditor)&lt;br /&gt;
|-&lt;br /&gt;
| v3.1.2&lt;br /&gt;
| &lt;br /&gt;
* Fix a bug in the settings user interface on smaller devices&lt;br /&gt;
* Add an option to hide the progress HUD (Requested by a Redditor)&lt;br /&gt;
|-&lt;br /&gt;
| v3.1.3&lt;br /&gt;
| {{date|2019|05|28}}&lt;br /&gt;
| &lt;br /&gt;
* Fix a bug in updating the status&lt;br /&gt;
* Fix a logic bug in remounting the root filesystem (Addresses https://www.reddit.com/r/jailbreak/comments/btxqng/help_still_cant_jb_on_ios_1211_using_the_newest/)&lt;br /&gt;
* Make machswap and machswap2 not depend on stealing kernel's credentials to fix a possible reliability issue&lt;br /&gt;
* Update kernel patches to use a safer allocation method&lt;br /&gt;
* Fix missing information in the jailbreak completed notice&lt;br /&gt;
* Fix false information in the jailbreak completed notice&lt;br /&gt;
|-&lt;br /&gt;
| v3.2&lt;br /&gt;
| {{date|2019|06|01}}&lt;br /&gt;
| &lt;br /&gt;
* Redesign the user interface (https://twitter.com/HiMyNameIsUbik/status/1134938278489182208)&lt;br /&gt;
* Add dark mode for the user interface&lt;br /&gt;
* Add info buttons for the options&lt;br /&gt;
* Increase the reliability of the jailbreak with the machswap and machswap2 exploits&lt;br /&gt;
* Update jailbreak-resources to fix an issue with the CS_DEBUGGED option&lt;br /&gt;
|-&lt;br /&gt;
| v3.2.1&lt;br /&gt;
| {{date|2019|06|02}}&lt;br /&gt;
| &lt;br /&gt;
* Fix several typos in the app&lt;br /&gt;
* Update the bundled uikittools&lt;br /&gt;
* Ignore refresh icon cache failures unless they are actually fatal&lt;br /&gt;
|-&lt;br /&gt;
| v3.3.0&lt;br /&gt;
| {{date|2019|07|14}}&lt;br /&gt;
| &lt;br /&gt;
* Add the Sock Puppet exploit for iOS 12.0-12.2 support on A8X-A11 devices&lt;br /&gt;
* Remove the empty_list and multi_path exploits&lt;br /&gt;
* Replace the kernel exploit segmented switch with picker view&lt;br /&gt;
* Add code substitution platform picker view&lt;br /&gt;
|-&lt;br /&gt;
| v3.3.1&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{date|2019|07|16}}&lt;br /&gt;
| &lt;br /&gt;
* Improve the speed of the jailbreak process by a few seconds&lt;br /&gt;
* Fix a bug in dark mode on the iPads&lt;br /&gt;
|-&lt;br /&gt;
| v3.3.2&lt;br /&gt;
| &lt;br /&gt;
* Fix a bug in finding kernel offsets on iOS 11&lt;br /&gt;
|-&lt;br /&gt;
| v3.3.3&lt;br /&gt;
| {{date|2019|07|18}}&lt;br /&gt;
| &lt;br /&gt;
* Fix the Sock Puppet kernel exploit on iOS 11&lt;br /&gt;
* Fix the Voucher Swap exploit's compatibility status with iPad Air 2 and iPad Mini 4 on iOS 11&lt;br /&gt;
|-&lt;br /&gt;
| v3.3.4&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | {{date|2019|07|19}}&lt;br /&gt;
| &lt;br /&gt;
* Add the Sock Port exploit by [https://twitter.com/jakeashacks @jakeashacks] for iOS 11.0-12.1.4 on A7-A9X devices&lt;br /&gt;
|-&lt;br /&gt;
| v3.3.5&lt;br /&gt;
| &lt;br /&gt;
* Fix a reliability bug in Sock Port&lt;br /&gt;
* Fix Sock Puppet on A8X&lt;br /&gt;
|-&lt;br /&gt;
| v3.3.6&lt;br /&gt;
| &lt;br /&gt;
* Fix Sock Port failing on 4K devices&lt;br /&gt;
|-&lt;br /&gt;
| v3.3.7&lt;br /&gt;
| &lt;br /&gt;
* Improve the reliability of the Sock Port kernel exploit on 4K devices&lt;br /&gt;
|-&lt;br /&gt;
| v3.3.8&lt;br /&gt;
| {{date|2019|07|22}}&lt;br /&gt;
| &lt;br /&gt;
* Use the rewritten SockPort 2.0 exploit with ~100% reliability, ~100 milliseconds run time and support for all devices on iOS 11.0-12.2 (12.1.3-12.2 on A12-A12X excluded)&lt;br /&gt;
* Fix the jailbreak on iOS 12.2 iPhones and iPods&lt;br /&gt;
|-&lt;br /&gt;
| v3.4.0&lt;br /&gt;
| {{date|2019|07|23}}&lt;br /&gt;
| &lt;br /&gt;
* Replace the SockPort 2.0 exploit with the SockPuppet 2.0 exploit with better reliability and stability on older devices&lt;br /&gt;
|-&lt;br /&gt;
| v3.4.1&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{date|2019|07|25}}&lt;br /&gt;
| &lt;br /&gt;
* Fix the sandbox swap error when using the exploits that are not SockPuppet&lt;br /&gt;
* Add the SockPort 1.5 exploit by [https://github.com/jakeajames @jakeajames] for A7-A9X devices (Reliability: ~95% from extensive testing)&lt;br /&gt;
* Disable the SockPuppet exploit on A7-A7X due to reliability issues&lt;br /&gt;
* Add iOS 12.3~b1 support to the jailbreak (Verified working on iPhone 5s)&lt;br /&gt;
* Fix a theoretical reliability bug with SockPuppet&lt;br /&gt;
|-&lt;br /&gt;
| v3.4.2&lt;br /&gt;
| &lt;br /&gt;
* Fix the SockPuppet kernel exploit not displaying on A8-A8X devices&lt;br /&gt;
|-&lt;br /&gt;
| v3.5.0&lt;br /&gt;
| {{date|2019|08|18}}&lt;br /&gt;
|&lt;br /&gt;
* Add iOS 12.4 support to the Sock Puppet (A8-A11) and Sock Port (A7-A7X) exploits&lt;br /&gt;
|-&lt;br /&gt;
| v3.5.1&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | {{date|2019|08|19}}&lt;br /&gt;
|&lt;br /&gt;
* Add the updated SockPuppet 3.0 exploit by @umanghere&lt;br /&gt;
* Remove the SockPort and SockPort2 exploits&lt;br /&gt;
* Update system-memory-reset fix to fix random reboots&lt;br /&gt;
* Add Apple to the credits section for development&lt;br /&gt;
* Fix error at stage 2 when jailbreaking after updating from a lower firmware while preserving the app data&lt;br /&gt;
* Fix the app crashing up on stared up on iOS 11&lt;br /&gt;
|-&lt;br /&gt;
| v3.5.2&lt;br /&gt;
|&lt;br /&gt;
* Fix the SockPuppet 3.0 exploit on iPad Mini 4 and iPad Air 2&lt;br /&gt;
|-&lt;br /&gt;
| v3.5.3&lt;br /&gt;
|&lt;br /&gt;
* Add WIP partial support for A12-A12X devices on iOS 12.1.3, 12.1.4, 12.2 and 12.4 with support for setting HSP#4 as TFP0, setting kernel_task info, exporting kernel_task port, dumping APTicket, logging KASLR shift and ECID and disabling auto updates&lt;br /&gt;
|-&lt;br /&gt;
| v3.5.4&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{date|2019|08|22}}&lt;br /&gt;
|&lt;br /&gt;
* Add full-fledged SSH support with root-shell for A12-A12X devices on iOS 12.1.3-12.4&lt;br /&gt;
* Add support for arbitrary unsigned code execution on A12-A12 devices on iOS 12.1.3-12.4&lt;br /&gt;
(Note: Object files will have to be signed with a CMS blob using the codesign utility)&lt;br /&gt;
* Add support for running expired or revoked apps on A12-A12X devices on iOS 12.1.3-12.4&lt;br /&gt;
* Fix instant or random reboots after jailbreaking with the SockPuppet3.0 exploit on A7-A12X devices on iOS 11.0-12.4&lt;br /&gt;
Note: Code injection is not supported on A12-A12X devices as of yet&lt;br /&gt;
|-&lt;br /&gt;
| v3.5.5&lt;br /&gt;
|&lt;br /&gt;
* Fixes issues with the jailbreak introduced with the last update&lt;br /&gt;
* Fixes iOS 11 support&lt;br /&gt;
|-&lt;br /&gt;
| v3.5.6&lt;br /&gt;
| {{date|2019|08|24}}&lt;br /&gt;
|&lt;br /&gt;
* Add support for remounting the RootFS as read-write on A12-A12X devices running iOS 12.1.3-12.4&lt;br /&gt;
* Adds support for restoring the RootFS on A12-A12X devices running iOS 12.1.3-12.4&lt;br /&gt;
|-&lt;br /&gt;
| v3.6.0&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{date|2019|09|08}}&lt;br /&gt;
|&lt;br /&gt;
* Completely redesign and rewrite all jailbreak patches from scratch.&lt;br /&gt;
* Make the jailbreak patches static and not dynamic, Meaning that the system stability will be completely stock after the jailbreak.&lt;br /&gt;
* Fix the app crashing on launch when signed with provisioning profiles with non-ASCII characters.&lt;br /&gt;
* Internally prepare jailbreak patches for full-fledged A12-A12X support.&lt;br /&gt;
* Make the jailbreak significantly and noticeably more reliable and faster to run.&lt;br /&gt;
* Add the SockPort 3.0 exploit for improved reliability on iOS 12.4 and devices with low RAM.&lt;br /&gt;
* Fix SSH support for arm64e devices running iOS 12.0-12.1.2.&lt;br /&gt;
* Make it possible to jailbreak with corrupted SystemVersion.plist on iOS 12.4.&lt;br /&gt;
* Make the jailbreak perform proper clean up to preserve system stability in case of a failure.&lt;br /&gt;
* Fix the jbctl command-line utility.&lt;br /&gt;
* Switch to a new technique for setting the system boot nonce generator that works on all arm64e devices running iOS12.0-12.4, (Thanks to [https://github.com/0x7ff @0x7ff] for the idea).&lt;br /&gt;
* Fix a bug with the initial Cydia installation getting stuck sometimes.&lt;br /&gt;
* Significantly speed up the initial Cydia installation process.&lt;br /&gt;
* Internally prepare upcoming stable substitute support.&lt;br /&gt;
* Internally prepare Cydia and its resources for full-fledged arm64e support.&lt;br /&gt;
|-&lt;br /&gt;
| v3.6.1&lt;br /&gt;
|&lt;br /&gt;
* Improves auto-exploit selection.&lt;br /&gt;
|-&lt;br /&gt;
| v3.6.2&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{date|2019|09|09}}&lt;br /&gt;
|&lt;br /&gt;
* Fix an issue with the kernel virtual memory access APIs on A7-A8 devices that rendered the jailbreak useless by causing it to fail to copy big kernel data (Error known as: &amp;quot;Unable to copy container profile in kernel memory.&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| v3.6.3&lt;br /&gt;
|&lt;br /&gt;
* Fix an issue with finding kernel offsets on A8&lt;br /&gt;
|-&lt;br /&gt;
| v3.7.0~b2&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{date|2019|10|14}}&lt;br /&gt;
|&lt;br /&gt;
* Full-fledged A12-A12X support with Cydia and system-wide tweak injection&lt;br /&gt;
* Fix Camera on A12-A12X devices&lt;br /&gt;
* Fix GPS on A12-A12X devices&lt;br /&gt;
* Fix App Store purchases on A12-A12X devices&lt;br /&gt;
* Fix Face ID on A12-A12X devices&lt;br /&gt;
* Fix performance issues on A12-A12X devices&lt;br /&gt;
* Fix stability issues on A12-A12X devices&lt;br /&gt;
* Fix reload system daemons issues on A12-A12X devices&lt;br /&gt;
* Fix general stability issues with system services on A12-A12X devices&lt;br /&gt;
* Fix system shutdown on A12-A12X devices&lt;br /&gt;
* Fix system restart on A12-A12X devices&lt;br /&gt;
* Fix USB on A12-A12X devices&lt;br /&gt;
* Fix Xcode debugging on A12-A12X devices&lt;br /&gt;
* Fix a bug in libsubstitute that broke the TetherMe tweak A12-A12X devices&lt;br /&gt;
* Enable full-fledged AMFI/CoreTrust bypass on A12-A12X devices&lt;br /&gt;
* Fix memory management issues on A12-A12X devices&lt;br /&gt;
* Fix tweak injection to MobileSafari on A12-A12X devices&lt;br /&gt;
* Make reload system daemons reload services with launchctl instead of ldrestart&lt;br /&gt;
* Reload system daemons before restarting SpringBoard&lt;br /&gt;
|-&lt;br /&gt;
| v3.7.0~b3&lt;br /&gt;
|&lt;br /&gt;
* Correct a problem with reload system daemons when using Substrate (non-A12 devices)&lt;br /&gt;
|-&lt;br /&gt;
| v3.7.0~b4&lt;br /&gt;
| {{date|2019|12|02}}&lt;br /&gt;
|&lt;br /&gt;
* Update bundled Cydia to prompt for network access on China devices&lt;br /&gt;
* Rename the bundled mobilesubstrate to match other jailbreaks&lt;br /&gt;
* Update the bundled substitute to 0.1.0&lt;br /&gt;
|-&lt;br /&gt;
| v3.8.0~b1&lt;br /&gt;
| {{date|2019|12|09}}&lt;br /&gt;
|&lt;br /&gt;
* Add iOS 12.4.1 support for A12 iPhones (iPads not supported at this time)&lt;br /&gt;
|-&lt;br /&gt;
| v4.0.0&lt;br /&gt;
| {{date|2020|02|15}}&lt;br /&gt;
|&lt;br /&gt;
* Full-fledged support for A12-A13 devices on iOS 13.0-13.3 with Cydia and system-wide tweak injection&lt;br /&gt;
|-&lt;br /&gt;
| v4.0.1&lt;br /&gt;
| {{date|2020|02|16}}&lt;br /&gt;
|&lt;br /&gt;
* Fix App Store for A12-A13&lt;br /&gt;
* Fix push notifications for A12-A13&lt;br /&gt;
* Improve reliability for A12-A13 devices on iOS 13.0-13.3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Jailbreaks]]&lt;br /&gt;
[[Category:Jailbreaking]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Tatsu_Signing_Server&amp;diff=99146</id>
		<title>Tatsu Signing Server</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Tatsu_Signing_Server&amp;diff=99146"/>
		<updated>2020-02-16T00:20:49Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: TSS research&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''Tatsu Signing Server''' ('''TSS''') is a collection of services provided by Apple. In late 2012, the list of available services was briefly made public at [https://web.archive.org/web/20121128012112/http://gs.apple.com/TSS/ gs.apple.com]. This index page has since been removed, although at least one archived capture of this page exists.&lt;br /&gt;
TSS is accessed chiefly for use of the [[SHSH Protocol]] to receive signed blobs for a given iOS build. This is accessed with the SHSH controller at http://gs.apple.com/TSS/controller.&lt;br /&gt;
&lt;br /&gt;
There is an Apple internal equivalent, known as Spidercab, running at [http://tatsu-tss-internal.apple.com:80 tatsu-tss-internal.apple.com] and [http://tss-int.apple.com:80 tss-int.apple.com], which are only accessible within Apple's VPN. SpiderCab is used to sign internal/debug and test builds of iOS, including old versions that are no longer signed on production.&lt;br /&gt;
&lt;br /&gt;
Reliable communication to the TSS server requires the appropriate HTTP header, as described in [[SHSH Protocol#Communication]]. If you are communicating with a TSS service and not the SHSH controller itself, you must additionally provide a &amp;lt;code&amp;gt;SOAPAction:&amp;lt;/code&amp;gt; header.&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
&lt;br /&gt;
There are two services provided, both accessible via [https://en.wikipedia.org/wiki/SOAP SOAP] requests. They are located in http://gs.apple.com/TSS/services/ under their respective names.&lt;br /&gt;
&lt;br /&gt;
===PacketPort===&lt;br /&gt;
&lt;br /&gt;
* pushDataPacket&lt;br /&gt;
&lt;br /&gt;
===tatsuReceiptsStatusPort===&lt;br /&gt;
&lt;br /&gt;
* getReceiptPacketStatus&lt;br /&gt;
* queryTASExpireTSA&lt;br /&gt;
* updateTSSStatus&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
[https://www.soapui.org SoapUI], an automation framework for the SOAP protocol, lists Apple among their largest users [https://www.soapui.org/downloads/download-soapui-pro-trial.html].&lt;br /&gt;
&lt;br /&gt;
===Server Details===&lt;br /&gt;
It is of moderate security concern to know that the TSS server runs [http://tomcat.apache.org/ Apache Tomcat], exposed, alongside version number, in the default 404 page. The SOAP implementation used is [http://axis.apache.org/axis/ Apache Axis] (Java).&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* [[TinyUmbrella]]&lt;br /&gt;
* [https://www.w3.org/TR/2000/NOTE-SOAP-20000508 SOAP specification]&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* [https://web.archive.org/web/20121128012112/http://gs.apple.com/TSS/ List of available services (archive.org)]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Tatsu_Signing_Server&amp;diff=99145</id>
		<title>Tatsu Signing Server</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Tatsu_Signing_Server&amp;diff=99145"/>
		<updated>2020-02-15T22:32:44Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''Tatsu Signing Server''' ('''TSS''') is a collection of services provided by Apple. In late 2012, the list of available services was briefly made public at [https://web.archive.org/web/20121128012112/http://gs.apple.com/TSS/ gs.apple.com]. This index page has since been removed, although at least one archived capture of this page exists.&lt;br /&gt;
There is an Apple internal equivalent, known as Spidercab, running at [http://tatsu-tss-internal.apple.com:80 tatsu-tss-internal.apple.com] and [http://tss-int.apple.com:80 tss-int.apple.com], which are only accessible within Apple's VPN. SpiderCab is used to sign internal/debug and test builds of iOS, including old versions that are no longer signed on production.&lt;br /&gt;
&lt;br /&gt;
Reliable communication to the TSS server requires the appropriate HTTP header, as described in [[SHSH Protocol#Communication]].&lt;br /&gt;
&lt;br /&gt;
== Server Details ==&lt;br /&gt;
It is of moderate security concern to know that the TSS server runs [http://tomcat.apache.org/ Apache Tomcat], the version of which being exposed in the default 404 page.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* [[TinyUmbrella]]&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* [https://web.archive.org/web/20121128012112/http://gs.apple.com/TSS/ List of available services (archive.org)]&lt;br /&gt;
&lt;br /&gt;
{{stub|Apple Inc.}}&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=SHSH_Protocol&amp;diff=99144</id>
		<title>SHSH Protocol</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=SHSH_Protocol&amp;diff=99144"/>
		<updated>2020-02-15T22:29:59Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Organization; described HTTP header in more detail&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a description of the protocol that is used when [[iTunes]] requests the [[SHSH]] certificate from Apple. For details about what this is used for, please see the main article [[SHSH]].&lt;br /&gt;
&lt;br /&gt;
This is a simple [[wikipedia:Hypertext Transfer Protocol|HTTP]] ([[wikipedia:POST (HTTP)|POST]]) request and answer. You can retry this via a [[wikipedia:Telnet|Telnet]] session or similar. The destination host is [http://gs.apple.com/TSS/controller?action=2 gs.apple.com] and runs on the common  [[wikipedia:TCP and UDP port|port]] 80. The data is plaintext and not encoded in any way. For details about the [[wikipedia:Hypertext Transfer Protocol|HTTP]] protocol itself, please see [http://www.w3.org/Protocols/HTTP/1.1/rfc2616.pdf RFC2616].&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
&lt;br /&gt;
Reliable communication to the TSS server is best achieved with the following HTTP header configuration:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Host: gs.apple.com&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;User-Agent: InetURL/1.0&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Content-Type: text/xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following [https://curl.haxx.se/ curl] command demonstrates a command-line request to the server:&lt;br /&gt;
&lt;br /&gt;
 curl -i -s -m 1.0 -A 'InetURL/1.0' -X POST -H 'Content-Type: text/xml' -H 'Host: gs.apple.com' -d @/location/to/my/request.xml gs.apple.com/TSS/controller?action=2&lt;br /&gt;
&lt;br /&gt;
===Action types===&lt;br /&gt;
Attached to the http://gs.apple.com/TSS/controller URL is commonly &amp;lt;code&amp;gt;?action=2&amp;lt;/code&amp;gt;, which can be discovered when performing an iTunes restore and observing packets sent with a packet sniffer such as [https://www.wireshark.org Wireshark]. However, values other than 2 may produce different server responses, of which all known value/response pairs have been listed below.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=0&amp;lt;/code&amp;gt;: Performs a &amp;quot;Tatsu Signing Server HealthCheck&amp;quot;, returning an HTML body of &amp;quot;Server not ready&amp;quot;. This may be a general ping protocol for ensuring the TSS service is online.&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=2&amp;lt;/code&amp;gt;: Common SHSH protocol. See [[#Status responses]] for all known server responses.&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=3&amp;lt;/code&amp;gt;: Functionally the same as &amp;lt;code&amp;gt;?action=2&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=5&amp;lt;/code&amp;gt;: Generates &amp;lt;code&amp;gt;respCode&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;respMsg&amp;lt;/code&amp;gt;. This response syntax differs slightly from the SHSH protocol. The name &amp;quot;cpsn&amp;quot; is referenced.&lt;br /&gt;
&lt;br /&gt;
All unlisted action types appear to respond without HTML content, only status.&lt;br /&gt;
&lt;br /&gt;
===Sending data (request)===&lt;br /&gt;
The request is actually a single XML-encoded property list. It contains a dictionary which describes the target iOS version, restore behavior, etc. Some of the required information can be taken from the BuildManifest.plist. BuildManifest contains some info about the firmware version and &amp;quot;BuildIdentities&amp;quot; dictionary. Inside it you can find two (or more?) build identities. Each of them contains the information which depends on every type of restore (&amp;quot;Erase&amp;quot; or &amp;quot;Update&amp;quot;). Some information is device-dependent (ECID, nonce) and is received from the device.&lt;br /&gt;
&lt;br /&gt;
Request property list should have these properties:&lt;br /&gt;
&lt;br /&gt;
* '''@APTicket:''' Optional boolean value. If true, the server adds an [[APTicket]] to the request.&lt;br /&gt;
* '''@BBTicket:''' Optional boolean value. The same for the [[BBTicket]].&lt;br /&gt;
* '''@UDID:''' Optional string value. Just request UDID (ex. D9C1F33D-62E0-4D25-8068-F5F46FE80057).&lt;br /&gt;
* '''@HostPlatformInfo:''' Optional string value. &amp;quot;mac&amp;quot; for OS X client, &amp;quot;windows&amp;quot; for Windows client (can be everything you want).&lt;br /&gt;
* '''@Locality:''' Optional string value. Language used for the error response (ex. &amp;quot;en_US&amp;quot;).&lt;br /&gt;
* '''@VersionInfo:''' Optional string value. The version of 'libauthinstall' used (ex. &amp;quot;libauthinstall-391.0.0.1.3&amp;quot;). You can pass any string here.&lt;br /&gt;
* '''ApBoardID:''' Integer value. [[BORD |Board ID]] of the target device. You can take this value from build manifest.&lt;br /&gt;
* '''ApChipID:''' Integer value. [[CHIP|Chip ID]] of the target device. You can take this value from build manifest.&lt;br /&gt;
* '''ApECID:''' Integer value. [[ECID]] of the target device.&lt;br /&gt;
* '''ApNonce:''' Data value. The [[nonce]] generated by your device.&lt;br /&gt;
* '''ApProductionMode:''' Boolean value. Always true (unless your SOC is PROD 0 - Apple only).&lt;br /&gt;
* '''ApSecurityDomain:''' Integer value. The use is unknown. You can take this value from build manifest.&lt;br /&gt;
* '''UniqueBuildID:''' Optional data value. This is a unique identifier for every build (different even for &amp;quot;Erase&amp;quot; and &amp;quot;Update&amp;quot; types of restore).  You can take this value from build manifest.&lt;br /&gt;
&lt;br /&gt;
The SHSH request also contains information about files from the [[IPSW]] (or restore bundle for [[PurpleRestore]]). They can be obtained from the 'build identity' you've chosen in the previous step. Each 'build identity' contains a &amp;quot;Manifest&amp;quot; dictionary. It's entries look like&lt;br /&gt;
 &amp;lt;key&amp;gt;BatteryCharging0&amp;lt;/key&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;Digest&amp;lt;/key&amp;gt;&lt;br /&gt;
  	&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt;...&amp;lt;/data&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;Info&amp;lt;/key&amp;gt;&lt;br /&gt;
 	&amp;lt;dict&amp;gt;...&amp;lt;/dict&amp;gt;&lt;br /&gt;
  	&amp;lt;key&amp;gt;Trusted&amp;lt;key/&amp;gt;&lt;br /&gt;
 	&amp;lt;true/&amp;gt;&lt;br /&gt;
 &amp;lt;dict/&amp;gt;&lt;br /&gt;
They are just copied to the SHSH request, but the &amp;quot;Info&amp;quot; dictionary is removed.&lt;br /&gt;
Example of a SHSH request (... values are identical, *** values are different per device):&lt;br /&gt;
 &amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt; &lt;br /&gt;
 &amp;lt;dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@[[APTicket]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@[[BBTicket]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@HostPlatformInfo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;mac&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@Locality&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;en_US&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@UUID&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;D9C1F33D-62E0-4D25-8068-F5F46FE80057&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@VersionInfo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;libauthinstall-391.0.0.1.3&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[BORD |ApBoardID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;10&amp;lt;/integer&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;[[CHIP |ApChipID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;35152&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[ECID |ApECID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;***&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[Nonce |ApNonce]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt;***&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;ApProductionMode&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;ApSecurityDomain&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;UniqueBuildID&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;data&amp;gt; fqzW0B++Zdrs+PRwohkwU6prjbk=&amp;lt;/data&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;AppleLogo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;Digest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; uH5QQax5YmIrgcuEHwOhAB//yc8=&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		&amp;lt;key&amp;gt;Trusted&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;/dict&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryCharging0&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... See AppleLogo dictionary.&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryCharging1&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryFull&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... &lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryLow0&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryLow1&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryPlugin&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;DeviceTree&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;KernelCache&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;LLB&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;PartialDigest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; QAAAAHhRAgC22ZPWJB9J1Nh3H+0XeyRTU72ObA==&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RecoveryMode&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreDeviceTree&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreKernelCache&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreLogo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... &lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreRamDisk&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBEC]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBSS]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;PartialDigest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; QAAAAHhBAQCRc2PuoresMjW7zNLePMPmX7zaHg==&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBoot]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 &amp;lt;/dict&amp;gt; &lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Receiving data (answer)===&lt;br /&gt;
The response is a simple HTTP POST response, containing 3 values: STATUS, MESSAGE (a description string) and REQUEST_STRING (only if the request was successful). STATUS contains numeric status, MESSAGE contains an error message on error and &amp;quot;SUCCESS&amp;quot; string on success and REQUEST_STRING contains response property list encoded as XML.&lt;br /&gt;
&lt;br /&gt;
===Status responses===&lt;br /&gt;
*'''STATUS=0&amp;amp;MESSAGE=SUCCESS'''&lt;br /&gt;
** The request was sent successfully, and a response was returned.'''&lt;br /&gt;
*'''STATUS=8&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A key contained an unknown name.&lt;br /&gt;
*'''STATUS=83&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A key was assigned an invalid value type.&lt;br /&gt;
*'''STATUS=92&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The request contained more than 65536 bytes.&lt;br /&gt;
*'''STATUS=93&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The request contained less than 10 bytes.&lt;br /&gt;
*'''STATUS=94&amp;amp;MESSAGE=This device isn't eligible for the requested build.'''&lt;br /&gt;
** The specified build is either unsigned or nonexistent.&lt;br /&gt;
*'''STATUS=98&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The XML/PList identification tag is missing or the start of the tag is malformed.&lt;br /&gt;
*'''STATUS=100&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A general XML error was found: the XML/PList version is nonexistent or not &amp;quot;1.0&amp;quot;, the end of the XML/PList identification tag is malformed, an unknown or empty tag was found, the root &amp;lt;code&amp;gt;&amp;lt;plist&amp;gt;&amp;lt;/code&amp;gt; tag is missing, no keys were found, a value tag contained an invalid type, an unescaped ampersand character was found, two consecutive dash characters were found in a comment, or a tag was found without its counterpart.&lt;br /&gt;
*'''STATUS=103&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** Multiple '@' characters were found at the beginning of a key name.&lt;br /&gt;
*'''STATUS=128&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
*'''STATUS=511&amp;amp;MESSAGE=No data in the request'''&lt;br /&gt;
*'''STATUS=551&amp;amp;MESSAGE=Error occured while importing config packet with cpsn: '''&lt;br /&gt;
*'''STATUS=5000&amp;amp;MESSAGE=Invalid Option!'''&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* Interestingly, if all you're interested in is the ServerVersion (and a SUCCESS response), sending any one valid Ap-prefixed key will do, like so:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;plist&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;ApSecurityDomain&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In regards to fuzzing and malformed data, the server (as of 2.1.0, at least) seems to have no bounds checking for the ApNonce, or even checking to see if the ApNonce exists. Because the APTicket changes even when specifying an invalid-sized nonce, it is assumed nonces too short are padded while nonces too large are ignored past the 16th character.&lt;br /&gt;
&lt;br /&gt;
* Most textual characters between tags are ignored. For example, inserting non-bracket text (excluding XML special characters, such as '&amp;amp;') after a &amp;lt;code&amp;gt;&amp;lt;dict&amp;gt;&amp;lt;/code&amp;gt; and before the following &amp;lt;code&amp;gt;&amp;lt;key&amp;gt;&amp;lt;/code&amp;gt; will have no effect.&lt;br /&gt;
&lt;br /&gt;
* A version string in the XML/Plist identification tag is '''required''', or a &amp;lt;code&amp;gt;STATUS=100&amp;lt;/code&amp;gt; internal error message will result. Any encoding string provided is ignored and defaulted to (presumably) &amp;quot;UTF-8&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* The DOCTYPE tag is completely ignored. As such, specifying any non-PList DTD has no effect.&lt;br /&gt;
&lt;br /&gt;
===Other parameters / open questions===&lt;br /&gt;
Some parameters could have other values. Not all details are known.&lt;br /&gt;
*ApSecurityDomain: Meaning? (Related to [[SDOM]] tag)&lt;br /&gt;
*Trusted: What is this for?&lt;br /&gt;
*Full description of the above values for UniqueBuildID, Digest, PartialDigest and BuildString.&lt;br /&gt;
&lt;br /&gt;
==PartialDigest==&lt;br /&gt;
The PartialDigest is structured like so:&lt;br /&gt;
&lt;br /&gt;
 typedef struct PartialDigest {&lt;br /&gt;
     uint32_t transformSize;     // Always 0x40.&lt;br /&gt;
     uint32_t img3DataSize;      // data size of the img3.&lt;br /&gt;
     uint8_t hash[SHA1HashSize];  // Result of SHA1ResultPartial from the stripped img3.&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
The img3 is first stripped of it's code signature (if present) and then passed through SHA1Update. SHA1ResultPartial is then performed. It is purposely not the final resulting SHA1. The reason for this being, when TSS processes the PartialDigest, it performs one more SHA1Update on the hash to include the [[ECID]] before doing SHA1Final and creating the SHSH blob.&lt;br /&gt;
&lt;br /&gt;
Code for SHA1ResultPartial:&lt;br /&gt;
 int SHA1ResultPartial(SHA1Context* ctx, unsigned char* buf) {&lt;br /&gt;
 	// Do we have valid buffer and context pointers?&lt;br /&gt;
 	if(ctx &amp;amp;&amp;amp; buf) {&lt;br /&gt;
 		// Is the Context in good shape?&lt;br /&gt;
 		if(!ctx-&amp;gt;Corrupted &amp;amp;&amp;amp; !ctx-&amp;gt;Computed &amp;amp;&amp;amp; !ctx-&amp;gt;Message_Block_Index) {&lt;br /&gt;
 			for(int i = 0; i &amp;lt; SHA1HashSize; i++) {&lt;br /&gt;
 				buf[i] = ctx-&amp;gt;Intermediate_Hash[i &amp;gt;&amp;gt; 2] &amp;gt;&amp;gt; 8 * (3 - (i &amp;amp; 0x3));&lt;br /&gt;
 			}&lt;br /&gt;
 			return 0;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	return 1;&lt;br /&gt;
 }&lt;br /&gt;
Code for tss_strip_img3_signature:&lt;br /&gt;
 int tss_strip_img3_signature(img3Header* img3, int* len) {&lt;br /&gt;
 	// Do we have a non-null ptr?&lt;br /&gt;
 	if(!img3) {&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Does the buffer start with the img3 magic?&lt;br /&gt;
 	if(img3-&amp;gt;magic != IMG3_MAGIC) {&lt;br /&gt;
 		printf(&amp;quot;tss_strip_img3_signature: bad magic 0x%08x expecting 0x%08x\n&amp;quot;, img3-&amp;gt;magic, IMG3_MAGIC);&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Sanity checks&lt;br /&gt;
 	if(img3-&amp;gt;shshOffset &amp;gt; img3-&amp;gt;dataSize) {&lt;br /&gt;
 		printf(&amp;quot;tss_strip_img3_signature: signed length %u too large for buffer length %u\n&amp;quot;, img3-&amp;gt;shshOffset, img3-&amp;gt;dataSize);&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Trim the image by adjusting the header.&lt;br /&gt;
 	if(img3-&amp;gt;shshOffset) {&lt;br /&gt;
 		*len += img3-&amp;gt;shshOffset - img3-&amp;gt;dataSize;&lt;br /&gt;
 		img3-&amp;gt;dataSize = img3-&amp;gt;shshOffset;&lt;br /&gt;
 		img3-&amp;gt;fullSize = *len;&lt;br /&gt;
 	}&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Digest==&lt;br /&gt;
Digest is the SHA1 of the stripped img3. They are used instead of PartialDigests for the APTicket since the ticket is already personalized for the ECID and all other tags.&lt;br /&gt;
&lt;br /&gt;
[[Category:Firmware Tags]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=SHSH_Protocol&amp;diff=99139</id>
		<title>SHSH Protocol</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=SHSH_Protocol&amp;diff=99139"/>
		<updated>2020-02-15T07:07:46Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Added &amp;quot;Action types&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a description of the protocol that is used when [[iTunes]] requests the [[SHSH]] certificate from Apple. For details about what this is used for, please see the main article [[SHSH]].&lt;br /&gt;
&lt;br /&gt;
This is a simple [[wikipedia:Hypertext Transfer Protocol|HTTP]] ([[wikipedia:POST (HTTP)|POST]]) request and answer. You can retry this via a [[wikipedia:Telnet|Telnet]] session or similar. The destination host is [http://gs.apple.com/TSS/controller?action=2 gs.apple.com] and runs on the common  [[wikipedia:TCP and UDP port|port]] 80. The data is plaintext and not encoded in any way. For details about the [[wikipedia:Hypertext Transfer Protocol|HTTP]] protocol itself, please see [http://www.w3.org/Protocols/HTTP/1.1/rfc2616.pdf RFC2616].&lt;br /&gt;
&lt;br /&gt;
===Action types===&lt;br /&gt;
Attached to the http://gs.apple.com/TSS/controller URL is commonly &amp;lt;code&amp;gt;?action=2&amp;lt;/code&amp;gt;, which can be discovered when performing an iTunes restore and observing packets sent with a packet sniffer such as [https://www.wireshark.org Wireshark]. However, values other than 2 may produce different server responses, of which all known value/response pairs have been listed below.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=0&amp;lt;/code&amp;gt;: Performs a &amp;quot;Tatsu Signing Server HealthCheck&amp;quot;, returning an HTML body of &amp;quot;Server not ready&amp;quot;. This may be a general ping protocol for ensuring the TSS service is online.&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=2&amp;lt;/code&amp;gt;: Common SHSH protocol. See [[#Status responses]] for all known server responses.&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=3&amp;lt;/code&amp;gt;: Functionally the same as &amp;lt;code&amp;gt;?action=2&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;?action=5&amp;lt;/code&amp;gt;: Generates &amp;lt;code&amp;gt;respCode&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;respMsg&amp;lt;/code&amp;gt;. This response syntax differs slightly from the SHSH protocol. The name &amp;quot;cspn&amp;quot; is referenced.&lt;br /&gt;
&lt;br /&gt;
All unlisted action types appear to respond without HTML content, only status.&lt;br /&gt;
&lt;br /&gt;
===Sending data (request)===&lt;br /&gt;
The request is actually a single XML-encoded property list. It contains a dictionary which describes the target iOS version, restore behavior, etc. Some of the required information can be taken from the BuildManifest.plist. BuildManifest contains some info about the firmware version and &amp;quot;BuildIdentities&amp;quot; dictionary. Inside it you can find two (or more?) build identities. Each of them contains the information which depends on every type of restore (&amp;quot;Erase&amp;quot; or &amp;quot;Update&amp;quot;). Some information is device-dependent (ECID, nonce) and is received from the device.&lt;br /&gt;
&lt;br /&gt;
Request property list should have these properties:&lt;br /&gt;
&lt;br /&gt;
* '''@APTicket:''' Optional boolean value. If true, the server adds an [[APTicket]] to the request.&lt;br /&gt;
* '''@BBTicket:''' Optional boolean value. The same for the [[BBTicket]].&lt;br /&gt;
* '''@UDID:''' Optional string value. Just request UDID (ex. D9C1F33D-62E0-4D25-8068-F5F46FE80057).&lt;br /&gt;
* '''@HostPlatformInfo:''' Optional string value. &amp;quot;mac&amp;quot; for OS X client, &amp;quot;windows&amp;quot; for Windows client (can be everything you want).&lt;br /&gt;
* '''@Locality:''' Optional string value. Language used for the error response (ex. &amp;quot;en_US&amp;quot;).&lt;br /&gt;
* '''@VersionInfo:''' Optional string value. The version of 'libauthinstall' used (ex. &amp;quot;libauthinstall-391.0.0.1.3&amp;quot;). You can pass any string here.&lt;br /&gt;
* '''ApBoardID:''' Integer value. [[BORD |Board ID]] of the target device. You can take this value from build manifest.&lt;br /&gt;
* '''ApChipID:''' Integer value. [[CHIP|Chip ID]] of the target device. You can take this value from build manifest.&lt;br /&gt;
* '''ApECID:''' Integer value. [[ECID]] of the target device.&lt;br /&gt;
* '''ApNonce:''' Data value. The [[nonce]] generated by your device.&lt;br /&gt;
* '''ApProductionMode:''' Boolean value. Always true (unless your SOC is PROD 0 - Apple only).&lt;br /&gt;
* '''ApSecurityDomain:''' Integer value. The use is unknown. You can take this value from build manifest.&lt;br /&gt;
* '''UniqueBuildID:''' Optional data value. This is a unique identifier for every build (different even for &amp;quot;Erase&amp;quot; and &amp;quot;Update&amp;quot; types of restore).  You can take this value from build manifest.&lt;br /&gt;
&lt;br /&gt;
The SHSH request also contains information about files from the [[IPSW]] (or restore bundle for [[PurpleRestore]]). They can be obtained from the 'build identity' you've chosen in the previous step. Each 'build identity' contains a &amp;quot;Manifest&amp;quot; dictionary. It's entries look like&lt;br /&gt;
 &amp;lt;key&amp;gt;BatteryCharging0&amp;lt;/key&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;Digest&amp;lt;/key&amp;gt;&lt;br /&gt;
  	&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt;...&amp;lt;/data&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;Info&amp;lt;/key&amp;gt;&lt;br /&gt;
 	&amp;lt;dict&amp;gt;...&amp;lt;/dict&amp;gt;&lt;br /&gt;
  	&amp;lt;key&amp;gt;Trusted&amp;lt;key/&amp;gt;&lt;br /&gt;
 	&amp;lt;true/&amp;gt;&lt;br /&gt;
 &amp;lt;dict/&amp;gt;&lt;br /&gt;
They are just copied to the SHSH request, but the &amp;quot;Info&amp;quot; dictionary is removed.&lt;br /&gt;
Example of a SHSH request (... values are identical, *** values are different per device):&lt;br /&gt;
 &amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt; &lt;br /&gt;
 &amp;lt;dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@[[APTicket]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@[[BBTicket]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@HostPlatformInfo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;mac&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@Locality&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;en_US&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@UUID&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;D9C1F33D-62E0-4D25-8068-F5F46FE80057&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@VersionInfo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;libauthinstall-391.0.0.1.3&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[BORD |ApBoardID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;10&amp;lt;/integer&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;[[CHIP |ApChipID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;35152&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[ECID |ApECID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;***&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[Nonce |ApNonce]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt;***&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;ApProductionMode&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;ApSecurityDomain&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;UniqueBuildID&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;data&amp;gt; fqzW0B++Zdrs+PRwohkwU6prjbk=&amp;lt;/data&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;AppleLogo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;Digest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; uH5QQax5YmIrgcuEHwOhAB//yc8=&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		&amp;lt;key&amp;gt;Trusted&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;/dict&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryCharging0&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... See AppleLogo dictionary.&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryCharging1&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryFull&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... &lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryLow0&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryLow1&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryPlugin&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;DeviceTree&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;KernelCache&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;LLB&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;PartialDigest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; QAAAAHhRAgC22ZPWJB9J1Nh3H+0XeyRTU72ObA==&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RecoveryMode&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreDeviceTree&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreKernelCache&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreLogo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... &lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreRamDisk&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBEC]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBSS]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;PartialDigest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; QAAAAHhBAQCRc2PuoresMjW7zNLePMPmX7zaHg==&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBoot]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 &amp;lt;/dict&amp;gt; &lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Receiving data (answer)===&lt;br /&gt;
The response is a simple HTTP POST response, containing 3 values: STATUS, MESSAGE (a description string) and REQUEST_STRING (only if the request was successful). STATUS contains numeric status, MESSAGE contains an error message on error and &amp;quot;SUCCESS&amp;quot; string on success and REQUEST_STRING contains response property list encoded as XML.&lt;br /&gt;
&lt;br /&gt;
===Status responses===&lt;br /&gt;
*'''STATUS=0&amp;amp;MESSAGE=SUCCESS'''&lt;br /&gt;
** The request was sent successfully, and a response was returned.'''&lt;br /&gt;
*'''STATUS=8&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A key contained an unknown name.&lt;br /&gt;
*'''STATUS=83&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A key was assigned an invalid value type.&lt;br /&gt;
*'''STATUS=92&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The request contained more than 65536 bytes.&lt;br /&gt;
*'''STATUS=93&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The request contained less than 10 bytes.&lt;br /&gt;
*'''STATUS=94&amp;amp;MESSAGE=This device isn't eligible for the requested build.'''&lt;br /&gt;
** The specified build is either unsigned or nonexistent.&lt;br /&gt;
*'''STATUS=98&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The XML/PList identification tag is missing or the start of the tag is malformed.&lt;br /&gt;
*'''STATUS=100&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A general XML error was found: the XML/PList version is nonexistent or not &amp;quot;1.0&amp;quot;, the end of the XML/PList identification tag is malformed, an unknown or empty tag was found, the root &amp;lt;code&amp;gt;&amp;lt;plist&amp;gt;&amp;lt;/code&amp;gt; tag is missing, no keys were found, a value tag contained an invalid type, an unescaped ampersand character was found, two consecutive dash characters were found in a comment, or a tag was found without its counterpart.&lt;br /&gt;
*'''STATUS=103&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** Multiple '@' characters were found at the beginning of a key name.&lt;br /&gt;
*'''STATUS=128&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
*'''STATUS=511&amp;amp;MESSAGE=No data in the request'''&lt;br /&gt;
*'''STATUS=551&amp;amp;MESSAGE=Error occured while importing config packet with cpsn: '''&lt;br /&gt;
*'''STATUS=5000&amp;amp;MESSAGE=Invalid Option!'''&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* Interestingly, if all you're interested in is the ServerVersion (and a SUCCESS response), sending any one valid Ap-prefixed key will do, like so:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;plist&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;ApSecurityDomain&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In regards to fuzzing and malformed data, the server (as of 2.1.0, at least) seems to have no bounds checking for the ApNonce, or even checking to see if the ApNonce exists. Because the APTicket changes even when specifying an invalid-sized nonce, it is assumed nonces too short are padded while nonces too large are ignored past the 16th character.&lt;br /&gt;
&lt;br /&gt;
* Most textual characters between tags are ignored. For example, inserting non-bracket text (excluding XML special characters, such as '&amp;amp;') after a &amp;lt;code&amp;gt;&amp;lt;dict&amp;gt;&amp;lt;/code&amp;gt; and before the following &amp;lt;code&amp;gt;&amp;lt;key&amp;gt;&amp;lt;/code&amp;gt; will have no effect.&lt;br /&gt;
&lt;br /&gt;
* A version string in the XML/Plist identification tag is '''required''', or a &amp;lt;code&amp;gt;STATUS=100&amp;lt;/code&amp;gt; internal error message will result. Any encoding string provided is ignored and defaulted to (presumably) &amp;quot;UTF-8&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* The DOCTYPE tag is completely ignored. As such, specifying any non-PList DTD has no effect.&lt;br /&gt;
&lt;br /&gt;
===Other parameters / open questions===&lt;br /&gt;
Some parameters could have other values. Not all details are known.&lt;br /&gt;
*ApSecurityDomain: Meaning? (Related to [[SDOM]] tag)&lt;br /&gt;
*Trusted: What is this for?&lt;br /&gt;
*Full description of the above values for UniqueBuildID, Digest, PartialDigest and BuildString.&lt;br /&gt;
&lt;br /&gt;
===PartialDigest===&lt;br /&gt;
The PartialDigest is structured like so:&lt;br /&gt;
&lt;br /&gt;
 typedef struct PartialDigest {&lt;br /&gt;
     uint32_t transformSize;     // Always 0x40.&lt;br /&gt;
     uint32_t img3DataSize;      // data size of the img3.&lt;br /&gt;
     uint8_t hash[SHA1HashSize];  // Result of SHA1ResultPartial from the stripped img3.&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
The img3 is first stripped of it's code signature (if present) and then passed through SHA1Update. SHA1ResultPartial is then performed. It is purposely not the final resulting SHA1. The reason for this being, when TSS processes the PartialDigest, it performs one more SHA1Update on the hash to include the [[ECID]] before doing SHA1Final and creating the SHSH blob.&lt;br /&gt;
&lt;br /&gt;
Code for SHA1ResultPartial:&lt;br /&gt;
 int SHA1ResultPartial(SHA1Context* ctx, unsigned char* buf) {&lt;br /&gt;
 	// Do we have valid buffer and context pointers?&lt;br /&gt;
 	if(ctx &amp;amp;&amp;amp; buf) {&lt;br /&gt;
 		// Is the Context in good shape?&lt;br /&gt;
 		if(!ctx-&amp;gt;Corrupted &amp;amp;&amp;amp; !ctx-&amp;gt;Computed &amp;amp;&amp;amp; !ctx-&amp;gt;Message_Block_Index) {&lt;br /&gt;
 			for(int i = 0; i &amp;lt; SHA1HashSize; i++) {&lt;br /&gt;
 				buf[i] = ctx-&amp;gt;Intermediate_Hash[i &amp;gt;&amp;gt; 2] &amp;gt;&amp;gt; 8 * (3 - (i &amp;amp; 0x3));&lt;br /&gt;
 			}&lt;br /&gt;
 			return 0;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	return 1;&lt;br /&gt;
 }&lt;br /&gt;
Code for tss_strip_img3_signature:&lt;br /&gt;
 int tss_strip_img3_signature(img3Header* img3, int* len) {&lt;br /&gt;
 	// Do we have a non-null ptr?&lt;br /&gt;
 	if(!img3) {&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Does the buffer start with the img3 magic?&lt;br /&gt;
 	if(img3-&amp;gt;magic != IMG3_MAGIC) {&lt;br /&gt;
 		printf(&amp;quot;tss_strip_img3_signature: bad magic 0x%08x expecting 0x%08x\n&amp;quot;, img3-&amp;gt;magic, IMG3_MAGIC);&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Sanity checks&lt;br /&gt;
 	if(img3-&amp;gt;shshOffset &amp;gt; img3-&amp;gt;dataSize) {&lt;br /&gt;
 		printf(&amp;quot;tss_strip_img3_signature: signed length %u too large for buffer length %u\n&amp;quot;, img3-&amp;gt;shshOffset, img3-&amp;gt;dataSize);&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Trim the image by adjusting the header.&lt;br /&gt;
 	if(img3-&amp;gt;shshOffset) {&lt;br /&gt;
 		*len += img3-&amp;gt;shshOffset - img3-&amp;gt;dataSize;&lt;br /&gt;
 		img3-&amp;gt;dataSize = img3-&amp;gt;shshOffset;&lt;br /&gt;
 		img3-&amp;gt;fullSize = *len;&lt;br /&gt;
 	}&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Digest===&lt;br /&gt;
Digest is the SHA1 of the stripped img3. They are used instead of PartialDigests for the APTicket since the ticket is already personalized for the ECID and all other tags.&lt;br /&gt;
&lt;br /&gt;
[[Category:Firmware Tags]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=SHSH_Protocol&amp;diff=99138</id>
		<title>SHSH Protocol</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=SHSH_Protocol&amp;diff=99138"/>
		<updated>2020-02-14T20:10:13Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: More notes, general fixes. Removed IP note on gs.apple.com; those attempting to send TSS requests should use gs.apple.com instead of an IP, which may change&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a description about the protocol that is used when [[iTunes]] requests the [[SHSH]] certificate from Apple. For details about what this is used for, please see the main article [[SHSH]].&lt;br /&gt;
&lt;br /&gt;
This is a simple [[wikipedia:Hypertext Transfer Protocol|HTTP]] ([[wikipedia:POST (HTTP)|POST]]) request and answer. You can retry this via a [[wikipedia:Telnet|Telnet]] session or similar. The destination host is [http://gs.apple.com/TSS/controller?action=2 gs.apple.com] and runs on the common  [[wikipedia:TCP and UDP port|port]] 80. The data is plaintext and not encoded in any way. For details about the [[wikipedia:Hypertext Transfer Protocol|HTTP]] protocol itself, please see [http://www.w3.org/Protocols/HTTP/1.1/rfc2616.pdf RFC2616].&lt;br /&gt;
&lt;br /&gt;
===Sending data (request)===&lt;br /&gt;
The request is actually a single XML encoded poperty list. It contains a dictionary which describes the target iOS version, restore behavior etc. Some of the required information can be taken from the BuildManifest.plist. BuildManifest contains some info about the firmware version and &amp;quot;BuildIdentities&amp;quot; dictionary. Inside it you can find two (or more?) build identities. Each of them contains the information which depends on every type of restore (&amp;quot;Erase&amp;quot; or &amp;quot;Update&amp;quot;). Some information is device-dependent (ECID, nonce) and is received from the device.&lt;br /&gt;
&lt;br /&gt;
Request property list should have these properties:&lt;br /&gt;
&lt;br /&gt;
* '''@APTicket:''' Optional boolean value. If true, the server adds an [[APTicket]] to the request.&lt;br /&gt;
* '''@BBTicket:''' Optional boolean value. The same for the [[BBTicket]].&lt;br /&gt;
* '''@UDID:''' Optional string value. Just request UDID (ex. D9C1F33D-62E0-4D25-8068-F5F46FE80057).&lt;br /&gt;
* '''@HostPlatformInfo:''' Optional string value. &amp;quot;mac&amp;quot; for OS X client, &amp;quot;windows&amp;quot; for Windows client (can be everything you want).&lt;br /&gt;
* '''@Locality:''' Optional string value. Language used for the error response (ex. &amp;quot;en_US&amp;quot;).&lt;br /&gt;
* '''@VersionInfo:''' Optional string value. The version of 'libauthinstall' used (ex. &amp;quot;libauthinstall-391.0.0.1.3&amp;quot;). You can pass any string here.&lt;br /&gt;
* '''ApBoardID:''' Integer value. [[BORD |Board ID]] of the target device. You can take this value from build manifest.&lt;br /&gt;
* '''ApChipID:''' Integer value. [[CHIP|Chip ID]] of the target device. You can take this value from build manifest.&lt;br /&gt;
* '''ApECID:''' Integer value. [[ECID]] of the target device.&lt;br /&gt;
* '''ApNonce:''' Data value. The [[nonce]] generated by your device.&lt;br /&gt;
* '''ApProductionMode:''' Boolean value. Always true (unless your SOC is PROD 0 - Apple only).&lt;br /&gt;
* '''ApSecurityDomain:''' Integer value. The use is unknown. You can take this value from build manifest.&lt;br /&gt;
* '''UniqueBuildID:''' Optional data value. This is a unique identifier for every build (different even for &amp;quot;Erase&amp;quot; and &amp;quot;Update&amp;quot; types of restore).  You can take this value from build manifest.&lt;br /&gt;
&lt;br /&gt;
The SHSH request also contains information about files from the [[IPSW]] (or restore bundle for [[PurpleRestore]]). They can be obtained from the 'build identity' you've chosen in the previous step. Each 'build identity' contains a &amp;quot;Manifest&amp;quot; dictionary. It's entries look like&lt;br /&gt;
 &amp;lt;key&amp;gt;BatteryCharging0&amp;lt;/key&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;Digest&amp;lt;/key&amp;gt;&lt;br /&gt;
  	&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt;...&amp;lt;/data&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;Info&amp;lt;/key&amp;gt;&lt;br /&gt;
 	&amp;lt;dict&amp;gt;...&amp;lt;/dict&amp;gt;&lt;br /&gt;
  	&amp;lt;key&amp;gt;Trusted&amp;lt;key/&amp;gt;&lt;br /&gt;
 	&amp;lt;true/&amp;gt;&lt;br /&gt;
 &amp;lt;dict/&amp;gt;&lt;br /&gt;
They are just copied to the SHSH request, but the &amp;quot;Info&amp;quot; dictionary is removed.&lt;br /&gt;
Example of a SHSH request (... values are identical, *** values are different per device):&lt;br /&gt;
 &amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt; &lt;br /&gt;
 &amp;lt;dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@[[APTicket]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@[[BBTicket]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@HostPlatformInfo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;mac&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@Locality&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;en_US&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@UUID&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;D9C1F33D-62E0-4D25-8068-F5F46FE80057&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@VersionInfo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;libauthinstall-391.0.0.1.3&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[BORD |ApBoardID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;10&amp;lt;/integer&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;[[CHIP |ApChipID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;35152&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[ECID |ApECID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;***&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[Nonce |ApNonce]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt;***&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;ApProductionMode&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;ApSecurityDomain&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;UniqueBuildID&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;data&amp;gt; fqzW0B++Zdrs+PRwohkwU6prjbk=&amp;lt;/data&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;AppleLogo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;Digest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; uH5QQax5YmIrgcuEHwOhAB//yc8=&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		&amp;lt;key&amp;gt;Trusted&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;/dict&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryCharging0&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... See AppleLogo dictionary.&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryCharging1&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryFull&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... &lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryLow0&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryLow1&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryPlugin&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;DeviceTree&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;KernelCache&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;LLB&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;PartialDigest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; QAAAAHhRAgC22ZPWJB9J1Nh3H+0XeyRTU72ObA==&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RecoveryMode&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreDeviceTree&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreKernelCache&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreLogo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... &lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreRamDisk&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBEC]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBSS]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;PartialDigest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; QAAAAHhBAQCRc2PuoresMjW7zNLePMPmX7zaHg==&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBoot]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 &amp;lt;/dict&amp;gt; &lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Receiving data (answer)===&lt;br /&gt;
The response is a simple HTTP POST response, containing 3 values: STATUS, MESSAGE (a description string) and REQUEST_STRING (only if the request was successful). STATUS contains numeric status, MESSAGE contains an error message on error and &amp;quot;SUCCESS&amp;quot; string on success and REQUEST_STRING contains response property list encoded as XML.&lt;br /&gt;
&lt;br /&gt;
===Status responses===&lt;br /&gt;
*'''STATUS=0&amp;amp;MESSAGE=SUCCESS'''&lt;br /&gt;
** The request was sent successfully, and a response was returned.'''&lt;br /&gt;
*'''STATUS=8&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A key contained an unknown name.&lt;br /&gt;
*'''STATUS=83&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A key was assigned an invalid value type.&lt;br /&gt;
*'''STATUS=92&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The request contained more than 65536 bytes.&lt;br /&gt;
*'''STATUS=93&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The request contained less than 10 bytes.&lt;br /&gt;
*'''STATUS=94&amp;amp;MESSAGE=This device isn't eligible for the requested build.'''&lt;br /&gt;
** The specified build is either unsigned or nonexistent.&lt;br /&gt;
*'''STATUS=98&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The XML/PList identification tag is missing or the start of the tag is malformed.&lt;br /&gt;
*'''STATUS=100&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A general XML error was found: the XML/PList version is nonexistent or not &amp;quot;1.0&amp;quot;, the end of the XML/PList identification tag is malformed, an unknown or empty tag was found, the root &amp;lt;code&amp;gt;&amp;lt;plist&amp;gt;&amp;lt;/code&amp;gt; tag is missing, no keys were found, a value tag contained an invalid type, an unescaped ampersand character was found, two consecutive dash characters were found in a comment, or a tag was found without its counterpart.&lt;br /&gt;
*'''STATUS=103&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** Multiple '@' characters were found at the beginning of a key name.&lt;br /&gt;
*'''STATUS=128&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
*'''STATUS=511&amp;amp;MESSAGE=No data in the request'''&lt;br /&gt;
*'''STATUS=551&amp;amp;MESSAGE=Error occured while importing config packet with cpsn: '''&lt;br /&gt;
*'''STATUS=5000&amp;amp;MESSAGE=Invalid Option!'''&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* Interestingly, if all you're interested in is the ServerVersion (and a SUCCESS response), sending any one valid Ap-prefixed key will do, like so:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;plist&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;ApSecurityDomain&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In regards to fuzzing and malformed data, the server (as of 2.1.0, at least) seems to have no bounds checking for the ApNonce, or even checking to see if the ApNonce exists. Because the APTicket changes even when specifying an invalid-sized nonce, it is assumed nonces too short are padded while nonces too large are ignored past the 16th character.&lt;br /&gt;
&lt;br /&gt;
* Most textual characters between tags are ignored. For example, inserting non-bracket text (excluding XML special characters, such as '&amp;amp;') after a &amp;lt;code&amp;gt;&amp;lt;dict&amp;gt;&amp;lt;/code&amp;gt; and before the following &amp;lt;code&amp;gt;&amp;lt;key&amp;gt;&amp;lt;/code&amp;gt; will have no effect.&lt;br /&gt;
&lt;br /&gt;
* A version string in the XML/Plist identification tag is '''required''', or a &amp;lt;code&amp;gt;STATUS=100&amp;lt;/code&amp;gt; internal error message will result. Any encoding string provided is ignored and defaulted to (presumably) &amp;quot;UTF-8&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* The DOCTYPE tag is completely ignored. As such, specifying any non-PList DTD has no effect.&lt;br /&gt;
&lt;br /&gt;
===Other parameters / open questions===&lt;br /&gt;
Some parameters could have other values. Not all details are known.&lt;br /&gt;
*&amp;lt;code&amp;gt;action=2&amp;lt;/code&amp;gt; in the request. What other values exist, and what is their meaning?&lt;br /&gt;
*ApSecurityDomain: Meaning? (Related to [[SDOM]] tag)&lt;br /&gt;
*Trusted: What is this for?&lt;br /&gt;
*Full description of the above values for UniqueBuildID, Digest, PartialDigest and BuildString.&lt;br /&gt;
&lt;br /&gt;
===PartialDigest===&lt;br /&gt;
The PartialDigest is structured like so:&lt;br /&gt;
&lt;br /&gt;
 typedef struct PartialDigest {&lt;br /&gt;
     uint32_t transformSize;     // Always 0x40.&lt;br /&gt;
     uint32_t img3DataSize;      // data size of the img3.&lt;br /&gt;
     uint8_t hash[SHA1HashSize];  // Result of SHA1ResultPartial from the stripped img3.&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
The img3 is first stripped of it's code signature (if present) and then passed through SHA1Update. SHA1ResultPartial is then performed. It is purposely not the final resulting SHA1. The reason for this being, when TSS processes the PartialDigest, it performs one more SHA1Update on the hash to include the [[ECID]] before doing SHA1Final and creating the SHSH blob.&lt;br /&gt;
&lt;br /&gt;
Code for SHA1ResultPartial:&lt;br /&gt;
 int SHA1ResultPartial(SHA1Context* ctx, unsigned char* buf) {&lt;br /&gt;
 	// Do we have valid buffer and context pointers?&lt;br /&gt;
 	if(ctx &amp;amp;&amp;amp; buf) {&lt;br /&gt;
 		// Is the Context in good shape?&lt;br /&gt;
 		if(!ctx-&amp;gt;Corrupted &amp;amp;&amp;amp; !ctx-&amp;gt;Computed &amp;amp;&amp;amp; !ctx-&amp;gt;Message_Block_Index) {&lt;br /&gt;
 			for(int i = 0; i &amp;lt; SHA1HashSize; i++) {&lt;br /&gt;
 				buf[i] = ctx-&amp;gt;Intermediate_Hash[i &amp;gt;&amp;gt; 2] &amp;gt;&amp;gt; 8 * (3 - (i &amp;amp; 0x3));&lt;br /&gt;
 			}&lt;br /&gt;
 			return 0;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	return 1;&lt;br /&gt;
 }&lt;br /&gt;
Code for tss_strip_img3_signature:&lt;br /&gt;
 int tss_strip_img3_signature(img3Header* img3, int* len) {&lt;br /&gt;
 	// Do we have a non-null ptr?&lt;br /&gt;
 	if(!img3) {&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Does the buffer start with the img3 magic?&lt;br /&gt;
 	if(img3-&amp;gt;magic != IMG3_MAGIC) {&lt;br /&gt;
 		printf(&amp;quot;tss_strip_img3_signature: bad magic 0x%08x expecting 0x%08x\n&amp;quot;, img3-&amp;gt;magic, IMG3_MAGIC);&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Sanity checks&lt;br /&gt;
 	if(img3-&amp;gt;shshOffset &amp;gt; img3-&amp;gt;dataSize) {&lt;br /&gt;
 		printf(&amp;quot;tss_strip_img3_signature: signed length %u too large for buffer length %u\n&amp;quot;, img3-&amp;gt;shshOffset, img3-&amp;gt;dataSize);&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Trim the image by adjusting the header.&lt;br /&gt;
 	if(img3-&amp;gt;shshOffset) {&lt;br /&gt;
 		*len += img3-&amp;gt;shshOffset - img3-&amp;gt;dataSize;&lt;br /&gt;
 		img3-&amp;gt;dataSize = img3-&amp;gt;shshOffset;&lt;br /&gt;
 		img3-&amp;gt;fullSize = *len;&lt;br /&gt;
 	}&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Digest===&lt;br /&gt;
Digest is the SHA1 of the stripped img3. They are used instead of PartialDigests for the APTicket since the ticket is already personalized for the ECID and all other tags.&lt;br /&gt;
&lt;br /&gt;
[[Category:Firmware Tags]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=SHSH_Protocol&amp;diff=99130</id>
		<title>SHSH Protocol</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=SHSH_Protocol&amp;diff=99130"/>
		<updated>2020-02-14T02:10:24Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: A few new quirks/notes discovered&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a description about the protocol that is used when [[iTunes]] requests the [[SHSH]] certificate from Apple. For details about what this is used for, please see the main article [[SHSH]].&lt;br /&gt;
&lt;br /&gt;
This is a simple [[wikipedia:Hypertext Transfer Protocol|HTTP]] ([[wikipedia:POST (HTTP)|POST]]) request and answer. You can retry this via a [[wikipedia:Telnet|Telnet]] session or similar. The destination host is gs.apple.com (IP 17.171.36.30 [previously 17.112.176.11]) and runs on the common  [[wikipedia:TCP and UDP port|port]] 80. The data is plaintext and not encoded in any way. For details about the [[wikipedia:Hypertext Transfer Protocol|HTTP]] protocol itself, please see [http://www.w3.org/Protocols/HTTP/1.1/rfc2616.pdf RFC2616].&lt;br /&gt;
&lt;br /&gt;
===Sending data (request)===&lt;br /&gt;
The request is actually a single XML encoded poperty list. It contains a dictionary which describes the target iOS version, restore behavior etc. Some of the required information can be taken from the BuildManifest.plist. BuildManifest contains some info about the firmware version and &amp;quot;BuildIdentities&amp;quot; dictionary. Inside it you can find two (or more?) build identities. Each of them contains the information which depends on every type of restore (&amp;quot;Erase&amp;quot; or &amp;quot;Update&amp;quot;). Some information is device-dependent (ECID, nonce) and is received from the device.&lt;br /&gt;
&lt;br /&gt;
Request property list should have these properties:&lt;br /&gt;
&lt;br /&gt;
* @APTicket: Optional boolean value. If true, the server adds an [[APTicket]] to the request.&lt;br /&gt;
* @BBTicket: Optional boolean value. The same for the [[BBTicket]].&lt;br /&gt;
* @UDID: Optional string value. Just request UDID. (ex. D9C1F33D-62E0-4D25-8068-F5F46FE80057).&lt;br /&gt;
* @HostPlatformInfo: Optional string value. &amp;quot;mac&amp;quot; for OS X client, &amp;quot;windows&amp;quot; for windows client (can be everything you want).&lt;br /&gt;
* @Locality: Optional string value. Language used for the error response (ex. &amp;quot;en_US&amp;quot;);&lt;br /&gt;
* @VersionInfo: Optional string value. The version of 'libauthinstall' used (ex. &amp;quot;libauthinstall-391.0.0.1.3&amp;quot;). You can pass any string here.&lt;br /&gt;
* ApBoardID: Integer value. [[BORD |Board ID]] of the target device. You can take this value from build manifest.&lt;br /&gt;
* ApChipID: Integer value. [[CHIP|Chip ID]] of the target device. You can take this value from build manifest.&lt;br /&gt;
* ApECID: Integer value. [[ECID]] of the target device.&lt;br /&gt;
* ApNonce: Data value. The [[nonce]] generated by your device.&lt;br /&gt;
* ApProductionMode: Boolean value. Always true (unless your SOC is PROD 0 - Apple only).&lt;br /&gt;
* ApSecurityDomain: Integer value. The use is unknown. You can take this value from build manifest.&lt;br /&gt;
* UniqueBuildID: Optional data value. This is a unique identifier for every build (different even for &amp;quot;Erase&amp;quot; and &amp;quot;Update&amp;quot; types of restore).  You can take this value from build manifest.&lt;br /&gt;
&lt;br /&gt;
The SHSH request also contains information about files from the [[IPSW]] (or restore bundle for [[PurpleRestore]]). They can be obtained from the 'build identity' you've chosen in the previous step. Each 'build identity' contains a &amp;quot;Manifest&amp;quot; dictionary. It's entries look like&lt;br /&gt;
 &amp;lt;key&amp;gt;BatteryCharging0&amp;lt;/key&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;Digest&amp;lt;/key&amp;gt;&lt;br /&gt;
  	&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt;...&amp;lt;/data&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;Info&amp;lt;/key&amp;gt;&lt;br /&gt;
 	&amp;lt;dict&amp;gt;...&amp;lt;/dict&amp;gt;&lt;br /&gt;
  	&amp;lt;key&amp;gt;Trusted&amp;lt;key/&amp;gt;&lt;br /&gt;
 	&amp;lt;true/&amp;gt;&lt;br /&gt;
 &amp;lt;dict/&amp;gt;&lt;br /&gt;
They are just copied to the SHSH request, but the &amp;quot;Info&amp;quot; dictionary is removed.&lt;br /&gt;
Example of a SHSH request (... values are identical, *** values are different per device):&lt;br /&gt;
 &amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt; &lt;br /&gt;
 &amp;lt;dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@[[APTicket]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@[[BBTicket]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@HostPlatformInfo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;mac&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@Locality&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;en_US&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@UUID&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;D9C1F33D-62E0-4D25-8068-F5F46FE80057&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@VersionInfo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;libauthinstall-391.0.0.1.3&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[BORD |ApBoardID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;10&amp;lt;/integer&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;[[CHIP |ApChipID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;35152&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[ECID |ApECID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;***&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[Nonce |ApNonce]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt;***&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;ApProductionMode&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;ApSecurityDomain&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;UniqueBuildID&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;data&amp;gt; fqzW0B++Zdrs+PRwohkwU6prjbk=&amp;lt;/data&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;AppleLogo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;Digest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; uH5QQax5YmIrgcuEHwOhAB//yc8=&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		&amp;lt;key&amp;gt;Trusted&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;/dict&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryCharging0&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... See AppleLogo dictionary.&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryCharging1&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryFull&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... &lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryLow0&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryLow1&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryPlugin&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;DeviceTree&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;KernelCache&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;LLB&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;PartialDigest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; QAAAAHhRAgC22ZPWJB9J1Nh3H+0XeyRTU72ObA==&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RecoveryMode&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreDeviceTree&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreKernelCache&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreLogo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... &lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreRamDisk&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBEC]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBSS]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;PartialDigest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; QAAAAHhBAQCRc2PuoresMjW7zNLePMPmX7zaHg==&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBoot]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 &amp;lt;/dict&amp;gt; &lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Receiving data (answer)===&lt;br /&gt;
The response is a simple HTTP POST response, containing 3 values: STATUS, MESSAGE (a description string) and REQUEST_STRING (only if the request was successful). STATUS contains numeric status, MESSAGE contains an error message on error and &amp;quot;SUCCESS&amp;quot; string on success and REQUEST_STRING contains response property list encoded as XML.&lt;br /&gt;
&lt;br /&gt;
===Status responses===&lt;br /&gt;
*'''STATUS=0&amp;amp;MESSAGE=SUCCESS'''&lt;br /&gt;
** The request was sent successfully, and a response was returned.'''&lt;br /&gt;
*'''STATUS=8&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A key contained an unknown name.&lt;br /&gt;
*'''STATUS=83&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A key was assigned an invalid value type.&lt;br /&gt;
*'''STATUS=92&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The request contained more than 65536 bytes.&lt;br /&gt;
*'''STATUS=93&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The request contained less than 10 bytes.&lt;br /&gt;
*'''STATUS=94&amp;amp;MESSAGE=This device isn't eligible for the requested build.'''&lt;br /&gt;
** The specified build is either unsigned or nonexistent.&lt;br /&gt;
*'''STATUS=98&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The XML/PList identification tag is missing, or the start of the tag is malformed.&lt;br /&gt;
*'''STATUS=100&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The XML/PList version is nonexistent or not &amp;quot;1.0&amp;quot;, the end of the XML/PList identification tag is malformed, an unknown tag was found, a value tag contained an invalid type, an unescaped ampersand character was found, or a tag was found without its counterpart.&lt;br /&gt;
*'''STATUS=103&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** Multiple '@' characters were found at the beginning of a key name.&lt;br /&gt;
*'''STATUS=128&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
*'''STATUS=511&amp;amp;MESSAGE=No data in the request'''&lt;br /&gt;
*'''STATUS=551&amp;amp;MESSAGE=Error occured while importing config packet with cpsn: '''&lt;br /&gt;
*'''STATUS=5000&amp;amp;MESSAGE=Invalid Option!'''&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* Interestingly, if all you're interested in is the ServerVersion (and a SUCCESS response), sending any one valid Ap-prefixed key will do, like so:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;plist&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;ApSecurityDomain&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* In regards to fuzzing and malformed data, the server (as of 2.1.0, at least) seems to have no bounds checking for the ApNonce, or even checking to see if the ApNonce exists. Because the APTicket changes even when specifying an invalid-sized nonce, it is assumed nonces too short are padded while nonces too large are ignored past the 16th character.&lt;br /&gt;
&lt;br /&gt;
* Most textual characters between tags are ignored. For example, inserting non-bracket text (excluding XML special characters, such as '&amp;amp;') after a &amp;lt;code&amp;gt;&amp;lt;dict&amp;gt;&amp;lt;/code&amp;gt; and before the following &amp;lt;code&amp;gt;&amp;lt;key&amp;gt;&amp;lt;/code&amp;gt; will have no effect.&lt;br /&gt;
&lt;br /&gt;
* A version string in the XML/Plist identification tag is '''required''', or a &amp;lt;code&amp;gt;STATUS=100&amp;lt;/code&amp;gt; internal message will result.&lt;br /&gt;
&lt;br /&gt;
===Other parameters / open questions===&lt;br /&gt;
Some parameters could have other values. Not all details are known.&lt;br /&gt;
*action=2 in the request. What other values exist and what is their meaning?&lt;br /&gt;
*ApSecurityDomain Meaning? (Related to [[SDOM]] tag)&lt;br /&gt;
*Trusted What is this for?&lt;br /&gt;
*Full description of the above values for UniqueBuildID, Digest, PartialDigest and BuildString.&lt;br /&gt;
&lt;br /&gt;
===PartialDigest===&lt;br /&gt;
The PartialDigest is structured like so:&lt;br /&gt;
&lt;br /&gt;
 typedef struct PartialDigest {&lt;br /&gt;
     uint32_t transformSize;     // Always 0x40.&lt;br /&gt;
     uint32_t img3DataSize;      // data size of the img3.&lt;br /&gt;
     uint8_t hash[SHA1HashSize];  // Result of SHA1ResultPartial from the stripped img3.&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
The img3 is first stripped of it's code signature (if present) and then passed through SHA1Update. SHA1ResultPartial is then performed. It is purposely not the final resulting SHA1. The reason for this being, when TSS processes the PartialDigest, it performs one more SHA1Update on the hash to include the [[ECID]] before doing SHA1Final and creating the SHSH blob.&lt;br /&gt;
&lt;br /&gt;
Code for SHA1ResultPartial:&lt;br /&gt;
 int SHA1ResultPartial(SHA1Context* ctx, unsigned char* buf) {&lt;br /&gt;
 	// Do we have valid buffer and context pointers?&lt;br /&gt;
 	if(ctx &amp;amp;&amp;amp; buf) {&lt;br /&gt;
 		// Is the Context in good shape?&lt;br /&gt;
 		if(!ctx-&amp;gt;Corrupted &amp;amp;&amp;amp; !ctx-&amp;gt;Computed &amp;amp;&amp;amp; !ctx-&amp;gt;Message_Block_Index) {&lt;br /&gt;
 			for(int i = 0; i &amp;lt; SHA1HashSize; i++) {&lt;br /&gt;
 				buf[i] = ctx-&amp;gt;Intermediate_Hash[i &amp;gt;&amp;gt; 2] &amp;gt;&amp;gt; 8 * (3 - (i &amp;amp; 0x3));&lt;br /&gt;
 			}&lt;br /&gt;
 			return 0;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	return 1;&lt;br /&gt;
 }&lt;br /&gt;
Code for tss_strip_img3_signature:&lt;br /&gt;
 int tss_strip_img3_signature(img3Header* img3, int* len) {&lt;br /&gt;
 	// Do we have a non-null ptr?&lt;br /&gt;
 	if(!img3) {&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Does the buffer start with the img3 magic?&lt;br /&gt;
 	if(img3-&amp;gt;magic != IMG3_MAGIC) {&lt;br /&gt;
 		printf(&amp;quot;tss_strip_img3_signature: bad magic 0x%08x expecting 0x%08x\n&amp;quot;, img3-&amp;gt;magic, IMG3_MAGIC);&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Sanity checks&lt;br /&gt;
 	if(img3-&amp;gt;shshOffset &amp;gt; img3-&amp;gt;dataSize) {&lt;br /&gt;
 		printf(&amp;quot;tss_strip_img3_signature: signed length %u too large for buffer length %u\n&amp;quot;, img3-&amp;gt;shshOffset, img3-&amp;gt;dataSize);&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Trim the image by adjusting the header.&lt;br /&gt;
 	if(img3-&amp;gt;shshOffset) {&lt;br /&gt;
 		*len += img3-&amp;gt;shshOffset - img3-&amp;gt;dataSize;&lt;br /&gt;
 		img3-&amp;gt;dataSize = img3-&amp;gt;shshOffset;&lt;br /&gt;
 		img3-&amp;gt;fullSize = *len;&lt;br /&gt;
 	}&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Digest===&lt;br /&gt;
Digest is the SHA1 of the stripped img3. They are used instead of PartialDigests for the APTicket since the ticket is already personalized for the ECID and all other tags.&lt;br /&gt;
&lt;br /&gt;
[[Category:Firmware Tags]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=SHSH_Protocol&amp;diff=99129</id>
		<title>SHSH Protocol</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=SHSH_Protocol&amp;diff=99129"/>
		<updated>2020-02-14T02:00:31Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Added more status responses and improved documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a description about the protocol that is used when [[iTunes]] requests the [[SHSH]] certificate from Apple. For details about what this is used for, please see the main article [[SHSH]].&lt;br /&gt;
&lt;br /&gt;
This is a simple [[wikipedia:Hypertext Transfer Protocol|HTTP]] ([[wikipedia:POST (HTTP)|POST]]) request and answer. You can retry this via a [[wikipedia:Telnet|Telnet]] session or similar. The destination host is gs.apple.com (IP 17.171.36.30 [previously 17.112.176.11]) and runs on the common  [[wikipedia:TCP and UDP port|port]] 80. The data is plaintext and not encoded in any way. For details about the [[wikipedia:Hypertext Transfer Protocol|HTTP]] protocol itself, please see [http://www.w3.org/Protocols/HTTP/1.1/rfc2616.pdf RFC2616].&lt;br /&gt;
&lt;br /&gt;
===Sending data (request)===&lt;br /&gt;
The request is actually a single XML encoded poperty list. It contains a dictionary which describes the target iOS version, restore behavior etc. Some of the required information can be taken from the BuildManifest.plist. BuildManifest contains some info about the firmware version and &amp;quot;BuildIdentities&amp;quot; dictionary. Inside it you can find two (or more?) build identities. Each of them contains the information which depends on every type of restore (&amp;quot;Erase&amp;quot; or &amp;quot;Update&amp;quot;). Some information is device-dependent (ECID, nonce) and is received from the device.&lt;br /&gt;
&lt;br /&gt;
Request property list should have these properties:&lt;br /&gt;
&lt;br /&gt;
* @APTicket: Optional boolean value. If true, the server adds an [[APTicket]] to the request.&lt;br /&gt;
* @BBTicket: Optional boolean value. The same for the [[BBTicket]].&lt;br /&gt;
* @UDID: Optional string value. Just request UDID. (ex. D9C1F33D-62E0-4D25-8068-F5F46FE80057).&lt;br /&gt;
* @HostPlatformInfo: Optional string value. &amp;quot;mac&amp;quot; for OS X client, &amp;quot;windows&amp;quot; for windows client (can be everything you want).&lt;br /&gt;
* @Locality: Optional string value. Language used for the error response (ex. &amp;quot;en_US&amp;quot;);&lt;br /&gt;
* @VersionInfo: Optional string value. The version of 'libauthinstall' used (ex. &amp;quot;libauthinstall-391.0.0.1.3&amp;quot;). You can pass any string here.&lt;br /&gt;
* ApBoardID: Integer value. [[BORD |Board ID]] of the target device. You can take this value from build manifest.&lt;br /&gt;
* ApChipID: Integer value. [[CHIP|Chip ID]] of the target device. You can take this value from build manifest.&lt;br /&gt;
* ApECID: Integer value. [[ECID]] of the target device.&lt;br /&gt;
* ApNonce: Data value. The [[nonce]] generated by your device.&lt;br /&gt;
* ApProductionMode: Boolean value. Always true (unless your SOC is PROD 0 - Apple only).&lt;br /&gt;
* ApSecurityDomain: Integer value. The use is unknown. You can take this value from build manifest.&lt;br /&gt;
* UniqueBuildID: Optional data value. This is a unique identifier for every build (different even for &amp;quot;Erase&amp;quot; and &amp;quot;Update&amp;quot; types of restore).  You can take this value from build manifest.&lt;br /&gt;
&lt;br /&gt;
The SHSH request also contains information about files from the [[IPSW]] (or restore bundle for [[PurpleRestore]]). They can be obtained from the 'build identity' you've chosen in the previous step. Each 'build identity' contains a &amp;quot;Manifest&amp;quot; dictionary. It's entries look like&lt;br /&gt;
 &amp;lt;key&amp;gt;BatteryCharging0&amp;lt;/key&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;Digest&amp;lt;/key&amp;gt;&lt;br /&gt;
  	&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt;...&amp;lt;/data&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;Info&amp;lt;/key&amp;gt;&lt;br /&gt;
 	&amp;lt;dict&amp;gt;...&amp;lt;/dict&amp;gt;&lt;br /&gt;
  	&amp;lt;key&amp;gt;Trusted&amp;lt;key/&amp;gt;&lt;br /&gt;
 	&amp;lt;true/&amp;gt;&lt;br /&gt;
 &amp;lt;dict/&amp;gt;&lt;br /&gt;
They are just copied to the SHSH request, but the &amp;quot;Info&amp;quot; dictionary is removed.&lt;br /&gt;
Example of a SHSH request (... values are identical, *** values are different per device):&lt;br /&gt;
 &amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt; &lt;br /&gt;
 &amp;lt;dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@[[APTicket]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@[[BBTicket]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@HostPlatformInfo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;mac&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@Locality&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;en_US&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@UUID&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;D9C1F33D-62E0-4D25-8068-F5F46FE80057&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;@VersionInfo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;string&amp;gt;libauthinstall-391.0.0.1.3&amp;lt;/string&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[BORD |ApBoardID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;10&amp;lt;/integer&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;[[CHIP |ApChipID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;35152&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[ECID |ApECID]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;***&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[Nonce |ApNonce]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt;***&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;ApProductionMode&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;ApSecurityDomain&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;UniqueBuildID&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;data&amp;gt; fqzW0B++Zdrs+PRwohkwU6prjbk=&amp;lt;/data&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;AppleLogo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;Digest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; uH5QQax5YmIrgcuEHwOhAB//yc8=&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		&amp;lt;key&amp;gt;Trusted&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;true /&amp;gt; &lt;br /&gt;
 	&amp;lt;/dict&amp;gt;&lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryCharging0&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... See AppleLogo dictionary.&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryCharging1&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryFull&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... &lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryLow0&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryLow1&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;BatteryPlugin&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;DeviceTree&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;KernelCache&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;LLB&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;PartialDigest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; QAAAAHhRAgC22ZPWJB9J1Nh3H+0XeyRTU72ObA==&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RecoveryMode&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreDeviceTree&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreKernelCache&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreLogo&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		... &lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;RestoreRamDisk&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBEC]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBSS]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;BuildString&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;string&amp;gt;iBoot-2817.0.0.1.2~2&amp;lt;/string&amp;gt; &lt;br /&gt;
 		&amp;lt;key&amp;gt;PartialDigest&amp;lt;/key&amp;gt; &lt;br /&gt;
 		&amp;lt;nowiki&amp;gt;&amp;lt;data&amp;gt; QAAAAHhBAQCRc2PuoresMjW7zNLePMPmX7zaHg==&amp;lt;/data&amp;gt; &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 	&amp;lt;key&amp;gt;[[iBoot]]&amp;lt;/key&amp;gt; &lt;br /&gt;
 	&amp;lt;dict&amp;gt; &lt;br /&gt;
 		...&lt;br /&gt;
 	&amp;lt;/dict&amp;gt; &lt;br /&gt;
 &amp;lt;/dict&amp;gt; &lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Receiving data (answer)===&lt;br /&gt;
The response is a simple HTTP POST response, containing 3 values: STATUS, MESSAGE (a description string) and REQUEST_STRING (only if the request was successful). STATUS contains numeric status, MESSAGE contains an error message on error and &amp;quot;SUCCESS&amp;quot; string on success and REQUEST_STRING contains response property list encoded as XML.&lt;br /&gt;
&lt;br /&gt;
===Status responses===&lt;br /&gt;
*'''STATUS=0&amp;amp;MESSAGE=SUCCESS'''&lt;br /&gt;
** The request was sent successfully, and a response was returned.'''&lt;br /&gt;
*'''STATUS=8&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A key contained an unknown name.&lt;br /&gt;
*'''STATUS=83&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** A key was assigned an invalid value type.&lt;br /&gt;
*'''STATUS=92&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The request contained more than 65536 bytes.&lt;br /&gt;
*'''STATUS=93&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The request contained less than 10 bytes.&lt;br /&gt;
*'''STATUS=94&amp;amp;MESSAGE=This device isn't eligible for the requested build.'''&lt;br /&gt;
** The specified build is either unsigned or nonexistent.&lt;br /&gt;
*'''STATUS=98&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The XML/PList identification tag is missing, or the start of the tag is malformed.&lt;br /&gt;
*'''STATUS=100&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** The XML/PList version is nonexistent or not &amp;quot;1.0&amp;quot;, the end of the XML/PList identification tag is malformed, an unknown tag was found, a value tag contained an invalid type, an unescaped ampersand character was found, or a tag was found without its counterpart.&lt;br /&gt;
*'''STATUS=103&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
** Multiple '@' characters were found at the beginning of a key name.&lt;br /&gt;
*'''STATUS=128&amp;amp;MESSAGE=An internal error occurred.'''&lt;br /&gt;
*'''STATUS=511&amp;amp;MESSAGE=No data in the request'''&lt;br /&gt;
*'''STATUS=551&amp;amp;MESSAGE=Error occured while importing config packet with cpsn: '''&lt;br /&gt;
*'''STATUS=5000&amp;amp;MESSAGE=Invalid Option!'''&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
Interestingly, if all you're interested in is the ServerVersion (and a SUCCESS response), sending any one valid Ap-prefixed key will do, like so:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;plist&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;ApSecurityDomain&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
In regards to fuzzing and malformed data, the server (as of 2.1.0, at least) seems to have no bounds checking for the ApNonce, or even checking to see if the ApNonce exists. Because the APTicket changes even when specifying an invalid-sized nonce, it is assumed nonces too short are padded, while nonces too large are ignored past the 16th character.&lt;br /&gt;
&lt;br /&gt;
===Other parameters / open questions===&lt;br /&gt;
Some parameters could have other values. Not all details are known.&lt;br /&gt;
*action=2 in the request. What other values exist and what is their meaning?&lt;br /&gt;
*ApSecurityDomain Meaning? (Related to [[SDOM]] tag)&lt;br /&gt;
*Trusted What is this for?&lt;br /&gt;
*Full description of the above values for UniqueBuildID, Digest, PartialDigest and BuildString.&lt;br /&gt;
&lt;br /&gt;
===PartialDigest===&lt;br /&gt;
The PartialDigest is structured like so:&lt;br /&gt;
&lt;br /&gt;
 typedef struct PartialDigest {&lt;br /&gt;
     uint32_t transformSize;     // Always 0x40.&lt;br /&gt;
     uint32_t img3DataSize;      // data size of the img3.&lt;br /&gt;
     uint8_t hash[SHA1HashSize];  // Result of SHA1ResultPartial from the stripped img3.&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
The img3 is first stripped of it's code signature (if present) and then passed through SHA1Update. SHA1ResultPartial is then performed. It is purposely not the final resulting SHA1. The reason for this being, when TSS processes the PartialDigest, it performs one more SHA1Update on the hash to include the [[ECID]] before doing SHA1Final and creating the SHSH blob.&lt;br /&gt;
&lt;br /&gt;
Code for SHA1ResultPartial:&lt;br /&gt;
 int SHA1ResultPartial(SHA1Context* ctx, unsigned char* buf) {&lt;br /&gt;
 	// Do we have valid buffer and context pointers?&lt;br /&gt;
 	if(ctx &amp;amp;&amp;amp; buf) {&lt;br /&gt;
 		// Is the Context in good shape?&lt;br /&gt;
 		if(!ctx-&amp;gt;Corrupted &amp;amp;&amp;amp; !ctx-&amp;gt;Computed &amp;amp;&amp;amp; !ctx-&amp;gt;Message_Block_Index) {&lt;br /&gt;
 			for(int i = 0; i &amp;lt; SHA1HashSize; i++) {&lt;br /&gt;
 				buf[i] = ctx-&amp;gt;Intermediate_Hash[i &amp;gt;&amp;gt; 2] &amp;gt;&amp;gt; 8 * (3 - (i &amp;amp; 0x3));&lt;br /&gt;
 			}&lt;br /&gt;
 			return 0;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	return 1;&lt;br /&gt;
 }&lt;br /&gt;
Code for tss_strip_img3_signature:&lt;br /&gt;
 int tss_strip_img3_signature(img3Header* img3, int* len) {&lt;br /&gt;
 	// Do we have a non-null ptr?&lt;br /&gt;
 	if(!img3) {&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Does the buffer start with the img3 magic?&lt;br /&gt;
 	if(img3-&amp;gt;magic != IMG3_MAGIC) {&lt;br /&gt;
 		printf(&amp;quot;tss_strip_img3_signature: bad magic 0x%08x expecting 0x%08x\n&amp;quot;, img3-&amp;gt;magic, IMG3_MAGIC);&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Sanity checks&lt;br /&gt;
 	if(img3-&amp;gt;shshOffset &amp;gt; img3-&amp;gt;dataSize) {&lt;br /&gt;
 		printf(&amp;quot;tss_strip_img3_signature: signed length %u too large for buffer length %u\n&amp;quot;, img3-&amp;gt;shshOffset, img3-&amp;gt;dataSize);&lt;br /&gt;
 		return 10004;&lt;br /&gt;
 	}&lt;br /&gt;
 	// Trim the image by adjusting the header.&lt;br /&gt;
 	if(img3-&amp;gt;shshOffset) {&lt;br /&gt;
 		*len += img3-&amp;gt;shshOffset - img3-&amp;gt;dataSize;&lt;br /&gt;
 		img3-&amp;gt;dataSize = img3-&amp;gt;shshOffset;&lt;br /&gt;
 		img3-&amp;gt;fullSize = *len;&lt;br /&gt;
 	}&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Digest===&lt;br /&gt;
Digest is the SHA1 of the stripped img3. They are used instead of PartialDigests for the APTicket since the ticket is already personalized for the ECID and all other tags.&lt;br /&gt;
&lt;br /&gt;
[[Category:Firmware Tags]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=NonUI_builds&amp;diff=77262</id>
		<title>NonUI builds</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=NonUI_builds&amp;diff=77262"/>
		<updated>2019-11-07T20:29:22Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Removed Baseband versions from iPod Touches&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{internal software}}&lt;br /&gt;
{{see also|Beta Firmware|Internal OTA Updates}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;toclimit-3&amp;quot;&amp;gt;{{float toc|left}}&amp;lt;/div&amp;gt;&lt;br /&gt;
This is a documented list of known '''factory firmwares''', used by Apple workers in California to do engineering tests on prototype devices and also by factory workers on production ones during manufacturing. Factory firmwares are based on production iOS ones, but adapted for internal engineering tests, development and debugging. &lt;br /&gt;
{{see also|Prototypes}}&lt;br /&gt;
{{clear}}&lt;br /&gt;
[[File:newsblogo.png|thumb|130px|right|&amp;quot;Skankwerk&amp;quot; logo on 7.x and up]]&lt;br /&gt;
[[File:oldswblogo.png|thumb|130px|left|&amp;quot;Skankwerk&amp;quot; logo on 6.x and below]]&lt;br /&gt;
[[File:newswblogo.jpg|thumb|130px|right|Prototype showing newer Skankwerk logo during boot]]&lt;br /&gt;
[[File:oldswblogodevice.jpg|thumb|130px|left|Prototype showing older Skankwerk logo during boot]]&lt;br /&gt;
They are also known as &amp;quot;NonUI (No User Interface)&amp;quot; builds, probably because most applications are command line ones. The SpringBoard replacement, named SwitchBoard, allows the launching of a GUI for some of those applications. Unlike production iOS firmwares, factory ones have the following differences:&lt;br /&gt;
* DEVELOPMENT/DEBUG fused bootloaders in &amp;lt;code&amp;gt;\Firmware\dfu\&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;\Firmware\all_flash\all_flash.[board codename].factoryfa\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEVELOPMENT/DEBUG fused [[kernelcache]] with more symbols (located in &amp;lt;code&amp;gt;/System/Library/Caches/com.apple.kernelcaches&amp;lt;/code&amp;gt; on the filesystem), and with individual kexts in &amp;lt;code&amp;gt;/System/Library/Extensions&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEVELOPMENT dyld_shared_cache in &amp;lt;code&amp;gt;/System/Library/Caches/com.apple.dyld&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEBUG fused baseband firmware in &amp;lt;code&amp;gt;\Firmware\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Skankwerk (gear) logo image file in &amp;lt;code&amp;gt;\Firmware\all_flash\all_flash.[board codename].factoryfa\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;/AppleInternal&amp;lt;/code&amp;gt; folder, which the hierarchy inside get priority over hierarchy in &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
* No SpringBoard, requires the use of daemons to launch [[SwitchBoard.app]] as a multi-app launcher instead.&lt;br /&gt;
* &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; and subfolders contain many UNIX command line utilities.&lt;br /&gt;
* SSH daemon is pre-installed as dropbear, can be connected to over usb&lt;br /&gt;
* Boot loader passes arguments to kernel (unlike RELEASE boot loaders as of iOS 5.0) which makes it easy to disable [[AMFI]]&lt;br /&gt;
* It has some additional Private Frameworks in &amp;lt;code&amp;gt;/System/Library/PrivateFrameworks&amp;lt;/code&amp;gt; for internal GUI apps and command line utilities.&lt;br /&gt;
* Most [[Apple Internal Apps|internal applications]] require the use of SkankKit (replacement for UIKit in nonUI firmwares) to produce special layers such as text on the framebuffer.&lt;br /&gt;
Unlike regular iOS Firmwares, factory ones are distributed in both IPSWs and &amp;quot;restore bundles&amp;quot;. These bundles are unzipped IPSW files which can be restored on devices using internal restore software such as [[PurpleRestore]]. Release and factory firmware &amp;quot;restore bundles&amp;quot; have the same packaging structure (bootloaders, kernel, restore ramdisk, update ramdisk and root filesystem).&lt;br /&gt;
{{clear}}&lt;br /&gt;
= Some interesting facts about factory firmwares =&lt;br /&gt;
* '''Design:''' Apple seems to use the same GUI design from the production firmware to the factory one. &lt;br /&gt;
Production iOS 1.x to 6.x skeuomorphism design is also present on 1.x to 6.x factory firmwares, but seems really more excessive than production ones. For example, the  &amp;quot;skankwerk&amp;quot; boot logo represents a real gear and many GUI icons are realistic or simply photos of real life things (especially in [[Operator]]). For newer versions, production iOS 7.x to 9.x flat design is mostly used in 7.x to 9.x factory firmwares. For example, the new &amp;quot;skankwerk&amp;quot; boot logo is a flat, simple white gear. Some newer internal applications like Earthbound also use a &amp;quot;flat&amp;quot; design.&lt;br /&gt;
* '''Other:''' The &amp;quot;skank&amp;quot; word is used to name multiple elements of factory firmwares. For example, there is &amp;quot;skankphone&amp;quot;, &amp;quot;skankbattery&amp;quot; (the green battery shown in SwitchBoard), &amp;quot;skankwerk&amp;quot; logo, &amp;quot;skankkit&amp;quot; framework, &amp;quot;purpleskank&amp;quot; (used by BurnIn) and most likely others. The &amp;quot;skank&amp;quot; word seems to be a reference to &amp;quot;Skunkworks&amp;quot; projects, which are secrecy projects that are usually innovative. Read more about &amp;quot;Skunkworks&amp;quot; on  [https://en.wikipedia.org/wiki/Skunkworks_project Wikipedia].&lt;br /&gt;
== [[M68AP|iPhone]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 1.0&lt;br /&gt;
| [[Alpine 1A420|1A420]]&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | Alpine&lt;br /&gt;
| 03.06.01_G&amp;lt;sup&amp;gt;[http://web.archive.org/web/20110730023951/http://imageshack.us/photo/my-images/399/iphone2go0.jpg/]&amp;lt;/sup&amp;gt;&amp;lt;!-- http://img399.imageshack.us/i/iphone2go0.jpg/ --&amp;gt;&lt;br /&gt;
| Originally available [http://forums.macrumors.com/showpost.php?p=7249071&amp;amp;postcount=85 here], but was soon taken down.&lt;br /&gt;
|-&lt;br /&gt;
| [[Alpine 4A57|4A57]]&lt;br /&gt;
| 04.02.13_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | 1.1.2&lt;br /&gt;
| [[Alpine 3B48|3B48]]&lt;br /&gt;
| 04.02.13_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.3&lt;br /&gt;
| [[Alpine 4A102a|4A102a]]&lt;br /&gt;
| 04.04.05_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N82AP|iPhone 3G]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.0&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 05.12.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N88AP|iPhone 3GS]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 3.1b&lt;br /&gt;
| [[Sierra 7C108b|7C108b]]&lt;br /&gt;
| Sierra?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Northstar 7C144|7C144]]&lt;br /&gt;
| Northstar?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.0&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 05.12.01&lt;br /&gt;
| - &lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 05.16.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 05.16.06&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 4]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 4.0&lt;br /&gt;
| [[Apex 8A133|8A133]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Apex?&lt;br /&gt;
| 01.32.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Apex 8A2062a|8A2062a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 01.42.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 04.12.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 04.12.02&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N94AP|iPhone 4S]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 5.0&lt;br /&gt;
| [[HoodooYabuli 9A2264r|9A2264r]]&lt;br /&gt;
| HoodooYabuli?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 1.0.10&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 6.0&lt;br /&gt;
| [[SundanceNanshan 10A23941a|10A23941a]]&lt;br /&gt;
| SundanceNanshan&lt;br /&gt;
| 2.0.0.2&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceNanshan 10B63290m|10B63290m]]&lt;br /&gt;
| SundanceNanshan?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 5]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 6.0&lt;br /&gt;
| [[Sundance 10A23110z|10A23110z]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Sundance?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Sundance 10A23941s|10A23941s]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 1.7.00&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== [[iPhone 5c]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0&lt;br /&gt;
| [[Sochi 11A93840l|11A93840l]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Sochi?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 7.1&lt;br /&gt;
| [[Sochi 11D31620l|11D31620l]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 5s]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 7.0&lt;br /&gt;
| [[InnsbruckNanshan 11A24580o|11A24580o]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | InnsbruckNanshan&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[InnsbruckNanshan 11A24581c|11A24581c]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Innsbruck 11A93840f|11A93840f]]&lt;br /&gt;
| Innsbruck?&lt;br /&gt;
| ?&lt;br /&gt;
| Originally found on a [https://forums.macrumors.com/threads/unusual-iphone-possible-engineering-sample-os.1885755/ Macrumors] post.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N61AP|iPhone 6]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | 8.0&lt;br /&gt;
| [[Okemo 12A22121a|12A22121a]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Okemo?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Okemo 12A93311h|12A93311h]]&lt;br /&gt;
| 1.00.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93650o|12A93650o]]&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | OkemoAni&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| This build is pretty obscure, but it is in the wild.&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93650z|12A93650z]]&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/AppleInternalsh @AppleInternalsh] on Twitter.&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93651a|12A93651a]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93651b|12A93651b]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6 Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.0&lt;br /&gt;
| [[OkemoAni 12A22121a|12A22121a]]&lt;br /&gt;
| OkemoAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6s]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | 9.0&lt;br /&gt;
| [[Monarch 13A22120w|13A22120w]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchAni 13A93051l|13A93051l]]&lt;br /&gt;
| MonarchAni&lt;br /&gt;
| 0.37.08&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchAni 13A93051r|13A93051r]]&lt;br /&gt;
| MonarchAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A93420d|13A93420d]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A93420i|13A93420i]]&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/AppleInternalsh @AppleInternalsh] on Twitter.&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A93420m|13A93420m]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 10.0&lt;br /&gt;
| [[Whitetail 14A83432m|14A83432m]]&lt;br /&gt;
| Whitetail?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/OkemoZurs @OkemoZurs] on Twitter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6s Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 9.0&lt;br /&gt;
| [[Monarch 13A22120w|13A22120w]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchNanshan 13A23161b|13A23161b]]&lt;br /&gt;
| MonarchNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D10AP|iPhone 7]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | 10.0&lt;br /&gt;
| [[Whitetail 14A22580n|14A22580n]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Whitetail?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Whitetail 14A22881a|14A22881a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Whitetail 14A92340t|14A92340t]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A93012r|14A93012r]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | WhitetailAni&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A93013a|14A93013a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.1&lt;br /&gt;
| [[BigShot 14Z1062|14Z1062]]&lt;br /&gt;
| BigShot&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 7 Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 10.0&lt;br /&gt;
| [[WhitetailAni 14A22161a|14A22161a]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | WhitetailAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A22181a|14A22181a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D20AP|iPhone 8]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 11.0&lt;br /&gt;
| [[TigrisAni 15A93261h|15A93261h]]&lt;br /&gt;
| TigrisAni&lt;br /&gt;
| 00.34.09&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[TigrisAni 15A93720p|15A93720p]]&lt;br /&gt;
| TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/AppleInternalsh @AppleInternalsh] on Twitter.&lt;br /&gt;
|-&lt;br /&gt;
| [[TigrisAni 15A93720r|15A93720r]]&lt;br /&gt;
| TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 8 Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 11.0&lt;br /&gt;
| [[TigrisAni 15A93261l|15A93261l? (or f?)]]&lt;br /&gt;
| TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/1nsane_dev @1nsane_dev] on Twitter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D21AP|iPhone X]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 11.0&lt;br /&gt;
| [[TigrisAni 15A783601x|15A783601x]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[TigrisAni 15A783601y|15A783601y]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N841AP|iPhone XR]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 12.0&lt;br /&gt;
| [[Peace 16A13580z|16A13580z]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Peace?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Peace 16A73281c|16A73281c]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[K48AP|iPad]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 3.2&lt;br /&gt;
| [[Wildcat 7B3341e|7B3341e]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Wildcat?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Wildcat 7B5286a|7B5286a]]&lt;br /&gt;
| ?&lt;br /&gt;
| Found by SonnyDickson, documented on [https://9to5mac.com/2017/05/15/ipad-1-prototype/ 9to5mac]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[K93AP|iPad 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.3&lt;br /&gt;
| [[Durango 8F3178a|8F3178a]]&lt;br /&gt;
| Durango?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Durango 8F3191d|8F3191d]]&lt;br /&gt;
| Durango&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[IPad_(5th_generation)|iPad (5th generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 10.0?&lt;br /&gt;
| [[WhitetailAni 14E62210l|14E62210l]]&lt;br /&gt;
| WhitetailAni?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/AppleInternalsh @AppleInternalsh] on Twitter.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[P106AP|iPad mini]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 6.0&lt;br /&gt;
| [[SundanceTaosTianshan 10A63970m|10A63970m]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | SundanceTaosTianshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceTaosTianshan 10A63970v|10A63970v]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceTaosTianshan 10A63971b|10A63971b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J86AP|iPad mini 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.3&lt;br /&gt;
| [[InnsbruckTaos 11B64940j|11B64940j]]&lt;br /&gt;
| InnsbruckTaos?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 7.1&lt;br /&gt;
| [[Sochi 11D167|11D167]]&lt;br /&gt;
| Sochi?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J96AP|iPad mini 4]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.4&lt;br /&gt;
| [[Donner 12H60160o|12H60160o]]&lt;br /&gt;
| Donner?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 9.0&lt;br /&gt;
| [[Monarch 13A62950o|13A62950o]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A64520d|13A64520d]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/AppleInternalsh @AppleInternalsh] on Twitter.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J71AP|iPad Air]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.1&lt;br /&gt;
| [[Innsbruck 11B34640l|11B34640l]]&lt;br /&gt;
| Innsbruck?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J72AP|iPad Air 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 10.0?&lt;br /&gt;
| [[WhitetailAni 14F60900i|14F60900i]]&lt;br /&gt;
| WhitetailAni?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/AppleInternalsh @AppleInternalsh] on Twitter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N18AP|iPod touch (3rd generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 3.1&lt;br /&gt;
| [[Inferno 7C1023e|7C1023e]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Inferno?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Inferno 7C1095a|7C1095a]]&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Northstar 7C144|7C144]]&lt;br /&gt;
| Northstar?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N81AP|iPod touch (4th generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N102AP|iPod touch (6th generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 8.3&lt;br /&gt;
| [[Okemo 12H1150f|12H1150f]]&lt;br /&gt;
| Okemo?&lt;br /&gt;
| From [https://twitter.com/OkemoZurs @OkemoZurs] on Twitter.&lt;br /&gt;
|-&lt;br /&gt;
| [[Okemo 12H10570d|12H10570d]]&lt;br /&gt;
| Okemo?&lt;br /&gt;
| From [https://twitter.com/1nsane_dev @1nsane_dev] on Twitter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Firmware]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Talk:NonUI_builds&amp;diff=77261</id>
		<title>Talk:NonUI builds</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Talk:NonUI_builds&amp;diff=77261"/>
		<updated>2019-11-07T20:16:53Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: /* Device/Model Organization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Thank you for modifying my page! I agree, my markdown hurt my brain too :P&lt;br /&gt;
&lt;br /&gt;
But I must ask: we should add a line about illegally downloaded firmwares. From elsewhere in the wiki (I think the Apple Internal Apps talk page) geohot mentions that it must be legally acquired (e.g not stolen). Where should we add about that? --[[User:Awesomebing1|Awesomebing1]] ([[User talk:Awesomebing1|talk]]) 01:53, 13 March 2015 (UTC)&lt;br /&gt;
:I had to edit the part about Inferno prototype firmware for the iPhone 5, iPad Mini 2, and iPhone 6, these devices run the Factory SwitchBoard Prototype Firmware that just happens to run Inferno and other diagnostic utility's within SwitchBoard &lt;br /&gt;
--[[User:EverythingApplesPro|EverythingApplesPro]] ([[User talk:EverythingApplesPro|talk]]) 02:02, 13 March 2015 (UTC)&lt;br /&gt;
::Sure, and thank you! The other devices are running SwitchBoard too, so I'll add about that.--[[User:Awesomebing1|Awesomebing1]] ([[User talk:Awesomebing1|talk]]) 02:43, 13 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Move page ==&lt;br /&gt;
&lt;br /&gt;
I request to add a &amp;quot;s&amp;quot; to Firmware, making it Firmwares. It won't hurt anything if this move is rejected, but there are more than one firmware on the page. --[[User:Awesomebing1|Awesomebing1]] ([[User talk:Awesomebing1|talk]]) 03:48, 13 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I did not add a &amp;quot;s&amp;quot; to &amp;quot;Firmware&amp;quot;, because [[Firmware]] and [[Beta Firmware]] actually don't have a &amp;quot;s&amp;quot;. Unless we are talking about &amp;quot;The&amp;quot; Firmware, I agree that add a &amp;quot;s&amp;quot; is a good idea if there are more than one firmware on those pages. --[[User:ShadowLee19|ShadowLee19]] ([[User talk:ShadowLee19|talk]])&lt;br /&gt;
:: Good point. I think we'd better leave this page's name alone for a while. --[[User:Awesomebing1|Awesomebing1]] ([[User talk:Awesomebing1|talk]]) 18:11, 20 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Build numbers and internal codenames ==&lt;br /&gt;
&lt;br /&gt;
It is okay and safe from troubles to add build numbers and codenames of internal factory firmwares on the dedicated page ? {{unsigned|ShadowLee19|18:52, July 22, 2015 (UTC)}}&lt;br /&gt;
&lt;br /&gt;
== Verification ==&lt;br /&gt;
A user that contacted me is concerned about the legitimacy of information on this page. &amp;quot;I saw someone's forum post say it&amp;quot; isn't enough, as anyone can make up a build number. If I can pull a fake build name/number like &amp;quot;TigrisKendall 15A25308t&amp;quot; out of thin air, anyone else can too. Although they can be faked as well, screenshots/pictures or videos would certainly help. But going forward, we need a way to ensure that the information on this page is legitimate. I think we should require some evidence be provided that the build actually exists, and it's not made up. But how much evidence should we ask for? How much evidence would suffice for this? --[[User:Dialexio|Dialexio]] ([[User talk:Dialexio|talk]]) 16:39, 8 September 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Device/Model Organization ==&lt;br /&gt;
&lt;br /&gt;
I'm going to begin organizing devices by their model identifier (eg. iPhone3,1). Devices that do not have multiple identifiers will maintain their product name. This is being done to provide more information about compatible models for Switchboard builds and to maintain consistency with [[Carrier Firmware]]. If anyone has a reason to object, please place it here.&lt;br /&gt;
--[[User:Wxblank|wxblank]] ([[User talk:Wxblank|talk]]) 20:16, 7 November 2019 (UTC)&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Talk:NonUI_builds&amp;diff=77260</id>
		<title>Talk:NonUI builds</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Talk:NonUI_builds&amp;diff=77260"/>
		<updated>2019-11-07T20:16:17Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: /* Device/Model Organization */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Thank you for modifying my page! I agree, my markdown hurt my brain too :P&lt;br /&gt;
&lt;br /&gt;
But I must ask: we should add a line about illegally downloaded firmwares. From elsewhere in the wiki (I think the Apple Internal Apps talk page) geohot mentions that it must be legally acquired (e.g not stolen). Where should we add about that? --[[User:Awesomebing1|Awesomebing1]] ([[User talk:Awesomebing1|talk]]) 01:53, 13 March 2015 (UTC)&lt;br /&gt;
:I had to edit the part about Inferno prototype firmware for the iPhone 5, iPad Mini 2, and iPhone 6, these devices run the Factory SwitchBoard Prototype Firmware that just happens to run Inferno and other diagnostic utility's within SwitchBoard &lt;br /&gt;
--[[User:EverythingApplesPro|EverythingApplesPro]] ([[User talk:EverythingApplesPro|talk]]) 02:02, 13 March 2015 (UTC)&lt;br /&gt;
::Sure, and thank you! The other devices are running SwitchBoard too, so I'll add about that.--[[User:Awesomebing1|Awesomebing1]] ([[User talk:Awesomebing1|talk]]) 02:43, 13 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Move page ==&lt;br /&gt;
&lt;br /&gt;
I request to add a &amp;quot;s&amp;quot; to Firmware, making it Firmwares. It won't hurt anything if this move is rejected, but there are more than one firmware on the page. --[[User:Awesomebing1|Awesomebing1]] ([[User talk:Awesomebing1|talk]]) 03:48, 13 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I did not add a &amp;quot;s&amp;quot; to &amp;quot;Firmware&amp;quot;, because [[Firmware]] and [[Beta Firmware]] actually don't have a &amp;quot;s&amp;quot;. Unless we are talking about &amp;quot;The&amp;quot; Firmware, I agree that add a &amp;quot;s&amp;quot; is a good idea if there are more than one firmware on those pages. --[[User:ShadowLee19|ShadowLee19]] ([[User talk:ShadowLee19|talk]])&lt;br /&gt;
:: Good point. I think we'd better leave this page's name alone for a while. --[[User:Awesomebing1|Awesomebing1]] ([[User talk:Awesomebing1|talk]]) 18:11, 20 July 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Build numbers and internal codenames ==&lt;br /&gt;
&lt;br /&gt;
It is okay and safe from troubles to add build numbers and codenames of internal factory firmwares on the dedicated page ? {{unsigned|ShadowLee19|18:52, July 22, 2015 (UTC)}}&lt;br /&gt;
&lt;br /&gt;
== Verification ==&lt;br /&gt;
A user that contacted me is concerned about the legitimacy of information on this page. &amp;quot;I saw someone's forum post say it&amp;quot; isn't enough, as anyone can make up a build number. If I can pull a fake build name/number like &amp;quot;TigrisKendall 15A25308t&amp;quot; out of thin air, anyone else can too. Although they can be faked as well, screenshots/pictures or videos would certainly help. But going forward, we need a way to ensure that the information on this page is legitimate. I think we should require some evidence be provided that the build actually exists, and it's not made up. But how much evidence should we ask for? How much evidence would suffice for this? --[[User:Dialexio|Dialexio]] ([[User talk:Dialexio|talk]]) 16:39, 8 September 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Device/Model Organization ==&lt;br /&gt;
&lt;br /&gt;
I'm going to begin organizing devices by their model identifier (eg. iPhone3,1). Devices that do not have multiple identifiers will maintain their product name. This is being done to provide more information about compatible models for Switchboard builds and to maintain consistency with [[Carrier Firmware]]. If anyone has a reason to object, please place it here.&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=NonUI_builds&amp;diff=77068</id>
		<title>NonUI builds</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=NonUI_builds&amp;diff=77068"/>
		<updated>2019-10-24T23:42:13Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{internal software}}&lt;br /&gt;
{{see also|Beta Firmware|Internal OTA Updates}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;toclimit-3&amp;quot;&amp;gt;{{float toc|left}}&amp;lt;/div&amp;gt;&lt;br /&gt;
This is a documented list of known '''factory firmwares''', used by Apple workers in California to do engineering tests on prototype devices and also by factory workers on production ones during manufacturing. Factory firmwares are based on production iOS ones, but adapted for internal engineering tests, development and debugging. &lt;br /&gt;
{{see also|Prototypes}}&lt;br /&gt;
{{clear}}&lt;br /&gt;
[[File:newsblogo.png|thumb|130px|right|&amp;quot;Skankwerk&amp;quot; logo on 7.x and up]]&lt;br /&gt;
[[File:oldswblogo.png|thumb|130px|left|&amp;quot;Skankwerk&amp;quot; logo on 6.x and below]]&lt;br /&gt;
[[File:newswblogo.jpg|thumb|130px|right|Prototype showing newer Skankwerk logo during boot]]&lt;br /&gt;
[[File:oldswblogodevice.jpg|thumb|130px|left|Prototype showing older Skankwerk logo during boot]]&lt;br /&gt;
They are also known as &amp;quot;NonUI (No User Interface)&amp;quot; builds, probably because most applications are command line ones. The SpringBoard replacement, named SwitchBoard, allows the launching of a GUI for some of those applications. Unlike production iOS firmwares, factory ones have the following differences:&lt;br /&gt;
* DEVELOPMENT/DEBUG fused bootloaders in &amp;lt;code&amp;gt;\Firmware\dfu\&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;\Firmware\all_flash\all_flash.[board codename].factoryfa\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEVELOPMENT/DEBUG fused [[kernelcache]] with more symbols (located in &amp;lt;code&amp;gt;/System/Library/Caches/com.apple.kernelcaches&amp;lt;/code&amp;gt; on the filesystem), and with individual kexts in &amp;lt;code&amp;gt;/System/Library/Extensions&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEVELOPMENT dyld_shared_cache in &amp;lt;code&amp;gt;/System/Library/Caches/com.apple.dyld&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEBUG fused baseband firmware in &amp;lt;code&amp;gt;\Firmware\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Skankwerk (gear) logo image file in &amp;lt;code&amp;gt;\Firmware\all_flash\all_flash.[board codename].factoryfa\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;/AppleInternal&amp;lt;/code&amp;gt; folder, which the hierarchy inside get priority over hierarchy in &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
* No SpringBoard, requires the use of daemons to launch [[SwitchBoard.app]] as a multi-app launcher instead.&lt;br /&gt;
* &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; and subfolders contain many UNIX command line utilities.&lt;br /&gt;
* SSH daemon is pre-installed as dropbear, can be connected to over usb&lt;br /&gt;
* Boot loader passes arguments to kernel (unlike RELEASE boot loaders as of iOS 5.0) which makes it easy to disable [[AMFI]]&lt;br /&gt;
* It has some additional Private Frameworks in &amp;lt;code&amp;gt;/System/Library/PrivateFrameworks&amp;lt;/code&amp;gt; for internal GUI apps and command line utilities.&lt;br /&gt;
* Most [[Apple Internal Apps|internal applications]] require the use of SkankKit (replacement for UIKit in nonUI firmwares) to produce special layers such as text on the framebuffer.&lt;br /&gt;
Unlike regular iOS Firmwares, factory ones are distributed in both IPSWs and &amp;quot;restore bundles&amp;quot;. These bundles are unzipped IPSW files which can be restored on devices using internal restore software such as [[PurpleRestore]]. Release and factory firmware &amp;quot;restore bundles&amp;quot; have the same packaging structure (bootloaders, kernel, restore ramdisk, update ramdisk and root filesystem).&lt;br /&gt;
{{clear}}&lt;br /&gt;
= Some interesting facts about factory firmwares =&lt;br /&gt;
* '''Design:''' Apple seems to use the same GUI design from the production firmware to the factory one. &lt;br /&gt;
Production iOS 1.x to 6.x skeuomorphism design is also present on 1.x to 6.x factory firmwares, but seems really more excessive than production ones. For example, the  &amp;quot;skankwerk&amp;quot; boot logo represents a real gear and many GUI icons are realistic or simply photos of real life things (especially in [[Operator]]). For newer versions, production iOS 7.x to 9.x flat design is mostly used in 7.x to 9.x factory firmwares. For example, the new &amp;quot;skankwerk&amp;quot; boot logo is a flat, simple white gear. Some newer internal applications like Earthbound also use a &amp;quot;flat&amp;quot; design.&lt;br /&gt;
* '''Other:''' The &amp;quot;skank&amp;quot; word is used to name multiple elements of factory firmwares. For example, there is &amp;quot;skankphone&amp;quot;, &amp;quot;skankbattery&amp;quot; (the green battery shown in SwitchBoard), &amp;quot;skankwerk&amp;quot; logo, &amp;quot;skankkit&amp;quot; framework, &amp;quot;purpleskank&amp;quot; (used by BurnIn) and most likely others. The &amp;quot;skank&amp;quot; word seems to be a reference to &amp;quot;Skunkworks&amp;quot; projects, which are secrecy projects that are usually innovative. Read more about &amp;quot;Skunkworks&amp;quot; on  [https://en.wikipedia.org/wiki/Skunkworks_project Wikipedia].&lt;br /&gt;
== [[M68AP|iPhone]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 1.0&lt;br /&gt;
| [[Alpine 1A420|1A420]]&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | Alpine&lt;br /&gt;
| 03.06.01_G&amp;lt;sup&amp;gt;[http://web.archive.org/web/20110730023951/http://imageshack.us/photo/my-images/399/iphone2go0.jpg/]&amp;lt;/sup&amp;gt;&amp;lt;!-- http://img399.imageshack.us/i/iphone2go0.jpg/ --&amp;gt;&lt;br /&gt;
| Originally available [http://forums.macrumors.com/showpost.php?p=7249071&amp;amp;postcount=85 here], but was soon taken down.&lt;br /&gt;
|-&lt;br /&gt;
| [[Alpine 4A57|4A57]]&lt;br /&gt;
| 04.02.13_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | 1.1.2&lt;br /&gt;
| [[Alpine 3B48|3B48]]&lt;br /&gt;
| 04.02.13_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.3&lt;br /&gt;
| [[Alpine 4A102a|4A102a]]&lt;br /&gt;
| 04.04.05_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N82AP|iPhone 3G]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.0&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 05.12.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N88AP|iPhone 3GS]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 3.1b&lt;br /&gt;
| [[Sierra 7C108b|7C108b]]&lt;br /&gt;
| Sierra?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Northstar 7C144|7C144]]&lt;br /&gt;
| Northstar?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.0&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 05.12.01&lt;br /&gt;
| - &lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 05.16.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 05.16.06&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 4]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 4.0&lt;br /&gt;
| [[Apex 8A133|8A133]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Apex?&lt;br /&gt;
| 01.32.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Apex 8A2062a|8A2062a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 01.42.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 04.12.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 04.12.02&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N94AP|iPhone 4S]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 5.0&lt;br /&gt;
| [[HoodooYabuli 9A2264r|9A2264r]]&lt;br /&gt;
| HoodooYabuli?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 1.0.10&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 6.0&lt;br /&gt;
| [[SundanceNanshan 10A23941a|10A23941a]]&lt;br /&gt;
| SundanceNanshan&lt;br /&gt;
| 2.0.0.2&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceNanshan 10B63290m|10B63290m]]&lt;br /&gt;
| SundanceNanshan?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 5]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 6.0&lt;br /&gt;
| [[Sundance 10A23110z|10A23110z]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Sundance?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Sundance 10A23941s|10A23941s]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 1.7.00&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== [[iPhone 5c]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0&lt;br /&gt;
| [[Sochi 11A93840l|11A93840l]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Sochi?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 7.1&lt;br /&gt;
| [[Sochi 11D31620l|11D31620l]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 5s]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 7.0&lt;br /&gt;
| [[InnsbruckNanshan 11A24580o|11A24580o]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | InnsbruckNanshan&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[InnsbruckNanshan 11A24581c|11A24581c]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Innsbruck 11A93840f|11A93840f]]&lt;br /&gt;
| Innsbruck?&lt;br /&gt;
| ?&lt;br /&gt;
| Originally found on a [https://forums.macrumors.com/threads/unusual-iphone-possible-engineering-sample-os.1885755/ Macrumors] post.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N61AP|iPhone 6]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | 8.0&lt;br /&gt;
| [[Okemo 12A22121a|12A22121a]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Okemo?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Okemo 12A93311h|12A93311h]]&lt;br /&gt;
| 1.00.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93650o|12A93650o]]&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | OkemoAni&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| This build is pretty obscure, but it is in the wild.&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93650z|12A93650z]]&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/AppleInternalsh @AppleInternalsh] on Twitter.&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93651a|12A93651a]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93651b|12A93651b]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6 Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.0&lt;br /&gt;
| [[OkemoAni 12A22121a|12A22121a]]&lt;br /&gt;
| OkemoAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6s]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | 9.0&lt;br /&gt;
| [[Monarch 13A22120w|13A22120w]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchAni 13A93051l|13A93051l]]&lt;br /&gt;
| MonarchAni&lt;br /&gt;
| 0.37.08&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchAni 13A93051r|13A93051r]]&lt;br /&gt;
| MonarchAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A93420d|13A93420d]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A93420i|13A93420i]]&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/AppleInternalsh @AppleInternalsh] on Twitter.&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A93420m|13A93420m]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 10.0&lt;br /&gt;
| [[Whitetail 14A83432m|14A83432m]]&lt;br /&gt;
| Whitetail?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/OkemoZurs @OkemoZurs] on Twitter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6s Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 9.0&lt;br /&gt;
| [[Monarch 13A22120w|13A22120w]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchNanshan 13A23161b|13A23161b]]&lt;br /&gt;
| MonarchNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D10AP|iPhone 7]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | 10.0&lt;br /&gt;
| [[Whitetail 14A22580n|14A22580n]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Whitetail?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Whitetail 14A22881a|14A22881a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Whitetail 14A92340t|14A92340t]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A93012r|14A93012r]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | WhitetailAni&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A93013a|14A93013a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.1&lt;br /&gt;
| [[BigShot 14Z1062|14Z1062]]&lt;br /&gt;
| BigShot&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 7 Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 10.0&lt;br /&gt;
| [[WhitetailAni 14A22161a|14A22161a]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | WhitetailAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A22181a|14A22181a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D20AP|iPhone 8]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 11.0&lt;br /&gt;
| [[TigrisAni 15A93261h|15A93261h]]&lt;br /&gt;
| TigrisAni&lt;br /&gt;
| 00.34.09&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[TigrisAni 15A93720p|15A93720p]]&lt;br /&gt;
| TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/AppleInternalsh @AppleInternalsh] on Twitter.&lt;br /&gt;
|-&lt;br /&gt;
| [[TigrisAni 15A93720r|15A93720r]]&lt;br /&gt;
| TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 8 Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 11.0&lt;br /&gt;
| [[TigrisAni 15A93261l|15A93261l? (or f?)]]&lt;br /&gt;
| TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/1nsane_dev @1nsane_dev] on Twitter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D21AP|iPhone X]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 11.0&lt;br /&gt;
| [[TigrisAni 15A783601x|15A783601x]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[TigrisAni 15A783601y|15A783601y]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N841AP|iPhone XR]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 12.0&lt;br /&gt;
| [[Peace 16A13580z|16A13580z]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Peace?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Peace 16A73281c|16A73281c]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[K48AP|iPad]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 3.2&lt;br /&gt;
| [[Wildcat 7B3341e|7B3341e]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Wildcat?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Wildcat 7B5286a|7B5286a]]&lt;br /&gt;
| ?&lt;br /&gt;
| Found by SonnyDickson, documented on [https://9to5mac.com/2017/05/15/ipad-1-prototype/ 9to5mac]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[K93AP|iPad 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.3&lt;br /&gt;
| [[Durango 8F3178a|8F3178a]]&lt;br /&gt;
| Durango?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Durango 8F3191d|8F3191d]]&lt;br /&gt;
| Durango&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[IPad_(5th_generation)|iPad (5th generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 10.0?&lt;br /&gt;
| [[WhitetailAni 14E62210l|14E62210l]]&lt;br /&gt;
| WhitetailAni?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/AppleInternalsh @AppleInternalsh] on Twitter.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[P106AP|iPad mini]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 6.0&lt;br /&gt;
| [[SundanceTaosTianshan 10A63970m|10A63970m]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | SundanceTaosTianshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceTaosTianshan 10A63970v|10A63970v]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceTaosTianshan 10A63971b|10A63971b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J86AP|iPad mini 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.3&lt;br /&gt;
| [[InnsbruckTaos 11B64940j|11B64940j]]&lt;br /&gt;
| InnsbruckTaos?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 7.1&lt;br /&gt;
| [[Sochi 11D167|11D167]]&lt;br /&gt;
| Sochi?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J96AP|iPad mini 4]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.4&lt;br /&gt;
| [[Donner 12H60160o|12H60160o]]&lt;br /&gt;
| Donner?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 9.0&lt;br /&gt;
| [[Monarch 13A62950o|13A62950o]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A64520d|13A64520d]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/AppleInternalsh @AppleInternalsh] on Twitter.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J71AP|iPad Air]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.1&lt;br /&gt;
| [[Innsbruck 11B34640l|11B34640l]]&lt;br /&gt;
| Innsbruck?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J72AP|iPad Air 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 10.0?&lt;br /&gt;
| [[WhitetailAni 14F60900i|14F60900i]]&lt;br /&gt;
| WhitetailAni?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/AppleInternalsh @AppleInternalsh] on Twitter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N18AP|iPod touch (3rd generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 3.1&lt;br /&gt;
| [[Inferno 7C1023e|7C1023e]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Inferno?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Inferno 7C1095a|7C1095a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Northstar 7C144|7C144]]&lt;br /&gt;
| Northstar?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N81AP|iPod touch (4th generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N102AP|iPod touch (6th generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 8.3&lt;br /&gt;
| [[Okemo 12H1150f|12H1150f]]&lt;br /&gt;
| Okemo?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/OkemoZurs @OkemoZurs] on Twitter.&lt;br /&gt;
|-&lt;br /&gt;
| [[Okemo 12H10570d|12H10570d]]&lt;br /&gt;
| Okemo?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/1nsane_dev @1nsane_dev] on Twitter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Firmware]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=NonUI_builds&amp;diff=76440</id>
		<title>NonUI builds</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=NonUI_builds&amp;diff=76440"/>
		<updated>2019-09-10T23:00:42Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{internal software}}&lt;br /&gt;
{{see also|Beta Firmware|Internal OTA Updates}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;toclimit-3&amp;quot;&amp;gt;{{float toc|left}}&amp;lt;/div&amp;gt;&lt;br /&gt;
This is a documented list of known '''factory firmwares''', used by Apple workers in California to do engineering tests on prototype devices and also by factory workers on production ones during manufacturing. Factory firmwares are based on production iOS ones, but adapted for internal engineering tests, development and debugging. &lt;br /&gt;
{{see also|Prototypes}}&lt;br /&gt;
{{clear}}&lt;br /&gt;
[[File:newsblogo.png|thumb|130px|right|&amp;quot;Skankwerk&amp;quot; logo on 7.x and up]]&lt;br /&gt;
[[File:oldswblogo.png|thumb|130px|left|&amp;quot;Skankwerk&amp;quot; logo on 6.x and below]]&lt;br /&gt;
[[File:newswblogo.jpg|thumb|130px|right|Prototype showing newer Skankwerk logo during boot]]&lt;br /&gt;
[[File:oldswblogodevice.jpg|thumb|130px|left|Prototype showing older Skankwerk logo during boot]]&lt;br /&gt;
They are also known as &amp;quot;NonUI (No User Interface)&amp;quot; builds, probably because most applications are command line ones. The SpringBoard replacement, named SwitchBoard, allows the launching of a GUI for some of those applications. Unlike production iOS firmwares, factory ones have the following differences:&lt;br /&gt;
* DEVELOPMENT/DEBUG fused bootloaders in &amp;lt;code&amp;gt;\Firmware\dfu\&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;\Firmware\all_flash\all_flash.[board codename].factoryfa\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEVELOPMENT/DEBUG fused [[kernelcache]] with more symbols (located in &amp;lt;code&amp;gt;/System/Library/Caches/com.apple.kernelcaches&amp;lt;/code&amp;gt; on the filesystem), and with individual kexts in &amp;lt;code&amp;gt;/System/Library/Extensions&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEVELOPMENT dyld_shared_cache in &amp;lt;code&amp;gt;/System/Library/Caches/com.apple.dyld&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEBUG fused baseband firmware in &amp;lt;code&amp;gt;\Firmware\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Skankwerk (gear) logo image file in &amp;lt;code&amp;gt;\Firmware\all_flash\all_flash.[board codename].factoryfa\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;/AppleInternal&amp;lt;/code&amp;gt; folder, which the hierarchy inside get priority over hierarchy in &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
* No SpringBoard, requires the use of daemons to launch [[SwitchBoard.app]] as a multi-app launcher instead.&lt;br /&gt;
* &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; and subfolders contain many UNIX command line utilities.&lt;br /&gt;
* SSH daemon is pre-installed as dropbear, can be connected to over usb&lt;br /&gt;
* Boot loader passes arguments to kernel (unlike RELEASE boot loaders as of iOS 5.0) which makes it easy to disable [[AMFI]]&lt;br /&gt;
* It has some additional Private Frameworks in &amp;lt;code&amp;gt;/System/Library/PrivateFrameworks&amp;lt;/code&amp;gt; for internal GUI apps and command line utilities.&lt;br /&gt;
* Most [[Apple Internal Apps|internal applications]] require the use of SkankKit (replacement for UIKit in nonUI firmwares) to produce special layers such as text on the framebuffer.&lt;br /&gt;
Unlike regular iOS Firmwares, factory ones are distributed in both IPSWs and &amp;quot;restore bundles&amp;quot;. These bundles are unzipped IPSW files which can be restored on devices using internal restore software such as [[PurpleRestore]]. Release and factory firmware &amp;quot;restore bundles&amp;quot; have the same packaging structure (bootloaders, kernel, restore ramdisk, update ramdisk and root filesystem).&lt;br /&gt;
{{clear}}&lt;br /&gt;
= Some interesting facts about factory firmwares =&lt;br /&gt;
* '''Design:''' Apple seems to use the same GUI design from the production firmware to the factory one. &lt;br /&gt;
Production iOS 1.x to 6.x skeuomorphism design is also present on 1.x to 6.x factory firmwares, but seems really more excessive than production ones. For example, the  &amp;quot;skankwerk&amp;quot; boot logo represents a real gear and many GUI icons are realistic or simply photos of real life things (especially in [[Operator]]). For newer versions, production iOS 7.x to 9.x flat design is mostly used in 7.x to 9.x factory firmwares. For example, the new &amp;quot;skankwerk&amp;quot; boot logo is a flat, simple white gear. Some newer internal applications like Earthbound also use a &amp;quot;flat&amp;quot; design.&lt;br /&gt;
* '''Other:''' The &amp;quot;skank&amp;quot; word is used to name multiple elements of factory firmwares. For example, there is &amp;quot;skankphone&amp;quot;, &amp;quot;skankbattery&amp;quot; (the green battery shown in SwitchBoard), &amp;quot;skankwerk&amp;quot; logo, &amp;quot;skankkit&amp;quot; framework, &amp;quot;purpleskank&amp;quot; (used by BurnIn) and most likely others. The &amp;quot;skank&amp;quot; word seems to be a reference to &amp;quot;Skunkworks&amp;quot; projects, which are secrecy projects that are usually innovative. Read more about &amp;quot;Skunkworks&amp;quot; on  [https://en.wikipedia.org/wiki/Skunkworks_project Wikipedia].&lt;br /&gt;
== [[M68AP|iPhone]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 1.0&lt;br /&gt;
| [[Alpine 1A420|1A420]]&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | Alpine&lt;br /&gt;
| 03.06.01_G&amp;lt;sup&amp;gt;[http://web.archive.org/web/20110730023951/http://imageshack.us/photo/my-images/399/iphone2go0.jpg/]&amp;lt;/sup&amp;gt;&amp;lt;!-- http://img399.imageshack.us/i/iphone2go0.jpg/ --&amp;gt;&lt;br /&gt;
| Originally available [http://forums.macrumors.com/showpost.php?p=7249071&amp;amp;postcount=85 here], but was soon taken down.&lt;br /&gt;
|-&lt;br /&gt;
| [[Alpine 4A57|4A57]]&lt;br /&gt;
| 04.02.13_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | 1.1.2&lt;br /&gt;
| [[Alpine 3B48|3B48]]&lt;br /&gt;
| 04.02.13_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.3&lt;br /&gt;
| [[Alpine 4A102a|4A102a]]&lt;br /&gt;
| 04.04.05_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N82AP|iPhone 3G]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.0&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 05.12.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N88AP|iPhone 3GS]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 3.1b&lt;br /&gt;
| [[Sierra 7C108b|7C108b]]&lt;br /&gt;
| Sierra?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Northstar 7C144|7C144]]&lt;br /&gt;
| Northstar?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.0&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 05.12.01&lt;br /&gt;
| - &lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 05.16.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 05.16.06&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 4]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 4.0&lt;br /&gt;
| [[Apex 8A133|8A133]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Apex?&lt;br /&gt;
| 01.32.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Apex 8A2062a|8A2062a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 01.42.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 04.12.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 04.12.02&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N94AP|iPhone 4S]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 5.0&lt;br /&gt;
| [[HoodooYabuli 9A2264r|9A2264r]]&lt;br /&gt;
| HoodooYabuli?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 1.0.10&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 6.0&lt;br /&gt;
| [[SundanceNanshan 10A23941a|10A23941a]]&lt;br /&gt;
| SundanceNanshan&lt;br /&gt;
| 2.0.0.2&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceNanshan 10B63290m|10B63290m]]&lt;br /&gt;
| SundanceNanshan?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 5]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 6.0&lt;br /&gt;
| [[Sundance 10A23110z|10A23110z]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Sundance?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Sundance 10A23941s|10A23941s]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 1.7.00&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== [[iPhone 5c]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0&lt;br /&gt;
| [[Sochi 11A93840l|11A93840l]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Sochi?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 7.1&lt;br /&gt;
| [[Sochi 11D31620l|11D31620l]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 5s]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 7.0&lt;br /&gt;
| [[InnsbruckNanshan 11A24580o|11A24580o]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | InnsbruckNanshan&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[InnsbruckNanshan 11A24581c|11A24581c]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Innsbruck 11A93840f|11A93840f]]&lt;br /&gt;
| Innsbruck?&lt;br /&gt;
| ?&lt;br /&gt;
| Originally found on a [https://forums.macrumors.com/threads/unusual-iphone-possible-engineering-sample-os.1885755/ Macrumors] post.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N61AP|iPhone 6]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | 8.0&lt;br /&gt;
| [[Okemo 12A22121a|12A22121a]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Okemo?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Okemo 12A93311h|12A93311h]]&lt;br /&gt;
| 1.00.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93650o|12A93650o]]&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | OkemoAni&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| This build is pretty obscure, but it is in the wild.&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93650z|12A93650z]]&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/AppleInternalsh @AppleInternalsh] on Twitter.&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93651a|12A93651a]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93651b|12A93651b]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6 Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.0&lt;br /&gt;
| [[OkemoAni 12A22121a|12A22121a]]&lt;br /&gt;
| OkemoAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6s]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | 9.0&lt;br /&gt;
| [[Monarch 13A22120w|13A22120w]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchAni 13A93051l|13A93051l]]&lt;br /&gt;
| MonarchAni&lt;br /&gt;
| 0.37.08&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchAni 13A93051r|13A93051r]]&lt;br /&gt;
| MonarchAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A93420d|13A93420d]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A93420i|13A93420i]]&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/AppleInternalsh @AppleInternalsh] on Twitter.&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A93420m|13A93420m]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6s Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 9.0&lt;br /&gt;
| [[Monarch 13A22120w|13A22120w]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchNanshan 13A23161b|13A23161b]]&lt;br /&gt;
| MonarchNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D10AP|iPhone 7]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | 10.0&lt;br /&gt;
| [[Whitetail 14A22580n|14A22580n]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Whitetail?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Whitetail 14A22881a|14A22881a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Whitetail 14A92340t|14A92340t]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A93012r|14A93012r]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | WhitetailAni&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A93013a|14A93013a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.1&lt;br /&gt;
| [[BigShot 14Z1062|14Z1062]]&lt;br /&gt;
| BigShot&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 7 Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 10.0&lt;br /&gt;
| [[WhitetailAni 14A22161a|14A22161a]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | WhitetailAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A22181a|14A22181a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D20AP|iPhone 8]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 11.0&lt;br /&gt;
| [[TigrisAni 15A93261h|15A93261h]]&lt;br /&gt;
| TigrisAni&lt;br /&gt;
| 00.34.09&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[TigrisAni 15A93720p|15A93720p]]&lt;br /&gt;
| TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/AppleInternalsh @AppleInternalsh] on Twitter.&lt;br /&gt;
|-&lt;br /&gt;
| [[TigrisAni 15A93720r|15A93720r]]&lt;br /&gt;
| TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D21AP|iPhone X]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 11.0&lt;br /&gt;
| [[TigrisAni 15A783601x|15A783601x]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[TigrisAni 15A783601y|15A783601y]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N841AP|iPhone XR]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 12.0&lt;br /&gt;
| [[Peace 16A13580z|16A13580z]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Peace?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Peace 16A73281c|16A73281c]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[K48AP|iPad]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 3.2&lt;br /&gt;
| [[Wildcat 7B3341e|7B3341e]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Wildcat?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Wildcat 7B5286a|7B5286a]]&lt;br /&gt;
| ?&lt;br /&gt;
| Found by SonnyDickson, documented on [https://9to5mac.com/2017/05/15/ipad-1-prototype/ 9to5mac]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[K93AP|iPad 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.3&lt;br /&gt;
| [[Durango 8F3178a|8F3178a]]&lt;br /&gt;
| Durango?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Durango 8F3191d|8F3191d]]&lt;br /&gt;
| Durango&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[IPad_(5th_generation)|iPad (5th generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 10.0?&lt;br /&gt;
| [[WhitetailAni 14E62210l|14E62210l]]&lt;br /&gt;
| WhitetailAni?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/AppleInternalsh @AppleInternalsh] on Twitter.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[P106AP|iPad mini]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 6.0&lt;br /&gt;
| [[SundanceTaosTianshan 10A63970m|10A63970m]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | SundanceTaosTianshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceTaosTianshan 10A63970v|10A63970v]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceTaosTianshan 10A63971b|10A63971b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J86AP|iPad mini 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.3&lt;br /&gt;
| [[InnsbruckTaos 11B64940j|11B64940j]]&lt;br /&gt;
| InnsbruckTaos?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 7.1&lt;br /&gt;
| [[Sochi 11D167|11D167]]&lt;br /&gt;
| Sochi?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J96AP|iPad mini 4]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.4&lt;br /&gt;
| [[Donner 12H60160o|12H60160o]]&lt;br /&gt;
| Donner?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 9.0&lt;br /&gt;
| [[Monarch 13A62950o|13A62950o]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A64520d|13A64520d]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/AppleInternalsh @AppleInternalsh] on Twitter.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J71AP|iPad Air]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.1&lt;br /&gt;
| [[Innsbruck 11B34640l|11B34640l]]&lt;br /&gt;
| Innsbruck?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J72AP|iPad Air 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 10.0?&lt;br /&gt;
| [[WhitetailAni 14F60900i|14F60900i]]&lt;br /&gt;
| WhitetailAni?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/AppleInternalsh @AppleInternalsh] on Twitter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N18AP|iPod touch (3rd generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 3.1&lt;br /&gt;
| [[Inferno 7C1023e|7C1023e]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Inferno?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Inferno 7C1095a|7C1095a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Northstar 7C144|7C144]]&lt;br /&gt;
| Northstar?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N81AP|iPod touch (4th generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N102AP|iPod touch (6th generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.3&lt;br /&gt;
| [[Okemo 12H1150f|12H1150f]]&lt;br /&gt;
| Okemo?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/OkemoZurs @OkemoZurs] on Twitter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Firmware]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=NonUI_builds&amp;diff=76438</id>
		<title>NonUI builds</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=NonUI_builds&amp;diff=76438"/>
		<updated>2019-09-10T00:44:02Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{internal software}}&lt;br /&gt;
{{see also|Beta Firmware|Internal OTA Updates}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;toclimit-3&amp;quot;&amp;gt;{{float toc|left}}&amp;lt;/div&amp;gt;&lt;br /&gt;
This is a documented list of known '''factory firmwares''', used by Apple workers in California to do engineering tests on prototype devices and also by factory workers on production ones during manufacturing. Factory firmwares are based on production iOS ones, but adapted for internal engineering tests, development and debugging. &lt;br /&gt;
{{see also|Prototypes}}&lt;br /&gt;
{{clear}}&lt;br /&gt;
[[File:newsblogo.png|thumb|130px|right|&amp;quot;Skankwerk&amp;quot; logo on 7.x and up]]&lt;br /&gt;
[[File:oldswblogo.png|thumb|130px|left|&amp;quot;Skankwerk&amp;quot; logo on 6.x and below]]&lt;br /&gt;
[[File:newswblogo.jpg|thumb|130px|right|Prototype showing newer Skankwerk logo during boot]]&lt;br /&gt;
[[File:oldswblogodevice.jpg|thumb|130px|left|Prototype showing older Skankwerk logo during boot]]&lt;br /&gt;
They are also known as &amp;quot;NonUI (No User Interface)&amp;quot; builds, probably because most applications are command line ones. The SpringBoard replacement, named SwitchBoard, allows the launching of a GUI for some of those applications. Unlike production iOS firmwares, factory ones have the following differences:&lt;br /&gt;
* DEVELOPMENT/DEBUG fused bootloaders in &amp;lt;code&amp;gt;\Firmware\dfu\&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;\Firmware\all_flash\all_flash.[board codename].factoryfa\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEVELOPMENT/DEBUG fused [[kernelcache]] with more symbols (located in &amp;lt;code&amp;gt;/System/Library/Caches/com.apple.kernelcaches&amp;lt;/code&amp;gt; on the filesystem), and with individual kexts in &amp;lt;code&amp;gt;/System/Library/Extensions&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEVELOPMENT dyld_shared_cache in &amp;lt;code&amp;gt;/System/Library/Caches/com.apple.dyld&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEBUG fused baseband firmware in &amp;lt;code&amp;gt;\Firmware\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Skankwerk (gear) logo image file in &amp;lt;code&amp;gt;\Firmware\all_flash\all_flash.[board codename].factoryfa\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;/AppleInternal&amp;lt;/code&amp;gt; folder, which the hierarchy inside get priority over hierarchy in &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
* No SpringBoard, requires the use of daemons to launch [[SwitchBoard.app]] as a multi-app launcher instead.&lt;br /&gt;
* &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; and subfolders contain many UNIX command line utilities.&lt;br /&gt;
* SSH daemon is pre-installed as dropbear, can be connected to over usb&lt;br /&gt;
* Boot loader passes arguments to kernel (unlike RELEASE boot loaders as of iOS 5.0) which makes it easy to disable [[AMFI]]&lt;br /&gt;
* It has some additional Private Frameworks in &amp;lt;code&amp;gt;/System/Library/PrivateFrameworks&amp;lt;/code&amp;gt; for internal GUI apps and command line utilities.&lt;br /&gt;
* Most [[Apple Internal Apps|internal applications]] require the use of SkankKit (replacement for UIKit in nonUI firmwares) to produce special layers such as text on the framebuffer.&lt;br /&gt;
Unlike regular iOS Firmwares, factory ones are distributed in both IPSWs and &amp;quot;restore bundles&amp;quot;. These bundles are unzipped IPSW files which can be restored on devices using internal restore software such as [[PurpleRestore]]. Release and factory firmware &amp;quot;restore bundles&amp;quot; have the same packaging structure (bootloaders, kernel, restore ramdisk, update ramdisk and root filesystem).&lt;br /&gt;
{{clear}}&lt;br /&gt;
= Some interesting facts about factory firmwares =&lt;br /&gt;
* '''Design:''' Apple seems to use the same GUI design from the production firmware to the factory one. &lt;br /&gt;
Production iOS 1.x to 6.x skeuomorphism design is also present on 1.x to 6.x factory firmwares, but seems really more excessive than production ones. For example, the  &amp;quot;skankwerk&amp;quot; boot logo represents a real gear and many GUI icons are realistic or simply photos of real life things (especially in [[Operator]]). For newer versions, production iOS 7.x to 9.x flat design is mostly used in 7.x to 9.x factory firmwares. For example, the new &amp;quot;skankwerk&amp;quot; boot logo is a flat, simple white gear. Some newer internal applications like Earthbound also use a &amp;quot;flat&amp;quot; design.&lt;br /&gt;
* '''Other:''' The &amp;quot;skank&amp;quot; word is used to name multiple elements of factory firmwares. For example, there is &amp;quot;skankphone&amp;quot;, &amp;quot;skankbattery&amp;quot; (the green battery shown in SwitchBoard), &amp;quot;skankwerk&amp;quot; logo, &amp;quot;skankkit&amp;quot; framework, &amp;quot;purpleskank&amp;quot; (used by BurnIn) and most likely others. The &amp;quot;skank&amp;quot; word seems to be a reference to &amp;quot;Skunkworks&amp;quot; projects, which are secrecy projects that are usually innovative. Read more about &amp;quot;Skunkworks&amp;quot; on  [https://en.wikipedia.org/wiki/Skunkworks_project Wikipedia].&lt;br /&gt;
== [[M68AP|iPhone]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 1.0&lt;br /&gt;
| [[Alpine 1A420|1A420]]&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | Alpine&lt;br /&gt;
| 03.06.01_G&amp;lt;sup&amp;gt;[http://web.archive.org/web/20110730023951/http://imageshack.us/photo/my-images/399/iphone2go0.jpg/]&amp;lt;/sup&amp;gt;&amp;lt;!-- http://img399.imageshack.us/i/iphone2go0.jpg/ --&amp;gt;&lt;br /&gt;
| Originally available [http://forums.macrumors.com/showpost.php?p=7249071&amp;amp;postcount=85 here], but was soon taken down.&lt;br /&gt;
|-&lt;br /&gt;
| [[Alpine 4A57|4A57]]&lt;br /&gt;
| 04.02.13_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | 1.1.2&lt;br /&gt;
| [[Alpine 3B48|3B48]]&lt;br /&gt;
| 04.02.13_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.3&lt;br /&gt;
| [[Alpine 4A102a|4A102a]]&lt;br /&gt;
| 04.04.05_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N82AP|iPhone 3G]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.0&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 05.12.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N88AP|iPhone 3GS]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 3.1b&lt;br /&gt;
| [[Sierra 7C108b|7C108b]]&lt;br /&gt;
| Sierra?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Northstar 7C144|7C144]]&lt;br /&gt;
| Northstar?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.0&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 05.12.01&lt;br /&gt;
| - &lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 05.16.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 05.16.06&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 4]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 4.0&lt;br /&gt;
| [[Apex 8A133|8A133]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Apex?&lt;br /&gt;
| 01.32.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Apex 8A2062a|8A2062a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 01.42.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 04.12.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 04.12.02&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N94AP|iPhone 4S]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 5.0&lt;br /&gt;
| [[HoodooYabuli 9A2264r|9A2264r]]&lt;br /&gt;
| HoodooYabuli?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 1.0.10&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 6.0&lt;br /&gt;
| [[SundanceNanshan 10A23941a|10A23941a]]&lt;br /&gt;
| SundanceNanshan&lt;br /&gt;
| 2.0.0.2&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceNanshan 10B63290m|10B63290m]]&lt;br /&gt;
| SundanceNanshan?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 5]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 6.0&lt;br /&gt;
| [[Sundance 10A23110z|10A23110z]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Sundance?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Sundance 10A23941s|10A23941s]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 1.7.00&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== [[iPhone 5c]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0&lt;br /&gt;
| [[Sochi 11A93840l|11A93840l]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Sochi?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 7.1&lt;br /&gt;
| [[Sochi 11D31620l|11D31620l]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 5s]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 7.0&lt;br /&gt;
| [[InnsbruckNanshan 11A24580o|11A24580o]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | InnsbruckNanshan&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[InnsbruckNanshan 11A24581c|11A24581c]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Innsbruck 11A93840f|11A93840f]]&lt;br /&gt;
| Innsbruck?&lt;br /&gt;
| ?&lt;br /&gt;
| Originally found on a [https://forums.macrumors.com/threads/unusual-iphone-possible-engineering-sample-os.1885755/ Macrumors] post.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N61AP|iPhone 6]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | 8.0&lt;br /&gt;
| [[Okemo 12A22121a|12A22121a]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Okemo?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Okemo 12A93311h|12A93311h]]&lt;br /&gt;
| 1.00.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93650o|12A93650o]]&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | OkemoAni&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| This build is pretty obscure, but it is in the wild.&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93650z|12A93650z]]&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/AppleInternalsh @AppleInternalsh] on Twitter.&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93651a|12A93651a]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93651b|12A93651b]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6 Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.0&lt;br /&gt;
| [[OkemoAni 12A22121a|12A22121a]]&lt;br /&gt;
| OkemoAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6s]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | 9.0&lt;br /&gt;
| [[Monarch 13A22120w|13A22120w]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchAni 13A93051l|13A93051l]]&lt;br /&gt;
| MonarchAni&lt;br /&gt;
| 0.37.08&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchAni 13A93051r|13A93051r]]&lt;br /&gt;
| MonarchAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A93420d|13A93420d]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A93420m|13A93420m]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6s Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 9.0&lt;br /&gt;
| [[Monarch 13A22120w|13A22120w]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchNanshan 13A23161b|13A23161b]]&lt;br /&gt;
| MonarchNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D10AP|iPhone 7]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | 10.0&lt;br /&gt;
| [[Whitetail 14A22580n|14A22580n]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Whitetail?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Whitetail 14A22881a|14A22881a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Whitetail 14A92340t|14A92340t]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A93012r|14A93012r]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | WhitetailAni&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A93013a|14A93013a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.1&lt;br /&gt;
| [[BigShot 14Z1062|14Z1062]]&lt;br /&gt;
| BigShot&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 7 Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 10.0&lt;br /&gt;
| [[WhitetailAni 14A22161a|14A22161a]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | WhitetailAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A22181a|14A22181a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D20AP|iPhone 8]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 11.0&lt;br /&gt;
| [[TigrisAni 15A93261h|15A93261h]]&lt;br /&gt;
| TigrisAni&lt;br /&gt;
| 00.34.09&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[TigrisAni 15A93720r|15A93720r]]&lt;br /&gt;
| TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D21AP|iPhone X]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 11.0&lt;br /&gt;
| [[TigrisAni 15A783601x|15A783601x]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[TigrisAni 15A783601y|15A783601y]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N841AP|iPhone XR]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 12.0&lt;br /&gt;
| [[Peace 16A13580z|16A13580z]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Peace?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Peace 16A73281c|16A73281c]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[K48AP|iPad]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 3.2&lt;br /&gt;
| [[Wildcat 7B3341e|7B3341e]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Wildcat?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Wildcat 7B5286a|7B5286a]]&lt;br /&gt;
| ?&lt;br /&gt;
| Found by SonnyDickson, documented on [https://9to5mac.com/2017/05/15/ipad-1-prototype/ 9to5mac]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[K93AP|iPad 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.3&lt;br /&gt;
| [[Durango 8F3178a|8F3178a]]&lt;br /&gt;
| Durango?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Durango 8F3191d|8F3191d]]&lt;br /&gt;
| Durango&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[P106AP|iPad mini]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 6.0&lt;br /&gt;
| [[SundanceTaosTianshan 10A63970m|10A63970m]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | SundanceTaosTianshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceTaosTianshan 10A63970v|10A63970v]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceTaosTianshan 10A63971b|10A63971b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J86AP|iPad mini 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.3&lt;br /&gt;
| [[InnsbruckTaos 11B64940j|11B64940j]]&lt;br /&gt;
| InnsbruckTaos?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 7.1&lt;br /&gt;
| [[Sochi 11D167|11D167]]&lt;br /&gt;
| Sochi?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J96AP|iPad mini 4]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.4&lt;br /&gt;
| [[Donner 12H60160o|12H60160o]]&lt;br /&gt;
| Donner?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 9.0&lt;br /&gt;
| [[Monarch 13A62950o|13A62950o]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J71AP|iPad Air]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.1&lt;br /&gt;
| [[Innsbruck 11B34640l|11B34640l]]&lt;br /&gt;
| Innsbruck?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J72AP|iPad Air 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 10.0?&lt;br /&gt;
| [[WhitetailAni 14F60900i|14F60900i]]&lt;br /&gt;
| WhitetailAni?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/AppleInternalsh @AppleInternalsh] on Twitter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N18AP|iPod touch (3rd generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 3.1&lt;br /&gt;
| [[Inferno 7C1023e|7C1023e]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Inferno?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Inferno 7C1095a|7C1095a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Northstar 7C144|7C144]]&lt;br /&gt;
| Northstar?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N81AP|iPod touch (4th generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N102AP|iPod touch (6th generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.3&lt;br /&gt;
| [[Okemo 12H1150f|12H1150f]]&lt;br /&gt;
| Okemo?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/OkemoZurs @OkemoZurs] on Twitter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Firmware]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Unc0ver&amp;diff=76434</id>
		<title>Unc0ver</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Unc0ver&amp;diff=76434"/>
		<updated>2019-09-09T23:01:38Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lowercase}}{{Infobox software&lt;br /&gt;
 | name                   = unc0ver&lt;br /&gt;
 | title                  = unc0ver&lt;br /&gt;
 | developer              = [https://twitter.com/pwn20wnd pwn20wnd]&amp;lt;br /&amp;gt;[https://twitter.com/sbingner sbingner]&lt;br /&gt;
 | released               = {{Start date|2018|10|13|df=yes}}&lt;br /&gt;
 | latest release version = v3.6.1&lt;br /&gt;
 | latest release date    = {{Start date and age|2019|09|08|df=yes}}&lt;br /&gt;
 | operating system       = iOS&lt;br /&gt;
 | language               = English&lt;br /&gt;
 | genre                  = Jailbreaking&lt;br /&gt;
 | website                = [https://www.reddit.com/9nwxei/ The Reddit thread]&amp;lt;br /&amp;gt;[https://github.com/pwn20wndstuff/Undecimus The GitHub repo]&lt;br /&gt;
}}&lt;br /&gt;
'''unc0ver''' is a [[semi-untethered jailbreak]] for all devices running iOS 11.0-12.2 and 12.4, (A12/A12X support is limited on iOS 12.0-12.2 and 12.4).&lt;br /&gt;
&lt;br /&gt;
It uses the same, and a few more, exploits as [[Electra]] and [[Chimera]] whilst providing more features.&lt;br /&gt;
&lt;br /&gt;
In order to download the latest IPA, download links from the README section has been moved to the releases section of the repository (you can find this by looking under the colored bars where you can find the releases page which is in the middle, alongside branches and contributors).&lt;br /&gt;
==Release History==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Date&lt;br /&gt;
! Changes&lt;br /&gt;
|-&lt;br /&gt;
| RC1&lt;br /&gt;
| {{date|2018|10|13}}&lt;br /&gt;
|&lt;br /&gt;
* Initial release&lt;br /&gt;
|-&lt;br /&gt;
| RC2&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | {{date|2018|10|14}}&lt;br /&gt;
|&lt;br /&gt;
* Add the Dynastic repo by default&lt;br /&gt;
* Fix a bug in firmware checker&lt;br /&gt;
|-&lt;br /&gt;
| RC3&lt;br /&gt;
|&lt;br /&gt;
* Add a switch to manually enable restoring RootFS&lt;br /&gt;
* Stop erasing user preferences when restoring RootFS&lt;br /&gt;
* Fix bugs&lt;br /&gt;
|-&lt;br /&gt;
| RC4&lt;br /&gt;
|&lt;br /&gt;
* Add a label to display the uptime&lt;br /&gt;
* Add a label to display the app's version number&lt;br /&gt;
* Spawn to the PATH&lt;br /&gt;
* Stop bundling system fonts&lt;br /&gt;
|-&lt;br /&gt;
| RC5&lt;br /&gt;
|&lt;br /&gt;
* Run videosubscriptionsd in the jailed state&lt;br /&gt;
* Fix a bug in firmware and update checker&lt;br /&gt;
|-&lt;br /&gt;
| RC6&lt;br /&gt;
|&lt;br /&gt;
* Start logging again&lt;br /&gt;
* Improve update checker&lt;br /&gt;
* Fix multi_path&lt;br /&gt;
|-&lt;br /&gt;
| RC7&lt;br /&gt;
| {{date|2018|10|17}}&lt;br /&gt;
|&lt;br /&gt;
* Fix a bug in RootFS Restore and multi_path&lt;br /&gt;
|-&lt;br /&gt;
| RC8&lt;br /&gt;
| {{date|2018|10|18}}&lt;br /&gt;
|&lt;br /&gt;
* Fix a bug in RootFS Remount&lt;br /&gt;
* Add a work in progress warning for some firmwares &lt;br /&gt;
|-&lt;br /&gt;
| RC9&lt;br /&gt;
| {{date|2018|10|19}}&lt;br /&gt;
|&lt;br /&gt;
* Fix a bug in RootFS Remount&lt;br /&gt;
* Add even more detailed error messages&lt;br /&gt;
* Add a switch to increase the memory limit to improve the stability&lt;br /&gt;
* Improve the compatibility layer to work correctly with some tweaks that were specifically made for the other jailbreaks&lt;br /&gt;
|-&lt;br /&gt;
| v1&lt;br /&gt;
| {{date|2018|10|20}}&lt;br /&gt;
|&lt;br /&gt;
* Fix a bug in RootFS Restore and Remount&lt;br /&gt;
* Make the settings tab match with the rest of the UI&lt;br /&gt;
* Fix bugs&lt;br /&gt;
|-&lt;br /&gt;
| v1.0.1&lt;br /&gt;
| {{date|2018|10|21}}&lt;br /&gt;
|&lt;br /&gt;
* Disable the RootFS Restore for the unstable versions&lt;br /&gt;
|-&lt;br /&gt;
| v1.0.2&lt;br /&gt;
| {{date|2018|10|22}}&lt;br /&gt;
|&lt;br /&gt;
* Enable and fix the RootFS Restore for all versions&lt;br /&gt;
|-&lt;br /&gt;
| v1.0.3&lt;br /&gt;
| {{date|2018|10|23}}&lt;br /&gt;
|&lt;br /&gt;
* Fix the beta firmwares&lt;br /&gt;
|-&lt;br /&gt;
| v1.1&lt;br /&gt;
| {{date|2018|10|27}}&lt;br /&gt;
|&lt;br /&gt;
* Automatically select the best exploit&lt;br /&gt;
* Rewrite the versions checker&lt;br /&gt;
* Improve assertion&lt;br /&gt;
* Show the code which has failed in the error messages&lt;br /&gt;
* Improve memory management&lt;br /&gt;
* Optimize and clean up the code&lt;br /&gt;
* Fix the Storage settings&lt;br /&gt;
* Switch to a new technique to disable auto updates&lt;br /&gt;
* Remove so much useless logging&lt;br /&gt;
* Only set the boot-nonce if the switch is on without checking if it exists or not&lt;br /&gt;
* Log offsets&lt;br /&gt;
* Remove static sleeps to improve the speed&lt;br /&gt;
* Fix series of bugs and leave no known bug&lt;br /&gt;
|-&lt;br /&gt;
| v1.1.1&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{date|2018|11|03}}&lt;br /&gt;
|&lt;br /&gt;
* Add a label to show the ECID&lt;br /&gt;
* Add a button to open the source code&lt;br /&gt;
* Improve auto layout&lt;br /&gt;
* Fix various bugs within RootFS interaction, Icon cache refresher, Version checker, Exploit selector, jailbreak state detector and others&lt;br /&gt;
|-&lt;br /&gt;
| v1.1.2&lt;br /&gt;
|&lt;br /&gt;
* Improve auto layout and code&lt;br /&gt;
* Significantly improve Empty_List (VFS) exploit&lt;br /&gt;
* Slightly improve Multi_Path (MPTCP)&lt;br /&gt;
|-&lt;br /&gt;
| v1.1.3&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{date|2018|11|06}}&lt;br /&gt;
|&lt;br /&gt;
* Fix a bug in starting jailbreakd&lt;br /&gt;
|-&lt;br /&gt;
| v1.1.4&lt;br /&gt;
|&lt;br /&gt;
* Fix a bug in finding offsets&lt;br /&gt;
|-&lt;br /&gt;
| v2.0&lt;br /&gt;
| {{date|2018|11|30}}&lt;br /&gt;
|&lt;br /&gt;
* Initial Cydia Substrate support&lt;br /&gt;
* OTA upgrades for the jailbreak patches from Cydia without rebooting&lt;br /&gt;
* A new button to restart SpringBoard from the jailed state&lt;br /&gt;
* A switch to (re)install OpenSSH&lt;br /&gt;
* A switch to reinstall Cydia&lt;br /&gt;
* A switch to restart backboardd only so that you can jailbreak with broken tweaks&lt;br /&gt;
* Fix and update bootstrap&lt;br /&gt;
* Fix for the jailbreakd error&lt;br /&gt;
* Battery life fixes&lt;br /&gt;
* ELOD (Electra Loop Of Death) mitigations&lt;br /&gt;
* Improve the speed of system reload&lt;br /&gt;
* Fixes for countless bugs&lt;br /&gt;
* Enable Restart and Restart SpringBoard buttons on iOS 11.4 - 11.4.1 (Jailbreak itself doesn't work on iOS 11.4 - 11.4.1)&lt;br /&gt;
* Improve the reliability of the Restart button&lt;br /&gt;
* Fix the broken multi_path entitlement check&lt;br /&gt;
* Add the compatibility layer for the other jailbreaks back to fix the apps like iCleaner&lt;br /&gt;
* Fix the famous snapshot creation bug&lt;br /&gt;
* Add a button to manually reset the logs instead of automatically resetting them when the diagnostics button is tapped&lt;br /&gt;
* Fix the trust cache injection bug&lt;br /&gt;
|-&lt;br /&gt;
| v2.0.1&lt;br /&gt;
| {{date|2018|12|02}}&lt;br /&gt;
|&lt;br /&gt;
* The official release of v2.0 with a version number bump to make tracking versions easier&lt;br /&gt;
|-&lt;br /&gt;
| v2.0.2&lt;br /&gt;
| {{date|2018|12|06}}&lt;br /&gt;
|&lt;br /&gt;
* Fix bugs in the app&lt;br /&gt;
* Improve the the speed of the jailbreak&lt;br /&gt;
* Update bundled resources&lt;br /&gt;
* Switch to a new technique for blocking revokes&lt;br /&gt;
|-&lt;br /&gt;
| v2.1&lt;br /&gt;
| {{date|2018|12|14}}&lt;br /&gt;
|&lt;br /&gt;
* Make internal changes to make fixing issues easier&lt;br /&gt;
* Add T-Mobile support for the revoke disabler&lt;br /&gt;
* Make re-jailbreaking without restarting possible &lt;br /&gt;
* Make switching from Electra possible without restoring RootFS &lt;br /&gt;
* Update bundled resources&lt;br /&gt;
* Fix a bug in extracting bootstrap&lt;br /&gt;
* Only quit the app if the error is fatal&lt;br /&gt;
* Fix a bug in loading daemons&lt;br /&gt;
* Make the jailbreaking process faster and more stable&lt;br /&gt;
* Add more feedback to the user interface&lt;br /&gt;
* Other fixes and improvements&lt;br /&gt;
* Fix a bug in extracting bootstrap that was introduced with the previous build&lt;br /&gt;
* Fix a bug in installing Cydia that was introduced with the previous build&lt;br /&gt;
* Fix a bug in switching from Electra without restoring RootFS&lt;br /&gt;
* Update &amp;quot;No Tweaks&amp;quot; mode to support new &amp;quot;Disable Loader&amp;quot; option in Cydia Substrate&lt;br /&gt;
* Added the ability to completely disable jailbreakd when Substrate is installed via a future Cydia update.&lt;br /&gt;
* Add internal support for completely disabling jailbreakd with a Resources update&lt;br /&gt;
* Make a special alert for the exploit error to make it more clear&lt;br /&gt;
* Automatically reboot when the user taps &amp;quot;OK&amp;quot; on the exploit error&lt;br /&gt;
* Improve the version checker&lt;br /&gt;
* Fix a really weird bug in the system that would stop Cydia Substrate from loading tweaks although this bug isn't caused by the tool&lt;br /&gt;
* Make the UI support different font sizes or styles (E.g. Bold Text)&lt;br /&gt;
* Add the initial localization support (No localizations included yet)&lt;br /&gt;
* Reduce the number of stages&lt;br /&gt;
* Fix a bug in installing OpenSSH&lt;br /&gt;
* Switch to Sam Bingner's new superb trust cache injector thereby enable support for dual-hash signatures&lt;br /&gt;
* Don't update the hosts file unless it is needed&lt;br /&gt;
* Unblock Saurik's repo if it is blocked&lt;br /&gt;
* Reduce the number of stages&lt;br /&gt;
* Remove unnecessary checks&lt;br /&gt;
* Avoid applying unnecessary kernel patches unless they are needed&lt;br /&gt;
* Make sure that the system snapshot was correctly mounted before using it&lt;br /&gt;
* Unmount the system snapshot after root filesystem snapshot bypass or restore&lt;br /&gt;
* Simplify the credits view&lt;br /&gt;
* Don't do unnecessary logging&lt;br /&gt;
* Improve empty_list (vfs) exploit's success rate&lt;br /&gt;
* Fix runCommand to correctly log&lt;br /&gt;
* Don't run jailbreakd if Cydia Substrate is installed&lt;br /&gt;
* Don't set the boot nonce if it already is&lt;br /&gt;
* Make obvious internal changes&lt;br /&gt;
* Make jailbreaking obviously faster&lt;br /&gt;
* Fix a brutal kernel memory leak&lt;br /&gt;
* Fix shutdown or halt leading to a reboot&lt;br /&gt;
* Fix a logic error that would disable jailbreak patches when Substrate was installed but Load Daemons was disabled that was introduced with the previous build&lt;br /&gt;
* Fix a bug in RootFS Restore for iOS 11.0 - 11.2.6 that was introduced with the previous build&lt;br /&gt;
* Fix a bug in trust cache injection&lt;br /&gt;
* Improve update checker&lt;br /&gt;
* Make jailbreaking obviously faster&lt;br /&gt;
* Fix a bug in RootFS Restore for iOS 11.0 - 11.2.6 that would cause it to not work on some devices&lt;br /&gt;
* Fix a bug in update checker&lt;br /&gt;
* Fix a bug in the posix_spawn wrapper that would cause weird issues on some devices (Known for causing the &amp;quot;(24/40)&amp;quot; issue)&lt;br /&gt;
|-&lt;br /&gt;
| v2.1.1&lt;br /&gt;
| {{date|2019|01|05}}&lt;br /&gt;
|&lt;br /&gt;
* Make jailbreaking faster&lt;br /&gt;
* Don't error out if the hosts file doesn't exist&lt;br /&gt;
* Ignore dependencies in Cydia reinstallation&lt;br /&gt;
* Fix false positives&lt;br /&gt;
* Clean Cydia's user data in RootFS Restore&lt;br /&gt;
* Fix a snapshot name confusion bug in RootFS Restore&lt;br /&gt;
* Fix another bug in RootFS Restore&lt;br /&gt;
* Improve memory management&lt;br /&gt;
* Use less external binaries&lt;br /&gt;
* Completely clean Cydia's user data in RootFS Restore&lt;br /&gt;
|-&lt;br /&gt;
| v2.1.3&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{date|2019|01|26}}&lt;br /&gt;
|&lt;br /&gt;
* Fix a bug in patch finder that affected the shenanigans finder on specific iOS versions&lt;br /&gt;
* Switch to a better versioning system&lt;br /&gt;
* Make downgrading from v2.2.0 possible (Unreleased as of now)&lt;br /&gt;
|-&lt;br /&gt;
| v2.1.4&lt;br /&gt;
|&lt;br /&gt;
*Decrease the app's size from 63MBs to 22MBs by optimizing assets&lt;br /&gt;
|-&lt;br /&gt;
| v2.2.0&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | {{date|2019|01|30}}&lt;br /&gt;
|&lt;br /&gt;
* Install Cydia Substrate if it's not already installed&lt;br /&gt;
* Validate Cydia Substrate files and reinstall it if the validation fails&lt;br /&gt;
* Fix a bug in switching from Electra without RootFS Restore&lt;br /&gt;
* Clean up the kernel data structure patches to improve the performance and the security&lt;br /&gt;
* Remove Substitute support files in the filesystem&lt;br /&gt;
* Remove Substitute support links in the filesystem&lt;br /&gt;
* Uninstall Electra's Cydia Upgrade Helper if it is present&lt;br /&gt;
* Improve preference management&lt;br /&gt;
* Switch to a more efficient versioning system&lt;br /&gt;
* Use a new implementation of the system's libarchive to extract the bootstrap to increase the perfomance&lt;br /&gt;
* Update rsync to increase the performance and the stability of RootFS Restore&lt;br /&gt;
* Improve memory management&lt;br /&gt;
* Re-Extract bootstrap if it was extracted on a different iOS version&lt;br /&gt;
* Credit Saurik in the credits view for Cydia and Substrate&lt;br /&gt;
* Avoid writing to the disk when not necessary&lt;br /&gt;
* Add a verbose log window for the jailbreak&lt;br /&gt;
* Make the exploits slightly faster&lt;br /&gt;
* Make the jailbreak significantly faster and more performant&lt;br /&gt;
* Jailbreak itself now takes almost less than a second run (Exploit not included)&lt;br /&gt;
* Fix a bug in patch finder that would cause the sandbox escape to fail on certain devices&lt;br /&gt;
* Fix theoretical bugs&lt;br /&gt;
* Improve assertion&lt;br /&gt;
* Performance improvements&lt;br /&gt;
* Fix a bug in logging&lt;br /&gt;
* Update bootstrap&lt;br /&gt;
* Enable overwriting files in the bootstrap extractor&lt;br /&gt;
* Fix switching from Electra without restoring root filesystem&lt;br /&gt;
* Fix certain error descriptions&lt;br /&gt;
* Fix RootFS Restore on certain devices&lt;br /&gt;
* Add a switch to hide the log window&lt;br /&gt;
* Decrease the app's size from 81MBs to 25MBs by optimizing assets&lt;br /&gt;
* Add a switch to reset Cydia cache on request&lt;br /&gt;
* Rewrite Cydia installation&lt;br /&gt;
* Install a local repo&lt;br /&gt;
* Remove bootstrap&lt;br /&gt;
* Hide the local APT repo from Cydia&lt;br /&gt;
|-&lt;br /&gt;
| v2.2.1&lt;br /&gt;
|&lt;br /&gt;
* Fix a bug in installing Cydia / extracting bootstrap&lt;br /&gt;
|-&lt;br /&gt;
| v2.2.2&lt;br /&gt;
|&lt;br /&gt;
* Fully fix a bug in installing Cydia / extracting bootstrap&lt;br /&gt;
|-&lt;br /&gt;
| v2.2.3&lt;br /&gt;
| {{date|2019|01|31}}&lt;br /&gt;
|&lt;br /&gt;
* Fix a bug with extracting rsync&lt;br /&gt;
|-&lt;br /&gt;
| v3.0.0&lt;br /&gt;
| {{date|2019|04|19}}&lt;br /&gt;
| &lt;br /&gt;
* Add support for iOS 12.0-12.1.2.&lt;br /&gt;
|-&lt;br /&gt;
| v3.0.1&lt;br /&gt;
| {{date|2019|04|23}}&lt;br /&gt;
| &lt;br /&gt;
* Iterate the proc list with proper data locks in Unrestrict to fix a possible race condition in the kernel (Important stability fix)&lt;br /&gt;
* Fix a typo in the app&lt;br /&gt;
* Fix a bug in logging&lt;br /&gt;
* Add iOS 12.1.3 - 12.2 support for the restart button&lt;br /&gt;
|-&lt;br /&gt;
| v3.1&lt;br /&gt;
| {{date|2019|05|23}}&lt;br /&gt;
| &lt;br /&gt;
* Rewrite the kernel patches from scratch to improve the stability and the reliability of the jailbreak&lt;br /&gt;
* Rewrite the preference management system from scratch to optimize the jailbreak&lt;br /&gt;
* Rewrite the diagnostics system from scratch to provide more useful information&lt;br /&gt;
* Rewrite unrestrict libary from scratch to improve the stability of the system after jailbreak&lt;br /&gt;
* Add support for switching from the other iOS 12 jailbreaks without restoring the root filesystem and losing data&lt;br /&gt;
* Make Unrestrict add sandbox exceptions for mach_lookup and mach_register&lt;br /&gt;
* Fix issues with processes looking up Substrate port on iOS 12 to fix stability and performance issues&lt;br /&gt;
* Fix support for the broken versions of RocketBootstrap and hid-support tweaks&lt;br /&gt;
* Fix the iMessage audio crash&lt;br /&gt;
* Fix FaceTime calls disappearing on some devices&lt;br /&gt;
* Fix Camera crash on some devices&lt;br /&gt;
* Update the local APT repo to include the latest updates from the Elucubratus repository, including the updated uikittools with rewritten uicache and sbreload commands to make refreshing the icon cache and reloading the SpringBoard significantly faster when installing packages from Cydia&lt;br /&gt;
* Refresh the icon cache during the root filesystem restore to fix jailbreak apps staying on the home screen after restoring the root filesystem&lt;br /&gt;
* Update mobilesubstrate to version 0.9.7033 to disable loader in the securityd daemon to fix a freeze issue on iOS 12&lt;br /&gt;
* Significantly improve the reliability of the jailbreak when using the machswap or the machswap2 exploit&lt;br /&gt;
* Wait for the user to tap OK on the jailbreak completed alert before respringing the device&lt;br /&gt;
* Improve the jailbreak's self-repairability feature&lt;br /&gt;
* Add a progress HUD to display the status of the jailbreak process&lt;br /&gt;
* Optimize the code&lt;br /&gt;
* Improve assertion&lt;br /&gt;
* Add error-specific error messages&lt;br /&gt;
* Display info about the device on launch&lt;br /&gt;
* Clean up logging&lt;br /&gt;
* Reconfigure the &amp;quot;Reload System Daemons&amp;quot; and &amp;quot;Enable get-task-allow&amp;quot; preferences&lt;br /&gt;
* Make &amp;quot;Enable get-task-allow&amp;quot; a default option&lt;br /&gt;
|-&lt;br /&gt;
| v3.1.1&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{date|2019|05|24}}&lt;br /&gt;
| &lt;br /&gt;
* Fix running root filesystem restore when not in the jailbroken state on iOS 11&lt;br /&gt;
* Add an option to automatically restart the SpringBoard once the jailbreak is done instead of waiting for the user to tap the OK button (Requested by a Redditor)&lt;br /&gt;
|-&lt;br /&gt;
| v3.1.2&lt;br /&gt;
| &lt;br /&gt;
* Fix a bug in the settings user interface on smaller devices&lt;br /&gt;
* Add an option to hide the progress HUD (Requested by a Redditor)&lt;br /&gt;
|-&lt;br /&gt;
| v3.1.3&lt;br /&gt;
| {{date|2019|05|28}}&lt;br /&gt;
| &lt;br /&gt;
* Fix a bug in updating the status&lt;br /&gt;
* Fix a logic bug in remounting the root filesystem (Addresses https://www.reddit.com/r/jailbreak/comments/btxqng/help_still_cant_jb_on_ios_1211_using_the_newest/)&lt;br /&gt;
* Make machswap and machswap2 not depend on stealing kernel's credentials to fix a possible reliability issue&lt;br /&gt;
* Update kernel patches to use a safer allocation method&lt;br /&gt;
* Fix missing information in the jailbreak completed notice&lt;br /&gt;
* Fix false information in the jailbreak completed notice&lt;br /&gt;
|-&lt;br /&gt;
| v3.2&lt;br /&gt;
| {{date|2019|06|01}}&lt;br /&gt;
| &lt;br /&gt;
* Redesign the user interface (https://twitter.com/HiMyNameIsUbik/status/1134938278489182208)&lt;br /&gt;
* Add dark mode for the user interface&lt;br /&gt;
* Add info buttons for the options&lt;br /&gt;
* Increase the reliability of the jailbreak with the machswap and machswap2 exploits&lt;br /&gt;
* Update jailbreak-resources to fix an issue with the CS_DEBUGGED option&lt;br /&gt;
|-&lt;br /&gt;
| v3.2.1&lt;br /&gt;
| {{date|2019|06|02}}&lt;br /&gt;
| &lt;br /&gt;
* Fix several typos in the app&lt;br /&gt;
* Update the bundled uikittools&lt;br /&gt;
* Ignore refresh icon cache failures unless they are actually fatal&lt;br /&gt;
|-&lt;br /&gt;
| v3.3.0&lt;br /&gt;
| {{date|2019|07|14}}&lt;br /&gt;
| &lt;br /&gt;
* Add the Sock Puppet exploit for iOS 12.0-12.2 support on A8X-A11 devices&lt;br /&gt;
* Remove the empty_list and multi_path exploits&lt;br /&gt;
* Replace the kernel exploit segmented switch with picker view&lt;br /&gt;
* Add code substitution platform picker view&lt;br /&gt;
|-&lt;br /&gt;
| v3.3.1&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{date|2019|07|16}}&lt;br /&gt;
| &lt;br /&gt;
* Improve the speed of the jailbreak process by a few seconds&lt;br /&gt;
* Fix a bug in dark mode on the iPads&lt;br /&gt;
|-&lt;br /&gt;
| v3.3.2&lt;br /&gt;
| &lt;br /&gt;
* Fix a bug in finding kernel offsets on iOS 11&lt;br /&gt;
|-&lt;br /&gt;
| v3.3.3&lt;br /&gt;
| {{date|2019|07|18}}&lt;br /&gt;
| &lt;br /&gt;
* Fix the Sock Puppet kernel exploit on iOS 11&lt;br /&gt;
* Fix the Voucher Swap exploit's compatibility status with iPad Air 2 and iPad Mini 4 on iOS 11&lt;br /&gt;
|-&lt;br /&gt;
| v3.3.4&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | {{date|2019|07|19}}&lt;br /&gt;
| &lt;br /&gt;
* Add the Sock Port exploit by [https://twitter.com/jakeashacks @jakeashacks] for iOS 11.0-12.1.4 on A7-A9X devices&lt;br /&gt;
|-&lt;br /&gt;
| v3.3.5&lt;br /&gt;
| &lt;br /&gt;
* Fix a reliability bug in Sock Port&lt;br /&gt;
* Fix Sock Puppet on A8X&lt;br /&gt;
|-&lt;br /&gt;
| v3.3.6&lt;br /&gt;
| &lt;br /&gt;
* Fix Sock Port failing on 4K devices&lt;br /&gt;
|-&lt;br /&gt;
| v3.3.7&lt;br /&gt;
| &lt;br /&gt;
* Improve the reliability of the Sock Port kernel exploit on 4K devices&lt;br /&gt;
|-&lt;br /&gt;
| v3.3.8&lt;br /&gt;
| {{date|2019|07|22}}&lt;br /&gt;
| &lt;br /&gt;
* Use the rewritten SockPort 2.0 exploit with ~100% reliability, ~100 milliseconds run time and support for all devices on iOS 11.0-12.2 (12.1.3-12.2 on A12-A12X excluded)&lt;br /&gt;
* Fix the jailbreak on iOS 12.2 iPhones and iPods&lt;br /&gt;
|-&lt;br /&gt;
| v3.4.0&lt;br /&gt;
| {{date|2019|07|23}}&lt;br /&gt;
| &lt;br /&gt;
* Replace the SockPort 2.0 exploit with the SockPuppet 2.0 exploit with better reliability and stability on older devices&lt;br /&gt;
|-&lt;br /&gt;
| v3.4.1&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{date|2019|07|25}}&lt;br /&gt;
| &lt;br /&gt;
* Fix the sandbox swap error when using the exploits that are not SockPuppet&lt;br /&gt;
* Add the SockPort 1.5 exploit by [https://github.com/jakeajames @jakeajames] for A7-A9X devices (Reliability: ~95% from extensive testing)&lt;br /&gt;
* Disable the SockPuppet exploit on A7-A7X due to reliability issues&lt;br /&gt;
* Add iOS 12.3~b1 support to the jailbreak (Verified working on iPhone 5s)&lt;br /&gt;
* Fix a theoretical reliability bug with SockPuppet&lt;br /&gt;
|-&lt;br /&gt;
| v3.4.2&lt;br /&gt;
| &lt;br /&gt;
* Fix the SockPuppet kernel exploit not displaying on A8-A8X devices&lt;br /&gt;
|-&lt;br /&gt;
| v3.5.0&lt;br /&gt;
| {{date|2019|08|18}}&lt;br /&gt;
|&lt;br /&gt;
* Add iOS 12.4 support to the Sock Puppet (A8-A11) and Sock Port (A7-A7X) exploits&lt;br /&gt;
|-&lt;br /&gt;
| v3.5.1&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | {{date|2019|08|19}}&lt;br /&gt;
|&lt;br /&gt;
* Add the updated SockPuppet 3.0 exploit by @umanghere&lt;br /&gt;
* Remove the SockPort and SockPort2 exploits&lt;br /&gt;
* Update system-memory-reset fix to fix random reboots&lt;br /&gt;
* Add Apple to the credits section for development&lt;br /&gt;
* Fix error at stage 2 when jailbreaking after updating from a lower firmware while preserving the app data&lt;br /&gt;
* Fix the app crashing up on stared up on iOS 11&lt;br /&gt;
|-&lt;br /&gt;
| v3.5.2&lt;br /&gt;
|&lt;br /&gt;
* Fix the SockPuppet 3.0 exploit on iPad Mini 4 and iPad Air 2&lt;br /&gt;
|-&lt;br /&gt;
| v3.5.3&lt;br /&gt;
|&lt;br /&gt;
* Add WIP partial support for A12-A12X devices on iOS 12.1.3, 12.1.4, 12.2 and 12.4 with support for setting HSP#4 as TFP0, setting kernel_task info, exporting kernel_task port, dumping APTicket, logging KASLR shift and ECID and disabling auto updates&lt;br /&gt;
|-&lt;br /&gt;
| v3.5.4&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{date|2019|08|22}}&lt;br /&gt;
|&lt;br /&gt;
* Add full-fledged SSH support with root-shell for A12-A12X devices on iOS 12.1.3-12.4&lt;br /&gt;
* Add support for arbitrary unsigned code execution on A12-A12 devices on iOS 12.1.3-12.4&lt;br /&gt;
(Note: Object files will have to be signed with a CMS blob using the codesign utility)&lt;br /&gt;
* Add support for running expired or revoked apps on A12-A12X devices on iOS 12.1.3-12.4&lt;br /&gt;
* Fix instant or random reboots after jailbreaking with the SockPuppet3.0 exploit on A7-A12X devices on iOS 11.0-12.4&lt;br /&gt;
Note: Code injection is not supported on A12-A12X devices as of yet&lt;br /&gt;
|-&lt;br /&gt;
| v3.5.5&lt;br /&gt;
|&lt;br /&gt;
* Fixes issues with the jailbreak introduced with the last update&lt;br /&gt;
* Fixes iOS 11 support&lt;br /&gt;
|-&lt;br /&gt;
| v3.5.6&lt;br /&gt;
| {{date|2019|08|24}}&lt;br /&gt;
|&lt;br /&gt;
* Add support for remounting the RootFS as read-write on A12-A12X devices running iOS 12.1.3-12.4&lt;br /&gt;
* Adds support for restoring the RootFS on A12-A12X devices running iOS 12.1.3-12.4&lt;br /&gt;
|-&lt;br /&gt;
| v3.6.0&lt;br /&gt;
| {{date|2019|09|08}}&lt;br /&gt;
|&lt;br /&gt;
* Completely redesign and rewrite all jailbreak patches from scratch.&lt;br /&gt;
* Make the jailbreak patches static and not dynamic, Meaning that the system stability will be completely stock after the jailbreak.&lt;br /&gt;
* Fix the app crashing on launch when signed with provisioning profiles with non-ASCII characters.&lt;br /&gt;
* Internally prepare jailbreak patches for full-fledged A12-A12X support.&lt;br /&gt;
* Make the jailbreak significantly and noticeably more reliable and faster to run.&lt;br /&gt;
* Add the SockPort 3.0 exploit for improved reliability on iOS 12.4 and devices with low RAM.&lt;br /&gt;
* Fix SSH support for arm64e devices running iOS 12.0-12.1.2.&lt;br /&gt;
* Make it possible to jailbreak with corrupted SystemVersion.plist on iOS 12.4.&lt;br /&gt;
* Make the jailbreak perform proper clean up to preserve system stability in case of a failure.&lt;br /&gt;
* Fix the jbctl command-line utility.&lt;br /&gt;
* Switch to a new technique for setting the system boot nonce generator that works on all arm64e devices running iOS12.0-12.4, (Thanks to [https://github.com/0x7ff @0x7ff] for the idea).&lt;br /&gt;
* Fix a bug with the initial Cydia installation getting stuck sometimes.&lt;br /&gt;
* Significantly speed up the initial Cydia installation process.&lt;br /&gt;
* Internally prepare upcoming stable substitute support.&lt;br /&gt;
* Internally prepare Cydia and its resources for full-fledged arm64e support.&lt;br /&gt;
|-&lt;br /&gt;
| v3.6.1&lt;br /&gt;
| {{date|2019|09|08}}&lt;br /&gt;
|&lt;br /&gt;
* Improves auto-exploit selection.&lt;br /&gt;
|-&lt;br /&gt;
| v3.6.2&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | {{date|2019|09|09}}&lt;br /&gt;
|&lt;br /&gt;
* Fix an issue with the kernel virtual memory access APIs on A7-A8 devices that rendered the jailbreak useless by causing it to fail to copy big kernel data (Error known as: &amp;quot;Unable to copy container profile in kernel memory.&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| v3.6.3&lt;br /&gt;
|&lt;br /&gt;
* Fix an issue with finding kernel offsets on A8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Jailbreaks]]&lt;br /&gt;
[[Category:Jailbreaking]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=NonUI_builds&amp;diff=76433</id>
		<title>NonUI builds</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=NonUI_builds&amp;diff=76433"/>
		<updated>2019-09-09T00:57:35Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{internal software}}&lt;br /&gt;
{{see also|Beta Firmware|Internal OTA Updates}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;toclimit-3&amp;quot;&amp;gt;{{float toc|left}}&amp;lt;/div&amp;gt;&lt;br /&gt;
This is a documented list of known '''factory firmwares''', used by Apple workers in California to do engineering tests on prototype devices and also by factory workers on production ones during manufacturing. Factory firmwares are based on production iOS ones, but adapted for internal engineering tests, development and debugging. &lt;br /&gt;
{{see also|Prototypes}}&lt;br /&gt;
{{clear}}&lt;br /&gt;
[[File:newsblogo.png|thumb|130px|right|&amp;quot;Skankwerk&amp;quot; logo on 7.x and up]]&lt;br /&gt;
[[File:oldswblogo.png|thumb|130px|left|&amp;quot;Skankwerk&amp;quot; logo on 6.x and below]]&lt;br /&gt;
[[File:newswblogo.jpg|thumb|130px|right|Prototype showing newer Skankwerk logo during boot]]&lt;br /&gt;
[[File:oldswblogodevice.jpg|thumb|130px|left|Prototype showing older Skankwerk logo during boot]]&lt;br /&gt;
They are also known as &amp;quot;NonUI (No User Interface)&amp;quot; builds, probably because most applications are command line ones. The SpringBoard replacement, named SwitchBoard, allows the launching of a GUI for some of those applications. Unlike production iOS firmwares, factory ones have the following differences:&lt;br /&gt;
* DEVELOPMENT/DEBUG fused bootloaders in &amp;lt;code&amp;gt;\Firmware\dfu\&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;\Firmware\all_flash\all_flash.[board codename].factoryfa\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEVELOPMENT/DEBUG fused [[kernelcache]] with more symbols (located in &amp;lt;code&amp;gt;/System/Library/Caches/com.apple.kernelcaches&amp;lt;/code&amp;gt; on the filesystem), and with individual kexts in &amp;lt;code&amp;gt;/System/Library/Extensions&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEVELOPMENT dyld_shared_cache in &amp;lt;code&amp;gt;/System/Library/Caches/com.apple.dyld&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEBUG fused baseband firmware in &amp;lt;code&amp;gt;\Firmware\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Skankwerk (gear) logo image file in &amp;lt;code&amp;gt;\Firmware\all_flash\all_flash.[board codename].factoryfa\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;/AppleInternal&amp;lt;/code&amp;gt; folder, which the hierarchy inside get priority over hierarchy in &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
* No SpringBoard, requires the use of daemons to launch [[SwitchBoard.app]] as a multi-app launcher instead.&lt;br /&gt;
* &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; and subfolders contain many UNIX command line utilities.&lt;br /&gt;
* SSH daemon is pre-installed as dropbear, can be connected to over usb&lt;br /&gt;
* Boot loader passes arguments to kernel (unlike RELEASE boot loaders as of iOS 5.0) which makes it easy to disable [[AMFI]]&lt;br /&gt;
* It has some additional Private Frameworks in &amp;lt;code&amp;gt;/System/Library/PrivateFrameworks&amp;lt;/code&amp;gt; for internal GUI apps and command line utilities.&lt;br /&gt;
* Most [[Apple Internal Apps|internal applications]] require the use of SkankKit (replacement for UIKit in nonUI firmwares) to produce special layers such as text on the framebuffer.&lt;br /&gt;
Unlike regular iOS Firmwares, factory ones are distributed in both IPSWs and &amp;quot;restore bundles&amp;quot;. These bundles are unzipped IPSW files which can be restored on devices using internal restore software such as [[PurpleRestore]]. Release and factory firmware &amp;quot;restore bundles&amp;quot; have the same packaging structure (bootloaders, kernel, restore ramdisk, update ramdisk and root filesystem).&lt;br /&gt;
{{clear}}&lt;br /&gt;
= Some interesting facts about factory firmwares =&lt;br /&gt;
* '''Design:''' Apple seems to use the same GUI design from the production firmware to the factory one. &lt;br /&gt;
Production iOS 1.x to 6.x skeuomorphism design is also present on 1.x to 6.x factory firmwares, but seems really more excessive than production ones. For example, the  &amp;quot;skankwerk&amp;quot; boot logo represents a real gear and many GUI icons are realistic or simply photos of real life things (especially in [[Operator]]). For newer versions, production iOS 7.x to 9.x flat design is mostly used in 7.x to 9.x factory firmwares. For example, the new &amp;quot;skankwerk&amp;quot; boot logo is a flat, simple white gear. Some newer internal applications like Earthbound also use a &amp;quot;flat&amp;quot; design.&lt;br /&gt;
* '''Other:''' The &amp;quot;skank&amp;quot; word is used to name multiple elements of factory firmwares. For example, there is &amp;quot;skankphone&amp;quot;, &amp;quot;skankbattery&amp;quot; (the green battery shown in SwitchBoard), &amp;quot;skankwerk&amp;quot; logo, &amp;quot;skankkit&amp;quot; framework, &amp;quot;purpleskank&amp;quot; (used by BurnIn) and most likely others. The &amp;quot;skank&amp;quot; word seems to be a reference to &amp;quot;Skunkworks&amp;quot; projects, which are secrecy projects that are usually innovative. Read more about &amp;quot;Skunkworks&amp;quot; on  [https://en.wikipedia.org/wiki/Skunkworks_project Wikipedia].&lt;br /&gt;
== [[M68AP|iPhone]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 1.0&lt;br /&gt;
| [[Alpine 1A420|1A420]]&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | Alpine&lt;br /&gt;
| 03.06.01_G&amp;lt;sup&amp;gt;[http://web.archive.org/web/20110730023951/http://imageshack.us/photo/my-images/399/iphone2go0.jpg/]&amp;lt;/sup&amp;gt;&amp;lt;!-- http://img399.imageshack.us/i/iphone2go0.jpg/ --&amp;gt;&lt;br /&gt;
| Originally available [http://forums.macrumors.com/showpost.php?p=7249071&amp;amp;postcount=85 here], but was soon taken down.&lt;br /&gt;
|-&lt;br /&gt;
| [[Alpine 4A57|4A57]]&lt;br /&gt;
| 04.02.13_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | 1.1.2&lt;br /&gt;
| [[Alpine 3B48|3B48]]&lt;br /&gt;
| 04.02.13_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.3&lt;br /&gt;
| [[Alpine 4A102a|4A102a]]&lt;br /&gt;
| 04.04.05_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N82AP|iPhone 3G]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.0&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 05.12.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N88AP|iPhone 3GS]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 3.1b&lt;br /&gt;
| [[Sierra 7C108b|7C108b]]&lt;br /&gt;
| Sierra?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Northstar 7C144|7C144]]&lt;br /&gt;
| Northstar?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.0&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 05.12.01&lt;br /&gt;
| - &lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 05.16.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 05.16.06&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 4]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 4.0&lt;br /&gt;
| [[Apex 8A133|8A133]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Apex?&lt;br /&gt;
| 01.32.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Apex 8A2062a|8A2062a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 01.42.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 04.12.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 04.12.02&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N94AP|iPhone 4S]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 5.0&lt;br /&gt;
| [[HoodooYabuli 9A2264r|9A2264r]]&lt;br /&gt;
| HoodooYabuli?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 1.0.10&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 6.0&lt;br /&gt;
| [[SundanceNanshan 10A23941a|10A23941a]]&lt;br /&gt;
| SundanceNanshan&lt;br /&gt;
| 2.0.0.2&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceNanshan 10B63290m|10B63290m]]&lt;br /&gt;
| SundanceNanshan?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 5]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 6.0&lt;br /&gt;
| [[Sundance 10A23110z|10A23110z]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Sundance?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Sundance 10A23941s|10A23941s]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 1.7.00&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== [[iPhone 5c]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0&lt;br /&gt;
| [[Sochi 11A93840l|11A93840l]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Sochi?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 7.1&lt;br /&gt;
| [[Sochi 11D31620l|11D31620l]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 5s]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 7.0&lt;br /&gt;
| [[InnsbruckNanshan 11A24580o|11A24580o]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | InnsbruckNanshan&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[InnsbruckNanshan 11A24581c|11A24581c]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Innsbruck 11A93840f|11A93840f]]&lt;br /&gt;
| Innsbruck?&lt;br /&gt;
| ?&lt;br /&gt;
| Originally found on a [https://forums.macrumors.com/threads/unusual-iphone-possible-engineering-sample-os.1885755/ Macrumors] post.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N61AP|iPhone 6]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | 8.0&lt;br /&gt;
| [[Okemo 12A22121a|12A22121a]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Okemo?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Okemo 12A93311h|12A93311h]]&lt;br /&gt;
| 1.00.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93650o|12A93650o]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | OkemoAni&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| This build is pretty obscure, but it is in the wild.&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93651a|12A93651a]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93651b|12A93651b]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6 Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.0&lt;br /&gt;
| [[OkemoAni 12A22121a|12A22121a]]&lt;br /&gt;
| OkemoAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6s]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | 9.0&lt;br /&gt;
| [[Monarch 13A22120w|13A22120w]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchAni 13A93051l|13A93051l]]&lt;br /&gt;
| MonarchAni&lt;br /&gt;
| 0.37.08&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchAni 13A93051r|13A93051r]]&lt;br /&gt;
| MonarchAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A93420d|13A93420d]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A93420m|13A93420m]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6s Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 9.0&lt;br /&gt;
| [[Monarch 13A22120w|13A22120w]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchNanshan 13A23161b|13A23161b]]&lt;br /&gt;
| MonarchNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D10AP|iPhone 7]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | 10.0&lt;br /&gt;
| [[Whitetail 14A22580n|14A22580n]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Whitetail?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Whitetail 14A22881a|14A22881a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Whitetail 14A92340t|14A92340t]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A93012r|14A93012r]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | WhitetailAni&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A93013a|14A93013a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.1&lt;br /&gt;
| [[BigShot 14Z1062|14Z1062]]&lt;br /&gt;
| BigShot&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 7 Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 10.0&lt;br /&gt;
| [[WhitetailAni 14A22161a|14A22161a]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | WhitetailAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A22181a|14A22181a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D20AP|iPhone 8]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 11.0&lt;br /&gt;
| [[TigrisAni 15A93261h|15A93261h]]&lt;br /&gt;
| TigrisAni&lt;br /&gt;
| 00.34.09&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[TigrisAni 15A93720r|15A93720r]]&lt;br /&gt;
| TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D21AP|iPhone X]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 11.0&lt;br /&gt;
| [[TigrisAni 15A783601x|15A783601x]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[TigrisAni 15A783601y|15A783601y]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N841AP|iPhone XR]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 12.0&lt;br /&gt;
| [[Peace 16A13580z|16A13580z]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Peace?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Peace 16A73281c|16A73281c]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[K48AP|iPad]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 3.2&lt;br /&gt;
| [[Wildcat 7B3341e|7B3341e]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Wildcat?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Wildcat 7B5286a|7B5286a]]&lt;br /&gt;
| ?&lt;br /&gt;
| Found by SonnyDickson, documented on [https://9to5mac.com/2017/05/15/ipad-1-prototype/ 9to5mac]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[K93AP|iPad 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.3&lt;br /&gt;
| [[Durango 8F3178a|8F3178a]]&lt;br /&gt;
| Durango?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Durango 8F3191d|8F3191d]]&lt;br /&gt;
| Durango&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[P106AP|iPad mini]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 6.0&lt;br /&gt;
| [[SundanceTaosTianshan 10A63970m|10A63970m]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | SundanceTaosTianshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceTaosTianshan 10A63970v|10A63970v]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceTaosTianshan 10A63971b|10A63971b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J86AP|iPad mini 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.3&lt;br /&gt;
| [[InnsbruckTaos 11B64940j|11B64940j]]&lt;br /&gt;
| InnsbruckTaos?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 7.1&lt;br /&gt;
| [[Sochi 11D167|11D167]]&lt;br /&gt;
| Sochi?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J96AP|iPad mini 4]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.4&lt;br /&gt;
| [[Donner 12H60160o|12H60160o]]&lt;br /&gt;
| Donner?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 9.0&lt;br /&gt;
| [[Monarch 13A62950o|13A62950o]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J71AP|iPad Air]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.1&lt;br /&gt;
| [[Innsbruck 11B34640l|11B34640l]]&lt;br /&gt;
| Innsbruck?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N18AP|iPod touch (3rd generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 3.1&lt;br /&gt;
| [[Inferno 7C1023e|7C1023e]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Inferno?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Inferno 7C1095a|7C1095a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Northstar 7C144|7C144]]&lt;br /&gt;
| Northstar?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N81AP|iPod touch (4th generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N102AP|iPod touch (6th generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.3&lt;br /&gt;
| [[Okemo 12H1150f|12H1150f]]&lt;br /&gt;
| Okemo?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/OkemoZurs @OkemoZurs] on Twitter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Firmware]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=NonUI_builds&amp;diff=76430</id>
		<title>NonUI builds</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=NonUI_builds&amp;diff=76430"/>
		<updated>2019-09-08T21:58:22Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{internal software}}&lt;br /&gt;
{{see also|Beta Firmware|Internal OTA Updates}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;toclimit-3&amp;quot;&amp;gt;{{float toc|left}}&amp;lt;/div&amp;gt;&lt;br /&gt;
This is a documented list of known '''factory firmwares''', used by Apple workers in California to do engineering tests on prototype devices and also by factory workers on production ones during manufacturing. Factory firmwares are based on production iOS ones, but adapted for internal engineering tests, development and debugging. &lt;br /&gt;
{{see also|Prototypes}}&lt;br /&gt;
{{clear}}&lt;br /&gt;
[[File:newsblogo.png|thumb|130px|right|&amp;quot;Skankwerk&amp;quot; logo on 7.x and up]]&lt;br /&gt;
[[File:oldswblogo.png|thumb|130px|left|&amp;quot;Skankwerk&amp;quot; logo on 6.x and below]]&lt;br /&gt;
[[File:newswblogo.jpg|thumb|130px|right|Prototype showing newer Skankwerk logo during boot]]&lt;br /&gt;
[[File:oldswblogodevice.jpg|thumb|130px|left|Prototype showing older Skankwerk logo during boot]]&lt;br /&gt;
They are also known as &amp;quot;NonUI (No User Interface)&amp;quot; builds, probably because most applications are command line ones. The SpringBoard replacement, named SwitchBoard, allows the launching of a GUI for some of those applications. Unlike production iOS firmwares, factory ones have the following differences:&lt;br /&gt;
* DEVELOPMENT/DEBUG fused bootloaders in &amp;lt;code&amp;gt;\Firmware\dfu\&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;\Firmware\all_flash\all_flash.[board codename].factoryfa\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEVELOPMENT/DEBUG fused [[kernelcache]] with more symbols (located in &amp;lt;code&amp;gt;/System/Library/Caches/com.apple.kernelcaches&amp;lt;/code&amp;gt; on the filesystem), and with individual kexts in &amp;lt;code&amp;gt;/System/Library/Extensions&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEVELOPMENT dyld_shared_cache in &amp;lt;code&amp;gt;/System/Library/Caches/com.apple.dyld&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEBUG fused baseband firmware in &amp;lt;code&amp;gt;\Firmware\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Skankwerk (gear) logo image file in &amp;lt;code&amp;gt;\Firmware\all_flash\all_flash.[board codename].factoryfa\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;/AppleInternal&amp;lt;/code&amp;gt; folder, which the hierarchy inside get priority over hierarchy in &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
* No SpringBoard, requires the use of daemons to launch [[SwitchBoard.app]] as a multi-app launcher instead.&lt;br /&gt;
* &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; and subfolders contain many UNIX command line utilities.&lt;br /&gt;
* SSH daemon is pre-installed as dropbear, can be connected to over usb&lt;br /&gt;
* Boot loader passes arguments to kernel (unlike RELEASE boot loaders as of iOS 5.0) which makes it easy to disable [[AMFI]]&lt;br /&gt;
* It has some additional Private Frameworks in &amp;lt;code&amp;gt;/System/Library/PrivateFrameworks&amp;lt;/code&amp;gt; for internal GUI apps and command line utilities.&lt;br /&gt;
* Most [[Apple Internal Apps|internal applications]] require the use of SkankKit (replacement for UIKit in nonUI firmwares) to produce special layers such as text on the framebuffer.&lt;br /&gt;
Unlike regular iOS Firmwares, factory ones are distributed in both IPSWs and &amp;quot;restore bundles&amp;quot;. These bundles are unzipped IPSW files which can be restored on devices using internal restore software such as [[PurpleRestore]]. Release and factory firmware &amp;quot;restore bundles&amp;quot; have the same packaging structure (bootloaders, kernel, restore ramdisk, update ramdisk and root filesystem).&lt;br /&gt;
{{clear}}&lt;br /&gt;
= Some interesting facts about factory firmwares =&lt;br /&gt;
* '''Design:''' Apple seems to use the same GUI design from the production firmware to the factory one. &lt;br /&gt;
Production iOS 1.x to 6.x skeuomorphism design is also present on 1.x to 6.x factory firmwares, but seems really more excessive than production ones. For example, the  &amp;quot;skankwerk&amp;quot; boot logo represents a real gear and many GUI icons are realistic or simply photos of real life things (especially in [[Operator]]). For newer versions, production iOS 7.x to 9.x flat design is mostly used in 7.x to 9.x factory firmwares. For example, the new &amp;quot;skankwerk&amp;quot; boot logo is a flat, simple white gear. Some newer internal applications like Earthbound also use a &amp;quot;flat&amp;quot; design.&lt;br /&gt;
* '''Other:''' The &amp;quot;skank&amp;quot; word is used to name multiple elements of factory firmwares. For example, there is &amp;quot;skankphone&amp;quot;, &amp;quot;skankbattery&amp;quot; (the green battery shown in SwitchBoard), &amp;quot;skankwerk&amp;quot; logo, &amp;quot;skankkit&amp;quot; framework, &amp;quot;purpleskank&amp;quot; (used by BurnIn) and most likely others. The &amp;quot;skank&amp;quot; word seems to be a reference to &amp;quot;Skunkworks&amp;quot; projects, which are secrecy projects that are usually innovative. Read more about &amp;quot;Skunkworks&amp;quot; on  [https://en.wikipedia.org/wiki/Skunkworks_project Wikipedia].&lt;br /&gt;
== [[M68AP|iPhone]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 1.0&lt;br /&gt;
| [[Alpine 1A420|1A420]]&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | Alpine&lt;br /&gt;
| 03.06.01_G&amp;lt;sup&amp;gt;[http://web.archive.org/web/20110730023951/http://imageshack.us/photo/my-images/399/iphone2go0.jpg/]&amp;lt;/sup&amp;gt;&amp;lt;!-- http://img399.imageshack.us/i/iphone2go0.jpg/ --&amp;gt;&lt;br /&gt;
| Originally available [http://forums.macrumors.com/showpost.php?p=7249071&amp;amp;postcount=85 here], but was soon taken down.&lt;br /&gt;
|-&lt;br /&gt;
| [[Alpine 4A57|4A57]]&lt;br /&gt;
| 04.02.13_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | 1.1.2&lt;br /&gt;
| [[Alpine 3B48|3B48]]&lt;br /&gt;
| 04.02.13_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.3&lt;br /&gt;
| [[Alpine 4A102a|4A102a]]&lt;br /&gt;
| 04.04.05_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N82AP|iPhone 3G]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.0&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 05.12.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N88AP|iPhone 3GS]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 3.1b&lt;br /&gt;
| [[Sierra 7C108b|7C108b]]&lt;br /&gt;
| Sierra?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Northstar 7C144|7C144]]&lt;br /&gt;
| Northstar?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.0&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 05.12.01&lt;br /&gt;
| - &lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 05.16.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 05.16.06&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 4]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 4.0&lt;br /&gt;
| [[Apex 8A133|8A133]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Apex?&lt;br /&gt;
| 01.32.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Apex 8A2062a|8A2062a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 01.42.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 04.12.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 04.12.02&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N94AP|iPhone 4S]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 5.0&lt;br /&gt;
| [[HoodooYabuli 9A2264r|9A2264r]]&lt;br /&gt;
| HoodooYabuli?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 1.0.10&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 6.0&lt;br /&gt;
| [[SundanceNanshan 10A23941a|10A23941a]]&lt;br /&gt;
| SundanceNanshan&lt;br /&gt;
| 2.0.0.2&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceNanshan 10B63290m|10B63290m]]&lt;br /&gt;
| SundanceNanshan?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 5]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 6.0&lt;br /&gt;
| [[Sundance 10A23110z|10A23110z]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Sundance?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Sundance 10A23941s|10A23941s]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 1.7.00&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== [[iPhone 5c]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0&lt;br /&gt;
| [[Sochi 11A93840l|11A93840l]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Sochi?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 7.1&lt;br /&gt;
| [[Sochi 11D31620l|11D31620l]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 5s]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 7.0&lt;br /&gt;
| [[InnsbruckNanshan 11A24580o|11A24580o]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | InnsbruckNanshan&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[InnsbruckNanshan 11A24581c|11A24581c]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Innsbruck 11A93840f|11A93840f]]&lt;br /&gt;
| Innsbruck?&lt;br /&gt;
| ?&lt;br /&gt;
| Originally found on a [https://forums.macrumors.com/threads/unusual-iphone-possible-engineering-sample-os.1885755/ Macrumors] post.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N61AP|iPhone 6]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | 8.0&lt;br /&gt;
| [[Okemo 12A22121a|12A22121a]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Okemo?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Okemo 12A93311h|12A93311h]]&lt;br /&gt;
| 1.00.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93650o|12A93650o]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | OkemoAni&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| This build is pretty obscure, but it is in the wild.&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93651a|12A93651a]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93651b|12A93651b]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6 Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.0&lt;br /&gt;
| [[OkemoAni 12A22121a|12A22121a]]&lt;br /&gt;
| OkemoAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6s]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | 9.0&lt;br /&gt;
| [[Monarch 13A22120w|13A22120w]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchAni 13A93051l|13A93051l]]&lt;br /&gt;
| MonarchAni&lt;br /&gt;
| 0.37.08&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchAni 13A93051r|13A93051r]]&lt;br /&gt;
| MonarchAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A93420d|13A93420d]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A93420m|13A93420m]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6s Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 9.0&lt;br /&gt;
| [[Monarch 13A22120w|13A22120w]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchAni 13A23161b|13A23161b]]&lt;br /&gt;
| MonarchAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D10AP|iPhone 7]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | 10.0&lt;br /&gt;
| [[Whitetail 14A22580n|14A22580n]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Whitetail?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Whitetail 14A22881a|14A22881a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Whitetail 14A92340t|14A92340t]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A93012r|14A93012r]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | WhitetailAni&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A93013a|14A93013a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 7 Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 10.0&lt;br /&gt;
| [[WhitetailAni 14A22161a|14A22161a]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | WhitetailAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A22181a|14A22181a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D20AP|iPhone 8]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 11.0&lt;br /&gt;
| [[TigrisAni 15A93261h|15A93261h]]&lt;br /&gt;
| TigrisAni&lt;br /&gt;
| 00.34.09&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[TigrisAni 15A93720r|15A93720r]]&lt;br /&gt;
| TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D21AP|iPhone X]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 11.0&lt;br /&gt;
| [[TigrisAni 15A783601x|15A783601x]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[TigrisAni 15A783601y|15A783601y]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N841AP|iPhone XR]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 12.0&lt;br /&gt;
| [[Peace 16A13580z|16A13580z]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Peace?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Peace 16A73281c|16A73281c]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[K48AP|iPad]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 3.2&lt;br /&gt;
| [[Wildcat 7B3341e|7B3341e]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Wildcat?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Wildcat 7B5286a|7B5286a]]&lt;br /&gt;
| ?&lt;br /&gt;
| Found by SonnyDickson, documented on [https://9to5mac.com/2017/05/15/ipad-1-prototype/ 9to5mac]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[K93AP|iPad 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.3&lt;br /&gt;
| [[Durango 8F3178a|8F3178a]]&lt;br /&gt;
| Durango?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Durango 8F3191d|8F3191d]]&lt;br /&gt;
| Durango&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[P106AP|iPad mini]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 6.0&lt;br /&gt;
| [[SundanceTaosTianshan 10A63970m|10A63970m]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | SundanceTaosTianshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceTaosTianshan 10A63970v|10A63970v]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceTaosTianshan 10A63971b|10A63971b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J86AP|iPad mini 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.3&lt;br /&gt;
| [[InnsbruckTaos 11B64940j|11B64940j]]&lt;br /&gt;
| InnsbruckTaos?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 7.1&lt;br /&gt;
| [[Sochi 11D167|11D167]]&lt;br /&gt;
| Sochi?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J96AP|iPad mini 4]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.4&lt;br /&gt;
| [[Donner 12H60160o|12H60160o]]&lt;br /&gt;
| Donner?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 9.0&lt;br /&gt;
| [[Monarch 13A62950o|13A62950o]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J71AP|iPad Air]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.1&lt;br /&gt;
| [[Innsbruck 11B34640l|11B34640l]]&lt;br /&gt;
| Innsbruck?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N18AP|iPod touch (3rd generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 3.1&lt;br /&gt;
| [[Inferno 7C1023e|7C1023e]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Inferno?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Inferno 7C1095a|7C1095a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Northstar 7C144|7C144]]&lt;br /&gt;
| Northstar?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N81AP|iPod touch (4th generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N102AP|iPod touch (6th generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.3&lt;br /&gt;
| [[Okemo 12H1150f|12H1150f]]&lt;br /&gt;
| Okemo?&lt;br /&gt;
| ?&lt;br /&gt;
| From [https://twitter.com/OkemoZurs @OkemoZurs] on Twitter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Firmware]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=NonUI_builds&amp;diff=76399</id>
		<title>NonUI builds</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=NonUI_builds&amp;diff=76399"/>
		<updated>2019-09-02T17:35:37Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: /* iPhone 4S */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{internal software}}&lt;br /&gt;
{{see also|Beta Firmware|Internal OTA Updates}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;toclimit-3&amp;quot;&amp;gt;{{float toc|left}}&amp;lt;/div&amp;gt;&lt;br /&gt;
This is a documented list of known '''factory firmwares''', used by Apple workers in California to do engineering tests on prototype devices and also by factory workers on production ones during manufacturing. Factory firmwares are based on production iOS ones, but adapted for internal engineering tests, development and debugging. &lt;br /&gt;
{{see also|Prototypes}}&lt;br /&gt;
{{clear}}&lt;br /&gt;
[[File:newsblogo.png|thumb|130px|right|&amp;quot;Skankwerk&amp;quot; logo on 7.x and up]]&lt;br /&gt;
[[File:oldswblogo.png|thumb|130px|left|&amp;quot;Skankwerk&amp;quot; logo on 6.x and below]]&lt;br /&gt;
[[File:newswblogo.jpg|thumb|130px|right|Prototype showing newer Skankwerk logo during boot]]&lt;br /&gt;
[[File:oldswblogodevice.jpg|thumb|130px|left|Prototype showing older Skankwerk logo during boot]]&lt;br /&gt;
They are also known as &amp;quot;NonUI (No User Interface)&amp;quot; builds, probably because most applications are command line ones. The SpringBoard replacement, named SwitchBoard, allows the launching of a GUI for some of those applications. Unlike production iOS firmwares, factory ones have the following differences:&lt;br /&gt;
* DEVELOPMENT/DEBUG fused bootloaders in &amp;lt;code&amp;gt;\Firmware\dfu\&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;\Firmware\all_flash\all_flash.[board codename].factoryfa\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEVELOPMENT/DEBUG fused [[kernelcache]] with more symbols (located in &amp;lt;code&amp;gt;/System/Library/Caches/com.apple.kernelcaches&amp;lt;/code&amp;gt; on the filesystem), and with individual kexts in &amp;lt;code&amp;gt;/System/Library/Extensions&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEVELOPMENT dyld_shared_cache in &amp;lt;code&amp;gt;/System/Library/Caches/com.apple.dyld&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEBUG fused baseband firmware in &amp;lt;code&amp;gt;\Firmware\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Skankwerk (gear) logo image file in &amp;lt;code&amp;gt;\Firmware\all_flash\all_flash.[board codename].factoryfa\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;/AppleInternal&amp;lt;/code&amp;gt; folder, which the hierarchy inside get priority over hierarchy in &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
* No SpringBoard, requires the use of daemons to launch [[SwitchBoard.app]] as a multi-app launcher instead.&lt;br /&gt;
* &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; and subfolders contain many UNIX command line utilities.&lt;br /&gt;
* SSH daemon is pre-installed as dropbear, can be connected to over usb&lt;br /&gt;
* Boot loader passes arguments to kernel (unlike RELEASE boot loaders as of iOS 5.0) which makes it easy to disable [[AMFI]]&lt;br /&gt;
* It has some additional Private Frameworks in &amp;lt;code&amp;gt;/System/Library/PrivateFrameworks&amp;lt;/code&amp;gt; for internal GUI apps and command line utilities.&lt;br /&gt;
* Most [[Apple Internal Apps|internal applications]] require the use of SkankKit (replacement for UIKit in nonUI firmwares) to produce special layers such as text on the framebuffer.&lt;br /&gt;
Unlike regular iOS Firmwares, factory ones are distributed in both IPSWs and &amp;quot;restore bundles&amp;quot;. These bundles are unzipped IPSW files which can be restored on devices using internal restore software such as [[PurpleRestore]]. Release and factory firmware &amp;quot;restore bundles&amp;quot; have the same packaging structure (bootloaders, kernel, restore ramdisk, update ramdisk and root filesystem).&lt;br /&gt;
{{clear}}&lt;br /&gt;
= Some interesting facts about factory firmwares =&lt;br /&gt;
* '''Design:''' Apple seems to use the same GUI design from the production firmware to the factory one. &lt;br /&gt;
Production iOS 1.x to 6.x skeuomorphism design is also present on 1.x to 6.x factory firmwares, but seems really more excessive than production ones. For example, the  &amp;quot;skankwerk&amp;quot; boot logo represents a real gear and many GUI icons are realistic or simply photos of real life things (especially in [[Operator]]). For newer versions, production iOS 7.x to 9.x flat design is mostly used in 7.x to 9.x factory firmwares. For example, the new &amp;quot;skankwerk&amp;quot; boot logo is a flat, simple white gear. Some newer internal applications like Earthbound also use a &amp;quot;flat&amp;quot; design.&lt;br /&gt;
* '''Other:''' The &amp;quot;skank&amp;quot; word is used to name multiple elements of factory firmwares. For example, there is &amp;quot;skankphone&amp;quot;, &amp;quot;skankbattery&amp;quot; (the green battery shown in SwitchBoard), &amp;quot;skankwerk&amp;quot; logo, &amp;quot;skankkit&amp;quot; framework, &amp;quot;purpleskank&amp;quot; (used by BurnIn) and most likely others. The &amp;quot;skank&amp;quot; word seems to be a reference to &amp;quot;Skunkworks&amp;quot; projects, which are secrecy projects that are usually innovative. Read more about &amp;quot;Skunkworks&amp;quot; on  [https://en.wikipedia.org/wiki/Skunkworks_project Wikipedia].&lt;br /&gt;
== [[M68AP|iPhone]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 1.0&lt;br /&gt;
| [[Alpine 1A420|1A420]]&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | Alpine&lt;br /&gt;
| 03.06.01_G&amp;lt;sup&amp;gt;[http://web.archive.org/web/20110730023951/http://imageshack.us/photo/my-images/399/iphone2go0.jpg/]&amp;lt;/sup&amp;gt;&amp;lt;!-- http://img399.imageshack.us/i/iphone2go0.jpg/ --&amp;gt;&lt;br /&gt;
| Originally available [http://forums.macrumors.com/showpost.php?p=7249071&amp;amp;postcount=85 here], but was soon taken down.&lt;br /&gt;
|-&lt;br /&gt;
| [[Alpine 4A57|4A57]]&lt;br /&gt;
| 04.02.13_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | 1.1.2&lt;br /&gt;
| [[Alpine 3B48|3B48]]&lt;br /&gt;
| 04.02.13_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.3&lt;br /&gt;
| [[Alpine 4A102a|4A102a]]&lt;br /&gt;
| 04.04.05_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N82AP|iPhone 3G]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.0&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 05.12.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N88AP|iPhone 3GS]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 3.1b&lt;br /&gt;
| [[Sierra 7C108b|7C108b]]&lt;br /&gt;
| Sierra?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Northstar 7C144|7C144]]&lt;br /&gt;
| Northstar?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.0&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 05.12.01&lt;br /&gt;
| - &lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 05.16.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 05.16.06&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 4]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 4.0&lt;br /&gt;
| [[Apex 8A133|8A133]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Apex?&lt;br /&gt;
| 01.32.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Apex 8A2062a|8A2062a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 01.42.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 04.12.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 04.12.02&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N94AP|iPhone 4S]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 5.0&lt;br /&gt;
| [[HoodooYabuli 9A2264r|9A2264r]]&lt;br /&gt;
| HoodooYabuli?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 1.0.10&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 6.0&lt;br /&gt;
| [[SundanceNanshan 10A23941a|10A23941a]]&lt;br /&gt;
| SundanceNanshan&lt;br /&gt;
| 2.0.0.2&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceNanshan 10B63290m|10B63290m]]&lt;br /&gt;
| SundanceNanshan?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 5]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 6.0&lt;br /&gt;
| [[Sundance 10A23110z|10A23110z]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Sundance?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Sundance 10A23941s|10A23941s]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 1.7.00&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== [[iPhone 5c]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0&lt;br /&gt;
| [[Sochi 11A93840l|11A93840l]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Sochi?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 7.1&lt;br /&gt;
| [[Sochi 11D31620l|11D31620l]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 5s]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 7.0&lt;br /&gt;
| [[InnsbruckNanshan 11A24580o|11A24580o]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | InnsbruckNanshan&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[InnsbruckNanshan 11A24581c|11A24581c]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Innsbruck 11A93840f|11A93840f]]&lt;br /&gt;
| Innsbruck?&lt;br /&gt;
| ?&lt;br /&gt;
| Originally found on a [https://forums.macrumors.com/threads/unusual-iphone-possible-engineering-sample-os.1885755/ Macrumors] post.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N61AP|iPhone 6]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | 8.0&lt;br /&gt;
| [[Okemo 12A22121a|12A22121a]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Okemo?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Okemo 12A93311h|12A93311h]]&lt;br /&gt;
| 1.00.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93650o|12A93650o]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | OkemoAni&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| This build is pretty obscure, but it is in the wild.&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93651a|12A93651a]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93651b|12A93651b]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6 Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.0&lt;br /&gt;
| [[OkemoAni 12A22121a|12A22121a]]&lt;br /&gt;
| OkemoAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6s]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | 9.0&lt;br /&gt;
| [[Monarch 13A22120w|13A22120w]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchAni 13A93051l|13A93051l]]&lt;br /&gt;
| MonarchAni&lt;br /&gt;
| 0.37.08&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchAni 13A93051r|13A93051r]]&lt;br /&gt;
| MonarchAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A93420d|13A93420d]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A93420m|13A93420m]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6s Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 9.0&lt;br /&gt;
| [[Monarch 13A22120w|13A22120w]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchAni 13A23161b|13A23161b]]&lt;br /&gt;
| MonarchAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D10AP|iPhone 7]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | 10.0&lt;br /&gt;
| [[Whitetail 14A22580n|14A22580n]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Whitetail?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Whitetail 14A22881a|14A22881a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Whitetail 14A92340t|14A92340t]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A93012r|14A93012r]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | WhitetailAni&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A93013a|14A93013a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 7 Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 10.0&lt;br /&gt;
| [[WhitetailAni 14A22161a|14A22161a]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | WhitetailAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A22181a|14A22181a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D20AP|iPhone 8]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 11.0&lt;br /&gt;
| [[TigrisAni 15A93261h|15A93261h]]&lt;br /&gt;
| TigrisAni&lt;br /&gt;
| 00.34.09&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[TigrisAni 15A93720r|15A93720r]]&lt;br /&gt;
| TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D21AP|iPhone X]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 11.0&lt;br /&gt;
| [[TigrisAni 15A783601x|15A783601x]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[TigrisAni 15A783601y|15A783601y]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N841AP|iPhone XR]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 12.0&lt;br /&gt;
| [[Peace 16A13580z|16A13580z]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Peace?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Peace 16A73281c|16A73281c]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[K48AP|iPad]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 3.2&lt;br /&gt;
| [[Wildcat 7B3341e|7B3341e]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Wildcat?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Wildcat 7B5286a|7B5286a]]&lt;br /&gt;
| ?&lt;br /&gt;
| Found by SonnyDickson, documented on [https://9to5mac.com/2017/05/15/ipad-1-prototype/ 9to5mac]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[K93AP|iPad 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.3&lt;br /&gt;
| [[Durango 8F3178a|8F3178a]]&lt;br /&gt;
| Durango?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Durango 8F3191d|8F3191d]]&lt;br /&gt;
| Durango&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[P106AP|iPad mini]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 6.0&lt;br /&gt;
| [[SundanceTaosTianshan 10A63970m|10A63970m]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | SundanceTaosTianshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceTaosTianshan 10A63970v|10A63970v]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceTaosTianshan 10A63971b|10A63971b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J86AP|iPad mini 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.3&lt;br /&gt;
| [[InnsbruckTaos 11B64940j|11B64940j]]&lt;br /&gt;
| InnsbruckTaos?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 7.1&lt;br /&gt;
| [[Sochi 11D167|11D167]]&lt;br /&gt;
| Sochi?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J96AP|iPad mini 4]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.4&lt;br /&gt;
| [[Donner 12H60160o|12H60160o]]&lt;br /&gt;
| Donner?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 9.0&lt;br /&gt;
| [[Monarch 13A62950o|13A62950o]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J71AP|iPad Air]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.1&lt;br /&gt;
| [[Innsbruck 11B34640l|11B34640l]]&lt;br /&gt;
| Innsbruck?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N18AP|iPod touch (3rd generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 3.1&lt;br /&gt;
| [[Inferno 7C1023e|7C1023e]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Inferno?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Inferno 7C1095a|7C1095a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Northstar 7C144|7C144]]&lt;br /&gt;
| Northstar?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N81AP|iPod touch (4th generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Firmware]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Snowwhite&amp;diff=76365</id>
		<title>Snowwhite</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Snowwhite&amp;diff=76365"/>
		<updated>2019-08-27T00:22:44Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Created page with &amp;quot;{{internal software}}  250px '''snowwhite''' is an internal CLI tool (see SwitchBoard:_/usr/local/bin) that appears to displa...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{internal software}}&lt;br /&gt;
&lt;br /&gt;
[[File:snowwhite1.png|thumb|Example output.|250px]]&lt;br /&gt;
'''snowwhite''' is an internal CLI tool (see [[SwitchBoard:_/usr/local/bin]]) that appears to display information (and update firmware?) across DisplayPort adapters.&lt;br /&gt;
&lt;br /&gt;
Functionality has been largely untested, and is useless without a connected DisplayPort &amp;quot;sink&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{{stub|software}}&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=File:Snowwhite1.png&amp;diff=76364</id>
		<title>File:Snowwhite1.png</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=File:Snowwhite1.png&amp;diff=76364"/>
		<updated>2019-08-27T00:20:16Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=NonUI_builds&amp;diff=76326</id>
		<title>NonUI builds</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=NonUI_builds&amp;diff=76326"/>
		<updated>2019-08-25T16:59:35Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: /* Some interesting facts about factory firmwares */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{internal software}}&lt;br /&gt;
{{see also|Beta Firmware|Internal OTA Updates}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;toclimit-3&amp;quot;&amp;gt;{{float toc|left}}&amp;lt;/div&amp;gt;&lt;br /&gt;
This is a documented list of known '''factory firmwares''', used by Apple workers in California to do engineering tests on prototype devices and also by factory workers on production ones during manufacturing. Factory firmwares are based on production iOS ones, but adapted for internal engineering tests, development and debugging. &lt;br /&gt;
{{see also|Prototypes}}&lt;br /&gt;
{{clear}}&lt;br /&gt;
[[File:newsblogo.png|thumb|130px|right|&amp;quot;Skankwerk&amp;quot; logo on 7.x and up]]&lt;br /&gt;
[[File:oldswblogo.png|thumb|130px|left|&amp;quot;Skankwerk&amp;quot; logo on 6.x and below]]&lt;br /&gt;
[[File:newswblogo.jpg|thumb|130px|right|Prototype showing newer Skankwerk logo during boot]]&lt;br /&gt;
[[File:oldswblogodevice.jpg|thumb|130px|left|Prototype showing older Skankwerk logo during boot]]&lt;br /&gt;
They are also known as &amp;quot;NonUI (No User Interface)&amp;quot; builds, probably because most applications are command line ones. The SpringBoard replacement, named SwitchBoard, allows the launching of a GUI for some of those applications. Unlike production iOS firmwares, factory ones have the following differences:&lt;br /&gt;
* DEVELOPMENT/DEBUG fused bootloaders in &amp;lt;code&amp;gt;\Firmware\dfu\&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;\Firmware\all_flash\all_flash.[board codename].factoryfa\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEVELOPMENT/DEBUG fused [[kernelcache]] with more symbols (located in &amp;lt;code&amp;gt;/System/Library/Caches/com.apple.kernelcaches&amp;lt;/code&amp;gt; on the filesystem), and with individual kexts in &amp;lt;code&amp;gt;/System/Library/Extensions&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEVELOPMENT dyld_shared_cache in &amp;lt;code&amp;gt;/System/Library/Caches/com.apple.dyld&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEBUG fused baseband firmware in &amp;lt;code&amp;gt;\Firmware\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Skankwerk (gear) logo image file in &amp;lt;code&amp;gt;\Firmware\all_flash\all_flash.[board codename].factoryfa\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;/AppleInternal&amp;lt;/code&amp;gt; folder, which the hierarchy inside get priority over hierarchy in &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
* No SpringBoard, requires the use of daemons to launch [[SwitchBoard.app]] as a multi-app launcher instead.&lt;br /&gt;
* &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; and subfolders contain many UNIX command line utilities.&lt;br /&gt;
* SSH daemon is pre-installed as dropbear, can be connected to over usb&lt;br /&gt;
* Boot loader passes arguments to kernel (unlike RELEASE boot loaders as of iOS 5.0) which makes it easy to disable [[AMFI]]&lt;br /&gt;
* It has some additional Private Frameworks in &amp;lt;code&amp;gt;/System/Library/PrivateFrameworks&amp;lt;/code&amp;gt; for internal GUI apps and command line utilities.&lt;br /&gt;
* Most [[Apple Internal Apps|internal applications]] require the use of SkankKit (replacement for UIKit in nonUI firmwares) to produce special layers such as text on the framebuffer.&lt;br /&gt;
Unlike regular iOS Firmwares, factory ones are distributed in both IPSWs and &amp;quot;restore bundles&amp;quot;. These bundles are unzipped IPSW files which can be restored on devices using internal restore software such as [[PurpleRestore]]. Release and factory firmware &amp;quot;restore bundles&amp;quot; have the same packaging structure (bootloaders, kernel, restore ramdisk, update ramdisk and root filesystem).&lt;br /&gt;
{{clear}}&lt;br /&gt;
= Some interesting facts about factory firmwares =&lt;br /&gt;
* '''Design:''' Apple seems to use the same GUI design from the production firmware to the factory one. &lt;br /&gt;
Production iOS 1.x to 6.x skeuomorphism design is also present on 1.x to 6.x factory firmwares, but seems really more excessive than production ones. For example, the  &amp;quot;skankwerk&amp;quot; boot logo represents a real gear and many GUI icons are realistic or simply photos of real life things (especially in [[Operator]]). For newer versions, production iOS 7.x to 9.x flat design is mostly used in 7.x to 9.x factory firmwares. For example, the new &amp;quot;skankwerk&amp;quot; boot logo is a flat, simple white gear. Some newer internal applications like Earthbound also use a &amp;quot;flat&amp;quot; design.&lt;br /&gt;
* '''Other:''' The &amp;quot;skank&amp;quot; word is used to name multiple elements of factory firmwares. For example, there is &amp;quot;skankphone&amp;quot;, &amp;quot;skankbattery&amp;quot; (the green battery shown in SwitchBoard), &amp;quot;skankwerk&amp;quot; logo, &amp;quot;skankkit&amp;quot; framework, &amp;quot;purpleskank&amp;quot; (used by BurnIn) and most likely others. The &amp;quot;skank&amp;quot; word seems to be a reference to &amp;quot;Skunkworks&amp;quot; projects, which are secrecy projects that are usually innovative. Read more about &amp;quot;Skunkworks&amp;quot; on  [https://en.wikipedia.org/wiki/Skunkworks_project Wikipedia].&lt;br /&gt;
== [[M68AP|iPhone]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 1.0&lt;br /&gt;
| [[Alpine 1A420|1A420]]&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | Alpine&lt;br /&gt;
| 03.06.01_G&amp;lt;sup&amp;gt;[http://web.archive.org/web/20110730023951/http://imageshack.us/photo/my-images/399/iphone2go0.jpg/]&amp;lt;/sup&amp;gt;&amp;lt;!-- http://img399.imageshack.us/i/iphone2go0.jpg/ --&amp;gt;&lt;br /&gt;
| Originally available [http://forums.macrumors.com/showpost.php?p=7249071&amp;amp;postcount=85 here], but was soon taken down.&lt;br /&gt;
|-&lt;br /&gt;
| [[Alpine 4A57|4A57]]&lt;br /&gt;
| 04.02.13_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | 1.1.2&lt;br /&gt;
| [[Alpine 3B48|3B48]]&lt;br /&gt;
| 04.02.13_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 1.1.3&lt;br /&gt;
| [[Alpine 4A102a|4A102a]]&lt;br /&gt;
| 04.04.05_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N82AP|iPhone 3G]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.0&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 05.12.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N88AP|iPhone 3GS]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 3.1b&lt;br /&gt;
| [[Sierra 7C108b|7C108b]]&lt;br /&gt;
| Sierra?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Northstar 7C144|7C144]]&lt;br /&gt;
| Northstar?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.0&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 05.12.01&lt;br /&gt;
| - &lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 05.16.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 05.16.06&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 4]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 4.0&lt;br /&gt;
| [[Apex 8A133|8A133]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Apex?&lt;br /&gt;
| 01.32.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Apex 8A2062a|8A2062a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| 01.42.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 04.12.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 04.12.02&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N94AP|iPhone 4S]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| 1.0.10&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 6.0&lt;br /&gt;
| [[SundanceNanshan 10A23941a|10A23941a]]&lt;br /&gt;
| SundanceNanshan&lt;br /&gt;
| 2.0.0.2&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceNanshan 10B63290m|10B63290m]]&lt;br /&gt;
| SundanceNanshan?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 5]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 6.0&lt;br /&gt;
| [[Sundance 10A23110z|10A23110z]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Sundance?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Sundance 10A23941s|10A23941s]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 1.7.00&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== [[iPhone 5c]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0&lt;br /&gt;
| [[Sochi 11A93840l|11A93840l]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Sochi?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 7.1&lt;br /&gt;
| [[Sochi 11D31620l|11D31620l]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 5s]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 7.0&lt;br /&gt;
| [[InnsbruckNanshan 11A24580o|11A24580o]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | InnsbruckNanshan&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[InnsbruckNanshan 11A24581c|11A24581c]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Innsbruck 11A93840f|11A93840f]]&lt;br /&gt;
| Innsbruck?&lt;br /&gt;
| ?&lt;br /&gt;
| Originally found on a [https://forums.macrumors.com/threads/unusual-iphone-possible-engineering-sample-os.1885755/ Macrumors] post.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N61AP|iPhone 6]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | 8.0&lt;br /&gt;
| [[Okemo 12A22121a|12A22121a]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Okemo?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Okemo 12A93311h|12A93311h]]&lt;br /&gt;
| 1.00.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93650o|12A93650o]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | OkemoAni&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| This build is pretty obscure, but it is in the wild.&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93651a|12A93651a]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93651b|12A93651b]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6 Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.0&lt;br /&gt;
| [[OkemoAni 12A22121a|12A22121a]]&lt;br /&gt;
| OkemoAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6s]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | 9.0&lt;br /&gt;
| [[Monarch 13A22120w|13A22120w]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchAni 13A93051l|13A93051l]]&lt;br /&gt;
| MonarchAni&lt;br /&gt;
| 0.37.08&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchAni 13A93051r|13A93051r]]&lt;br /&gt;
| MonarchAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A93420d|13A93420d]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A93420m|13A93420m]]&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6s Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 9.0&lt;br /&gt;
| [[Monarch 13A22120w|13A22120w]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchAni 13A23161b|13A23161b]]&lt;br /&gt;
| MonarchAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D10AP|iPhone 7]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | 10.0&lt;br /&gt;
| [[Whitetail 14A22580n|14A22580n]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Whitetail?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Whitetail 14A22881a|14A22881a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Whitetail 14A92340t|14A92340t]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A93012r|14A93012r]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | WhitetailAni&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A93013a|14A93013a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 7 Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 10.0&lt;br /&gt;
| [[WhitetailAni 14A22161a|14A22161a]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | WhitetailAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A22181a|14A22181a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D20AP|iPhone 8]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 11.0&lt;br /&gt;
| [[TigrisAni 15A93261h|15A93261h]]&lt;br /&gt;
| TigrisAni&lt;br /&gt;
| 00.34.09&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[TigrisAni 15A93720r|15A93720r]]&lt;br /&gt;
| TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D21AP|iPhone X]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 11.0&lt;br /&gt;
| [[TigrisAni 15A783601x|15A783601x]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[TigrisAni 15A783601y|15A783601y]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N841AP|iPhone XR]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 12.0&lt;br /&gt;
| [[Peace 16A13580z|16A13580z]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Peace?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Peace 16A73281c|16A73281c]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[K48AP|iPad]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 3.2&lt;br /&gt;
| [[Wildcat 7B3341e|7B3341e]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Wildcat?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Wildcat 7B5286a|7B5286a]]&lt;br /&gt;
| ?&lt;br /&gt;
| Found by SonnyDickson, documented on [https://9to5mac.com/2017/05/15/ipad-1-prototype/ 9to5mac]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[K93AP|iPad 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.3&lt;br /&gt;
| [[Durango 8F3178a|8F3178a]]&lt;br /&gt;
| Durango?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Durango 8F3191d|8F3191d]]&lt;br /&gt;
| Durango&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[P106AP|iPad mini]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 6.0&lt;br /&gt;
| [[SundanceTaosTianshan 10A63970m|10A63970m]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | SundanceTaosTianshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceTaosTianshan 10A63970v|10A63970v]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceTaosTianshan 10A63971b|10A63971b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J86AP|iPad mini 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.3&lt;br /&gt;
| [[InnsbruckTaos 11B64940j|11B64940j]]&lt;br /&gt;
| InnsbruckTaos?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 7.1&lt;br /&gt;
| [[Sochi 11D167|11D167]]&lt;br /&gt;
| Sochi?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J96AP|iPad mini 4]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.4&lt;br /&gt;
| [[Donner 12H60160o|12H60160o]]&lt;br /&gt;
| Donner?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 9.0&lt;br /&gt;
| [[Monarch 13A62950o|13A62950o]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J71AP|iPad Air]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.1&lt;br /&gt;
| [[Innsbruck 11B34640l|11B34640l]]&lt;br /&gt;
| Innsbruck?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N18AP|iPod touch (3rd generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 3.1&lt;br /&gt;
| [[Inferno 7C1023e|7C1023e]]&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Inferno?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Inferno 7C1095a|7C1095a]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Northstar 7C144|7C144]]&lt;br /&gt;
| Northstar?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N81AP|iPod touch (4th generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Firmware]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=NonUI_builds&amp;diff=76324</id>
		<title>NonUI builds</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=NonUI_builds&amp;diff=76324"/>
		<updated>2019-08-25T05:20:23Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: /* Some interesting facts about factory firmwares */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{internal software}}&lt;br /&gt;
{{see also|Beta Firmware|Internal OTA Updates}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;toclimit-3&amp;quot;&amp;gt;{{float toc|left}}&amp;lt;/div&amp;gt;&lt;br /&gt;
This is a documented list of known '''factory firmwares''', used by Apple workers in California to do engineering tests on prototype devices and also by factory workers on production ones during manufacturing. Factory firmwares are based on production iOS ones, but adapted for internal engineering tests, development and debugging. &lt;br /&gt;
{{see also|Prototypes}}&lt;br /&gt;
{{clear}}&lt;br /&gt;
[[File:newsblogo.png|thumb|130px|right|&amp;quot;Skankwerk&amp;quot; logo on 7.x and up]]&lt;br /&gt;
[[File:oldswblogo.png|thumb|130px|left|&amp;quot;Skankwerk&amp;quot; logo on 6.x and below]]&lt;br /&gt;
[[File:newswblogo.jpg|thumb|130px|right|Prototype showing newer Skankwerk logo during boot]]&lt;br /&gt;
[[File:oldswblogodevice.jpg|thumb|130px|left|Prototype showing older Skankwerk logo during boot]]&lt;br /&gt;
They are also known as &amp;quot;NonUI (No User Interface)&amp;quot; builds, probably because most applications are command line ones. The SpringBoard replacement, named SwitchBoard, allows the launching of a GUI for some of those applications. Unlike production iOS firmwares, factory ones have the following differences:&lt;br /&gt;
* DEVELOPMENT/DEBUG fused bootloaders in &amp;lt;code&amp;gt;\Firmware\dfu\&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;\Firmware\all_flash\all_flash.[board codename].factoryfa\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEVELOPMENT/DEBUG fused [[kernelcache]] with more symbols (located in &amp;lt;code&amp;gt;/System/Library/Caches/com.apple.kernelcaches&amp;lt;/code&amp;gt; on the filesystem), and with individual kexts in &amp;lt;code&amp;gt;/System/Library/Extensions&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEVELOPMENT dyld_shared_cache in &amp;lt;code&amp;gt;/System/Library/Caches/com.apple.dyld&amp;lt;/code&amp;gt;.&lt;br /&gt;
* DEBUG fused baseband firmware in &amp;lt;code&amp;gt;\Firmware\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Skankwerk (gear) logo image file in &amp;lt;code&amp;gt;\Firmware\all_flash\all_flash.[board codename].factoryfa\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;/AppleInternal&amp;lt;/code&amp;gt; folder, which the hierarchy inside get priority over hierarchy in &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
* No SpringBoard, requires the use of daemons to launch [[SwitchBoard.app]] as a multi-app launcher instead.&lt;br /&gt;
* &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; and subfolders contain many UNIX command line utilities.&lt;br /&gt;
* SSH daemon is pre-installed as dropbear, can be connected to over usb&lt;br /&gt;
* Boot loader passes arguments to kernel (unlike RELEASE boot loaders as of iOS 5.0) which makes it easy to disable [[AMFI]]&lt;br /&gt;
* It has some additional Private Frameworks in &amp;lt;code&amp;gt;/System/Library/PrivateFrameworks&amp;lt;/code&amp;gt; for internal GUI apps and command line utilities.&lt;br /&gt;
* Most [[Apple Internal Apps|internal applications]] require the use of SkankKit (replacement for UIKit in nonUI firmwares) to produce special layers such as text on the framebuffer.&lt;br /&gt;
Unlike regular iOS Firmwares, factory ones are distributed in both IPSWs and &amp;quot;restore bundles&amp;quot;. These bundles are unzipped IPSW files which can be restored on devices using internal restore software such as [[PurpleRestore]]. Release and factory firmware &amp;quot;restore bundles&amp;quot; have the same packaging structure (bootloaders, kernel, restore ramdisk, update ramdisk and root filesystem).&lt;br /&gt;
{{clear}}&lt;br /&gt;
= Some interesting facts about factory firmwares =&lt;br /&gt;
* '''Design:''' Apple seems to use the same GUI design from the production firmware to the factory one. &lt;br /&gt;
Production iOS 1.x to 6.x skeuomorphism design is also present on 1.x to 6.x factory firmwares, but seems really more excessive than production ones. For example, the  &amp;quot;skankwerk&amp;quot; boot logo represents a real gear and many GUI icons are realistic or simply photos of real life things (especially in [[Operator]]). For newer versions, production iOS 7.x to 9.x flat design is mostly used in 7.x to 9.x factory firmwares. For example, the new &amp;quot;skankwerk&amp;quot; boot logo is a flat, simple white gear. Some newer internal applications like Earthbound also use a &amp;quot;flat&amp;quot; design.&lt;br /&gt;
* '''Other:''' The &amp;quot;skank&amp;quot; word is used to name multiple elements of factory firmwares. For example, there is &amp;quot;skankphone&amp;quot;, &amp;quot;skankbattery&amp;quot; (the green battery shown in SwitchBoard), &amp;quot;skankwerk&amp;quot; logo, &amp;quot;skankkit&amp;quot; framework, &amp;quot;purpleskank&amp;quot; (used by BurnIn) and most likely others. The &amp;quot;skank&amp;quot; word seems to be a reference to &amp;quot;Skunkworks&amp;quot; projects, which are secrecy projects that are usually innovative. Read more about &amp;quot;Skunkworks&amp;quot; on  [https://en.wikipedia.org/wiki/Skunkworks_project Wikipedia].&lt;br /&gt;
== [[M68AP|iPhone]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 1.0&lt;br /&gt;
| [[Alpine 1A420|1A420]]&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Alpine&lt;br /&gt;
| 03.06.01_G&amp;lt;sup&amp;gt;[http://web.archive.org/web/20110730023951/http://imageshack.us/photo/my-images/399/iphone2go0.jpg/]&amp;lt;/sup&amp;gt;&amp;lt;!-- http://img399.imageshack.us/i/iphone2go0.jpg/ --&amp;gt;&lt;br /&gt;
| Originally available [http://forums.macrumors.com/showpost.php?p=7249071&amp;amp;postcount=85 here], but was soon taken down.&lt;br /&gt;
|-&lt;br /&gt;
| [[Alpine 4A57|4A57]]&lt;br /&gt;
| 04.02.13_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;1&amp;quot; | 1.1.2&lt;br /&gt;
| [[Alpine 3B48|3B48]]&lt;br /&gt;
| 04.02.13_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 1.1.3&lt;br /&gt;
| [[Alpine 4A102a|4A102a]]&lt;br /&gt;
| Alpine&lt;br /&gt;
| 04.04.05_G&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N82AP|iPhone 3G]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.0&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| ApexNanshan&lt;br /&gt;
| 05.12.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N88AP|iPhone 3GS]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 3.1b&lt;br /&gt;
| [[Sierra 7C108b|7C108b]]&lt;br /&gt;
| Sierra?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Northstar 7C144|7C144]]&lt;br /&gt;
| Northstar?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.0&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| ApexNanshan&lt;br /&gt;
| 05.12.01&lt;br /&gt;
| - &lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| HoodooYabuli&lt;br /&gt;
| 05.16.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 05.16.06&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 4]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 4.0&lt;br /&gt;
| [[Apex 8A133|8A133]]&lt;br /&gt;
| Apex?&lt;br /&gt;
| 01.32.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Apex 8A2062a|8A2062a]]&lt;br /&gt;
| Apex?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2130h|8A2130h]]&lt;br /&gt;
| ApexNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[ApexNanshan 8A2180g|8A2180g]]&lt;br /&gt;
| ApexNanshan&lt;br /&gt;
| 01.42.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| HoodooYabuli&lt;br /&gt;
| 04.12.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 04.12.02&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N94AP|iPhone 4S]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| HoodooYabuli&lt;br /&gt;
| 1.0.10&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [[SundanceNanshan 10A23941a|10A23941a]]&lt;br /&gt;
| SundanceNanshan&lt;br /&gt;
| 2.0.0.2&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 5]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 6.0&lt;br /&gt;
| [[Sundance 10A23110z|10A23110z]]&lt;br /&gt;
| Sundance?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Sundance 10A23941s|10A23941s]]&lt;br /&gt;
| Sundance?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Sundance 10A316|10A316]]&lt;br /&gt;
| Sundance&lt;br /&gt;
| 1.7.00&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== [[iPhone 5c]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0&lt;br /&gt;
| [[Sochi 11A93840l|11A93840l]]&lt;br /&gt;
| Sochi?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 7.1&lt;br /&gt;
| [[Sochi 11D31620l|11D31620l]]&lt;br /&gt;
| Sochi?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 5s]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 7.0&lt;br /&gt;
| [[InnsbruckNanshan 11A24580o|11A24580o]]&lt;br /&gt;
| InnsbruckNanshan&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[InnsbruckNanshan 11A24581c|11A24581c]]&lt;br /&gt;
| InnsbruckNanshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Innsbruck 11A93840f|11A93840f]]&lt;br /&gt;
| Innsbruck?&lt;br /&gt;
| ?&lt;br /&gt;
| Originally found on a [https://forums.macrumors.com/threads/unusual-iphone-possible-engineering-sample-os.1885755/ Macrumors] post.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N61AP|iPhone 6]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | 8.0&lt;br /&gt;
| [[Okemo 12A22121a|12A22121a]]&lt;br /&gt;
| Okemo?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Okemo 12A93311h|12A93311h]]&lt;br /&gt;
| Okemo?&lt;br /&gt;
| 1.00.01&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93650o|12A93650o]]&lt;br /&gt;
| OkemoAni&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| This build is pretty obscure, but it is in the wild.&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93651a|12A93651a]]&lt;br /&gt;
| OkemoAni&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[OkemoAni 12A93651b|12A93651b]]&lt;br /&gt;
| OkemoAni&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6 Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.0&lt;br /&gt;
| [[OkemoAni 12A22121a|12A22121a]]&lt;br /&gt;
| OkemoAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6s]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 9.0&lt;br /&gt;
| [[Monarch 13A22120w|13A22120w]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchAni 13A93051l|13A93051l]]&lt;br /&gt;
| MonarchAni&lt;br /&gt;
| 0.37.08&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A93420d|13A93420d]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Monarch 13A93420m|13A93420m]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| 1.00.05&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 6s Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 9.0&lt;br /&gt;
| [[Monarch 13A22120w|13A22120w]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[MonarchAni 13A23161b|13A23161b]]&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D10AP|iPhone 7]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | 10.0&lt;br /&gt;
| [[Whitetail 14A22580n|14A22580n]]&lt;br /&gt;
| Whitetail?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Whitetail 14A22881a|14A22881a]]&lt;br /&gt;
| Whitetail?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Whitetail 14A92340t|14A92340t]]&lt;br /&gt;
| Whitetail?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A93012r|14A93012r]]&lt;br /&gt;
| WhitetailAni&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A93013a|14A93013a]]&lt;br /&gt;
| WhitetailAni&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 7 Plus]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 10.0&lt;br /&gt;
| [[WhitetailAni 14A22161a|14A22161a]]&lt;br /&gt;
| WhitetailAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[WhitetailAni 14A22181a|14A22181a]]&lt;br /&gt;
| WhitetailAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D20AP|iPhone 8]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 11.0&lt;br /&gt;
| [[TigrisAni 15A93261h|15A93261h]]&lt;br /&gt;
| TigrisAni&lt;br /&gt;
| 00.34.09&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[TigrisAni 15A93720r|15A93720r]]&lt;br /&gt;
| TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[D21AP|iPhone X]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 11.0&lt;br /&gt;
| [[TigrisAni 15A783601x|15A783601x]]&lt;br /&gt;
| TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[TigrisAni 15A783601y|15A783601y]]&lt;br /&gt;
| TigrisAni?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N841AP|iPhone XR]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 12.0&lt;br /&gt;
| [[16A13580z]]&lt;br /&gt;
| Peace?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[16A73281c]]&lt;br /&gt;
| Peace?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[K48AP|iPad]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 3.2&lt;br /&gt;
| [[Wildcat 7B3341e|7B3341e]]&lt;br /&gt;
| Wildcat?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Wildcat 7B5286a|7B5286a]]&lt;br /&gt;
| Wildcat?&lt;br /&gt;
| ?&lt;br /&gt;
| Found by SonnyDickson, documented on [https://9to5mac.com/2017/05/15/ipad-1-prototype/ 9to5mac]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[K93AP|iPad 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | 4.3&lt;br /&gt;
| [[Durango 8F3178a|8F3178a]]&lt;br /&gt;
| Durango?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Durango 8F3191d|8F3191d]]&lt;br /&gt;
| Durango&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[P106AP|iPad mini]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 6.0&lt;br /&gt;
| [[SundanceTaosTianshan 10A63970m|10A63970m]]&lt;br /&gt;
| SundanceTaosTianshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceTaosTianshan 10A63970v|10A63970v]]&lt;br /&gt;
| SundanceTaosTianshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[SundanceTaosTianshan 10A63971b|10A63971b]]&lt;br /&gt;
| SundanceTaosTianshan&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J86AP|iPad mini 2]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.3&lt;br /&gt;
| [[InnsbruckTaos 11B64940j|11B64940j]]&lt;br /&gt;
| InnsbruckTaos?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J96AP|iPad mini 4]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8.4&lt;br /&gt;
| [[Donner 12H60160o|12H60160o]]&lt;br /&gt;
| Donner?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| 9.0&lt;br /&gt;
| [[Monarch 13A62950o|13A62950o]]&lt;br /&gt;
| Monarch?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[J71AP|iPad Air]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.1&lt;br /&gt;
| [[Innsbruck 11B34640l|11B34640l]]&lt;br /&gt;
| Innsbruck?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N18AP|iPod touch (3rd generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 3.1&lt;br /&gt;
| [[Inferno 7C1023e|7C1023e]]&lt;br /&gt;
| Inferno?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Inferno 7C1095a|7C1095a]]&lt;br /&gt;
| Inferno?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[Northstar 7C144|7C144]]&lt;br /&gt;
| Northstar?&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[N81AP|iPod touch (4th generation)]] ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Version&lt;br /&gt;
! Build&lt;br /&gt;
! Codename&lt;br /&gt;
! Baseband&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 5.1&lt;br /&gt;
| [[HoodooYabuli 9B3145a|9B3145a]]&lt;br /&gt;
| HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176b|9B3176b]]&lt;br /&gt;
| HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| [[HoodooYabuli 9B3176n|9B3176n]]&lt;br /&gt;
| HoodooYabuli&lt;br /&gt;
| ?&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Firmware]]&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=ECID&amp;diff=76226</id>
		<title>ECID</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=ECID&amp;diff=76226"/>
		<updated>2019-08-02T03:14:46Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''ECID''' ('''Exclusive Chip Identification'''&amp;lt;ref&amp;gt;https://www.apple.com/business/site/docs/iOS_Security_Guide.pdf&amp;lt;/ref&amp;gt; also referred to as '''Unique Chip ID''' in official Apple terms) is an identifier unique to every unit, or more accurately, to every SoC.&lt;br /&gt;
&lt;br /&gt;
It is 64 bits wide, with either the first 12 or 20 bits set to zero (looks like &amp;lt;tt&amp;gt;000??XXXXXXXXXXX&amp;lt;/tt&amp;gt; in hex).&lt;br /&gt;
&lt;br /&gt;
It holds a key position in the [[SHSH Protocol]], being one of 2 elements that limit each [[APTicket]] to a single specific device.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Some tools show it in decimal format while others do it in hexadecimal.&lt;br /&gt;
&lt;br /&gt;
== Getting the ECID ==&lt;br /&gt;
===Via iTunes===&lt;br /&gt;
* Connect your iDevice to your computer.&lt;br /&gt;
* Open iTunes.&lt;br /&gt;
* Navigate to the &amp;quot;Summary&amp;quot; tab for your device.&lt;br /&gt;
* At the top of the panel, click twice on the line that says &amp;quot;Serial Number&amp;quot;.&lt;br /&gt;
* Your ECID is displayed in '''hexadecimal'''.&lt;br /&gt;
&lt;br /&gt;
===Via third-party software===&lt;br /&gt;
====On-device====&lt;br /&gt;
The [http://cydia.saurik.com/package/com.malcolmhall.udidcalculator/ UDID Calculator] application from Cydia displays (among other things) the ECID of your device (shown in '''decimal''').&lt;br /&gt;
&lt;br /&gt;
====Via USB====&lt;br /&gt;
* Install [https://github.com/libimobiledevice/libimobiledevice libimobiledevice].&lt;br /&gt;
* Connect your device over USB.&lt;br /&gt;
* Run &amp;lt;code&amp;gt;ideviceinfo | grep UniqueChipID&amp;lt;/code&amp;gt; command.&lt;br /&gt;
* There should be exactly one line, reading &amp;lt;code&amp;gt;UniqueChipID&amp;lt;/code&amp;gt; followed by your ECID (in '''decimal''').&lt;br /&gt;
* Alternatively you can run &amp;lt;code&amp;gt;ideviceinfo -k UniqueChipID&amp;lt;/code&amp;gt; which fetches the UniqueChipID key directly (which is also faster).&lt;br /&gt;
&lt;br /&gt;
===Via [[Recovery Mode]] or [[DFU Mode]]===&lt;br /&gt;
====Mac Instructions====&lt;br /&gt;
*Put your device in [[Recovery Mode]] or [[DFU Mode]].&lt;br /&gt;
*Open System Profiler. (in /Applications/Utilities/).&lt;br /&gt;
*In the sidebar, go to &amp;quot;USB&amp;quot; (in the &amp;quot;Hardware&amp;quot; section).&lt;br /&gt;
*Under &amp;quot;Serial Number&amp;quot;, there should be a part called &amp;quot;ECID&amp;quot;. There you go.&lt;br /&gt;
&lt;br /&gt;
====Windows Instructions====&lt;br /&gt;
* Put your device in [[Recovery Mode]] or [[DFU Mode]].&lt;br /&gt;
* Open Device Manager and right click on Apple Mobile Device (Recovery or DFU Mode) for properties.&lt;br /&gt;
* Click on the details tab.&lt;br /&gt;
* Click on the dropdown box and select Device Instance Path.&lt;br /&gt;
* You should find it in the textbox.&lt;br /&gt;
&lt;br /&gt;
===Extracting from an SHSH===&lt;br /&gt;
====Img3====&lt;br /&gt;
There are 19 blobs in an SHSH, and the first line of every blob is the same as below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;RElDRUAAAAAIAAAA********AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The * part is the ECID(Dec) encrypted by a certain formula which is &lt;br /&gt;
&lt;br /&gt;
a.Transform ECID(Dec) into ECID(Hex) such as 58608372174291 ---&amp;gt; 35 4D D3 34 4D D3&lt;br /&gt;
&lt;br /&gt;
b.Reverse the ECID(Hex) string such as 35 4D D3 34 4D D3 ---&amp;gt; D3 4D 34 D3 4D 35&lt;br /&gt;
&lt;br /&gt;
c.Transform the string we have got into binary such as D3 4D 34 D3 4D 35 ---&amp;gt; ÓM4ÓM5&lt;br /&gt;
&lt;br /&gt;
d.Encode the binary with base64 such as ÓM4ÓM5 ---&amp;gt; 00000001&lt;br /&gt;
&lt;br /&gt;
Use this formula backward (d. to a.) we can extract the * part into ECID(Dec).&lt;br /&gt;
&lt;br /&gt;
====Img4====&lt;br /&gt;
First, get your apticket.der. There are two options:&lt;br /&gt;
* Copy it from your device in &amp;lt;code&amp;gt;/System/Library/Caches/apticket.der&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Extract it from an SHSH file, e.g. using &amp;lt;code&amp;gt;plutil -extract ApImg4Ticket xml1 -o - *.shsh | xmllint -xpath '/plist/data/text()' - | base64 -D &amp;gt; apticket.der;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Now you can use any old ASN.1 parser to display the file, such as &amp;lt;code&amp;gt;openssl asn1parse -i -inform DER -in apticket.der&amp;lt;/code&amp;gt;.&lt;br /&gt;
To get only the ECID part, use &amp;lt;code&amp;gt;openssl asn1parse -inform DER -in apticket.der | grep -A1 ECID&amp;lt;/code&amp;gt;. It should show on the second line after the colon (in '''hexadecimal''', possibly with a leading zero).&lt;br /&gt;
&lt;br /&gt;
===Developer Instructions===&lt;br /&gt;
On OSX, call &amp;lt;code&amp;gt;AMDeviceCopyValue&amp;lt;/code&amp;gt; in the [[MobileDevice Library|MobileDevice Framework]] with &amp;quot;UniqueChipID&amp;quot;. It returns the ECID as a &amp;lt;code&amp;gt;CFNumberRef(kCFNumberSInt64Type)&amp;lt;/code&amp;gt; object.&lt;br /&gt;
&lt;br /&gt;
Example implementation (all safeties removed, will probably crash if connection fails), compile with &amp;lt;code&amp;gt;clang -F/System/Library/PrivateFrameworks -framework MobileDevice -framework CoreFoundation&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Please ping @s1guza on Twitter if this file stops compiling/working&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;CoreFoundation/CoreFoundation.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Cheap aliases to make things compile without headers&lt;br /&gt;
typedef void am_device;&lt;br /&gt;
typedef void am_device_notification;&lt;br /&gt;
typedef void* am_device_notification_callback_info;&lt;br /&gt;
extern void AMDeviceNotificationSubscribe(void(*callback)(am_device_notification_callback_info *info, void *arg), int unused1, int unused2, void *unknown, am_device_notification** notification);&lt;br /&gt;
extern void AMDeviceConnect(am_device *device);&lt;br /&gt;
extern void AMDeviceStartSession(am_device *device);&lt;br /&gt;
extern void* AMDeviceCopyValue(am_device *device, int unknown, CFStringRef value);&lt;br /&gt;
&lt;br /&gt;
void cb(am_device_notification_callback_info *info, void *arg)&lt;br /&gt;
{&lt;br /&gt;
    uint64_t ecid;&lt;br /&gt;
    am_device *dev = *info; /* info-&amp;gt;dev */&lt;br /&gt;
    CFRetain(dev);&lt;br /&gt;
    AMDeviceConnect(dev);&lt;br /&gt;
    AMDeviceStartSession(dev);&lt;br /&gt;
&lt;br /&gt;
    CFNumberRef ecidRef = AMDeviceCopyValue(dev, 0, CFSTR(&amp;quot;UniqueChipID&amp;quot;));&lt;br /&gt;
    CFNumberGetValue(ecidRef, kCFNumberSInt64Type, &amp;amp;ecid);&lt;br /&gt;
    printf(&amp;quot;ECID: %llX\n&amp;quot;, ecid);&lt;br /&gt;
&lt;br /&gt;
    CFRelease(dev);&lt;br /&gt;
    exit(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    uint32_t buf[5];&lt;br /&gt;
    am_device_notification *notification = (am_device_notification*)buf;&lt;br /&gt;
    AMDeviceNotificationSubscribe(&amp;amp;cb, 0, 0, NULL, &amp;amp;notification);&lt;br /&gt;
    CFRunLoopRun();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=File:Apple_Connect_Icon.png&amp;diff=76157</id>
		<title>File:Apple Connect Icon.png</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=File:Apple_Connect_Icon.png&amp;diff=76157"/>
		<updated>2019-07-25T18:53:57Z</updated>

		<summary type="html">&lt;p&gt;Vanished user 20210509: Wxblank uploaded a new version of File:Apple Connect Icon.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vanished user 20210509</name></author>
		
	</entry>
</feed>