<?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=ChronicDev</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=ChronicDev"/>
	<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/wiki/Special:Contributions/ChronicDev"/>
	<updated>2026-04-29T13:56:11Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.14</generator>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Talk:Address_Mapping&amp;diff=9960</id>
		<title>Talk:Address Mapping</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Talk:Address_Mapping&amp;diff=9960"/>
		<updated>2010-10-06T04:50:40Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: source?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== source? ==&lt;br /&gt;
&lt;br /&gt;
any idea where these came from? they look awfully like the names of functions in an IDB that I made for the bootrom of ipt2 (the one used to analyze bootrom for 24kPwn) about 2 years ago, and I don't think I gave that out to anyone. just curious where you got all the function names. [[User:ChronicDev|Will Strafach]] 04:50, 6 October 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=/Applications/iOS_Diagnostics.app&amp;diff=9857</id>
		<title>/Applications/iOS Diagnostics.app</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=/Applications/iOS_Diagnostics.app&amp;diff=9857"/>
		<updated>2010-10-03T13:43:02Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:IOS-Diagnostics.png|250px|thumb|right]]&lt;br /&gt;
This (hidden) application is an iOS version of an Apple Internal Mac application named &amp;quot;Behavior Scan&amp;quot;, used at the Genius Bar to detect and test different aspects of the device. It was added so that users could be better helped over the phone instead of making them come in to an Apple Store for support.&lt;br /&gt;
&lt;br /&gt;
It sends data about the device to  https://iosdiags.apple.com/MR3Server/MR3Post. The URL schema that it utilizes is &amp;lt;code&amp;gt;diags://&amp;lt;ticket number&amp;gt;&amp;lt;/code&amp;gt;, where &amp;lt;ticket number&amp;gt; is the support ticket number given to them by Apple over the phone to allow them to send tehir device's data over to Apple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
==Localization strings==&lt;br /&gt;
Extracting its English localization strings yields these:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;word-wrap:break-word;&amp;quot;&amp;gt;&lt;br /&gt;
/* Privacy Information */&lt;br /&gt;
&amp;quot;By clicking “Send to Apple” you agree that Apple may periodically collect diagnostic data from this device, including the device serial number, device name and daily count of call attempts. This data will be used to troubleshoot issues with your device and to improve our products and services. For information on Apple’s Privacy Policy, see &amp;lt;a href=\&amp;quot;http://www.apple.com/legal/privacy\&amp;quot;&amp;gt;http://www.apple.com/legal/privacy&amp;lt;/a&amp;gt;.&amp;quot; = &amp;quot;By clicking “Send to Apple” you agree that Apple may periodically collect diagnostic data from this device, including the device serial number, device name and daily count of call attempts. This data will be used to troubleshoot issues with your device and to improve our products and services. For information on Apple’s Privacy Policy, see &amp;lt;a href=\&amp;quot;http://www.apple.com/legal/privacy\&amp;quot;&amp;gt;http://www.apple.com/legal/privacy&amp;lt;/a&amp;gt;.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Cancel */&lt;br /&gt;
&amp;quot;Cancel&amp;quot; = &amp;quot;Cancel&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Done */&lt;br /&gt;
&amp;quot;Done&amp;quot; = &amp;quot;Done&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* App Title */&lt;br /&gt;
&amp;quot;iOS Diagnostics&amp;quot; = &amp;quot;iOS Diagnostics&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Last Sent: */&lt;br /&gt;
&amp;quot;Last Sent:&amp;quot; = &amp;quot;Last Sent:&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Never */&lt;br /&gt;
&amp;quot;Never&amp;quot; = &amp;quot;Never&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Next */&lt;br /&gt;
&amp;quot;Next&amp;quot; = &amp;quot;Next&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* OK */&lt;br /&gt;
&amp;quot;OK&amp;quot; = &amp;quot;OK&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Send to Apple */&lt;br /&gt;
&amp;quot;Send to Apple&amp;quot; = &amp;quot;Send to Apple&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Sending to Apple... */&lt;br /&gt;
&amp;quot;Sending to Apple...&amp;quot; = &amp;quot;Sending to Apple...&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Ticket number is not valid error message */&lt;br /&gt;
&amp;quot;The ticket number was not found. Verify the number and try again.&amp;quot; = &amp;quot;The ticket number was not found. Verify the number and try again.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Submission error message */&lt;br /&gt;
&amp;quot;There was an issue with your submission. Please make sure you are connected to the internet and try again.&amp;quot; = &amp;quot;There was an issue with your submission. Please make sure you are connected to the internet and try again.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Ticket Number Placeholder */&lt;br /&gt;
&amp;quot;Ticket Number&amp;quot; = &amp;quot;Ticket Number&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Ticket Number: */&lt;br /&gt;
&amp;quot;Ticket Number:&amp;quot; = &amp;quot;Ticket Number:&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Ticket validation server is unavailable error message */&lt;br /&gt;
&amp;quot;Ticket validation has failed. Please make sure you are connected to the internet and try again.&amp;quot; = &amp;quot;Ticket validation has failed. Please make sure you are connected to the internet and try again.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Enter Ticket Number */&lt;br /&gt;
&amp;quot;To receive support services, enter the ticket number you were given.&amp;quot; = &amp;quot;To receive support services, enter the ticket number you were given.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Submission success message */&lt;br /&gt;
&amp;quot;Your information has been received by Apple.&amp;quot; = &amp;quot;Your information has been received by Apple.&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[http://forums.macrumors.com/showthread.php?t=1008756 Analysis on MacRumors forums]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=/Applications/iOS_Diagnostics.app&amp;diff=9856</id>
		<title>/Applications/iOS Diagnostics.app</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=/Applications/iOS_Diagnostics.app&amp;diff=9856"/>
		<updated>2010-10-03T13:42:29Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: Added some information, removed other useless information along with false information.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:IOS-Diagnostics.png|250px|thumb|right]]&lt;br /&gt;
This (hidden) application is an iOS version of an Apple Internal Mac application named &amp;quot;Behavior Scan&amp;quot;, used at the Genius Bar to detect and test different aspects of the device. It was added so that users could be better helped over the phone instead of making them come in to an Apple Store for support.&lt;br /&gt;
&lt;br /&gt;
It sends data about the device to  https://iosdiags.apple.com/MR3Server/MR3Post. It's URL schema is &amp;lt;code&amp;gt;diags://&amp;lt;ticket number&amp;gt;&amp;lt;/code&amp;gt;, where &amp;lt;ticket number&amp;gt; is the support ticket number given to them by Apple over the phone to allow them to send tehir device's data over to Apple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
==Localization strings==&lt;br /&gt;
Extracting its English localization strings yields these:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;word-wrap:break-word;&amp;quot;&amp;gt;&lt;br /&gt;
/* Privacy Information */&lt;br /&gt;
&amp;quot;By clicking “Send to Apple” you agree that Apple may periodically collect diagnostic data from this device, including the device serial number, device name and daily count of call attempts. This data will be used to troubleshoot issues with your device and to improve our products and services. For information on Apple’s Privacy Policy, see &amp;lt;a href=\&amp;quot;http://www.apple.com/legal/privacy\&amp;quot;&amp;gt;http://www.apple.com/legal/privacy&amp;lt;/a&amp;gt;.&amp;quot; = &amp;quot;By clicking “Send to Apple” you agree that Apple may periodically collect diagnostic data from this device, including the device serial number, device name and daily count of call attempts. This data will be used to troubleshoot issues with your device and to improve our products and services. For information on Apple’s Privacy Policy, see &amp;lt;a href=\&amp;quot;http://www.apple.com/legal/privacy\&amp;quot;&amp;gt;http://www.apple.com/legal/privacy&amp;lt;/a&amp;gt;.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Cancel */&lt;br /&gt;
&amp;quot;Cancel&amp;quot; = &amp;quot;Cancel&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Done */&lt;br /&gt;
&amp;quot;Done&amp;quot; = &amp;quot;Done&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* App Title */&lt;br /&gt;
&amp;quot;iOS Diagnostics&amp;quot; = &amp;quot;iOS Diagnostics&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Last Sent: */&lt;br /&gt;
&amp;quot;Last Sent:&amp;quot; = &amp;quot;Last Sent:&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Never */&lt;br /&gt;
&amp;quot;Never&amp;quot; = &amp;quot;Never&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Next */&lt;br /&gt;
&amp;quot;Next&amp;quot; = &amp;quot;Next&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* OK */&lt;br /&gt;
&amp;quot;OK&amp;quot; = &amp;quot;OK&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Send to Apple */&lt;br /&gt;
&amp;quot;Send to Apple&amp;quot; = &amp;quot;Send to Apple&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Sending to Apple... */&lt;br /&gt;
&amp;quot;Sending to Apple...&amp;quot; = &amp;quot;Sending to Apple...&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Ticket number is not valid error message */&lt;br /&gt;
&amp;quot;The ticket number was not found. Verify the number and try again.&amp;quot; = &amp;quot;The ticket number was not found. Verify the number and try again.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Submission error message */&lt;br /&gt;
&amp;quot;There was an issue with your submission. Please make sure you are connected to the internet and try again.&amp;quot; = &amp;quot;There was an issue with your submission. Please make sure you are connected to the internet and try again.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Ticket Number Placeholder */&lt;br /&gt;
&amp;quot;Ticket Number&amp;quot; = &amp;quot;Ticket Number&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Ticket Number: */&lt;br /&gt;
&amp;quot;Ticket Number:&amp;quot; = &amp;quot;Ticket Number:&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Ticket validation server is unavailable error message */&lt;br /&gt;
&amp;quot;Ticket validation has failed. Please make sure you are connected to the internet and try again.&amp;quot; = &amp;quot;Ticket validation has failed. Please make sure you are connected to the internet and try again.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Enter Ticket Number */&lt;br /&gt;
&amp;quot;To receive support services, enter the ticket number you were given.&amp;quot; = &amp;quot;To receive support services, enter the ticket number you were given.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* Submission success message */&lt;br /&gt;
&amp;quot;Your information has been received by Apple.&amp;quot; = &amp;quot;Your information has been received by Apple.&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[http://forums.macrumors.com/showthread.php?t=1008756 Analysis on MacRumors forums]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Kernel_Syscalls&amp;diff=9829</id>
		<title>Kernel Syscalls</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Kernel_Syscalls&amp;diff=9829"/>
		<updated>2010-10-02T19:27:48Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* CPU */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Note on these ==&lt;br /&gt;
Args go in their normal registers, like arg1 in R0, as usual...&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
'''Unconfirmed''': These may not work on iOS 4 and beyond.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MOV R3, #x // number from list&lt;br /&gt;
MOV IP, #0x80000000&lt;br /&gt;
swi 0x80&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== List ===&lt;br /&gt;
* '''Clear Instruction Cache''': 0&lt;br /&gt;
* '''Flush Data Cache''': 1&lt;br /&gt;
* '''_pthread_set_self''': 2&lt;br /&gt;
* '''Unknown''': 3&lt;br /&gt;
&lt;br /&gt;
== Unix ==&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MOV IP, #x // number from list&lt;br /&gt;
swi 0x80&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== List ===&lt;br /&gt;
* '''exit''': 1&lt;br /&gt;
* '''fork''': 2&lt;br /&gt;
* '''read''': 3&lt;br /&gt;
* '''write''': 4&lt;br /&gt;
* '''open''': 5&lt;br /&gt;
* '''close''': 6&lt;br /&gt;
* '''wait4''': 7&lt;br /&gt;
* '''link''': 9&lt;br /&gt;
* '''unlink''': 10&lt;br /&gt;
* '''chdir''': 12&lt;br /&gt;
* '''fchdir''': 13&lt;br /&gt;
* '''mknod''': 14&lt;br /&gt;
* '''chmod''': 15&lt;br /&gt;
* '''chown''': 16&lt;br /&gt;
* '''getfsstat''': 18&lt;br /&gt;
* '''getpid''': 20&lt;br /&gt;
* '''setuid''': 23&lt;br /&gt;
* '''getuid''': 24&lt;br /&gt;
* '''geteuid''': 25&lt;br /&gt;
* '''ptrace''': 26&lt;br /&gt;
* '''recvmsg''': 27&lt;br /&gt;
* '''sendmsg''': 28&lt;br /&gt;
* '''recvfrom''': 29&lt;br /&gt;
* '''accept''': 30&lt;br /&gt;
* '''getpeername''': 31&lt;br /&gt;
* '''getsockname''': 32&lt;br /&gt;
* '''access''': 33&lt;br /&gt;
* '''chflags''': 34&lt;br /&gt;
* '''fchflags''': 35&lt;br /&gt;
* '''sync''': 36&lt;br /&gt;
* '''kill''': 37&lt;br /&gt;
* '''getppid''': 39&lt;br /&gt;
* '''dup''': 41&lt;br /&gt;
* '''pipe''': 42&lt;br /&gt;
* '''getegid''': 43&lt;br /&gt;
* '''profil''': 44&lt;br /&gt;
* '''sigaction''': 46&lt;br /&gt;
* '''getgid''': 47&lt;br /&gt;
* '''sigprocmask''': 48&lt;br /&gt;
* '''getlogin''': 49&lt;br /&gt;
* '''setlogin''': 50&lt;br /&gt;
* '''acct''': 51&lt;br /&gt;
* '''sigpending''': 52&lt;br /&gt;
* '''signalstack''': 53&lt;br /&gt;
* '''ioctl''': 54&lt;br /&gt;
* '''reboot''': 55&lt;br /&gt;
* '''revoke''': 56&lt;br /&gt;
* '''symlink''': 57&lt;br /&gt;
* '''readlink''': 58&lt;br /&gt;
* '''execve''': 59&lt;br /&gt;
* '''umask''': 60&lt;br /&gt;
* '''chroot''': 61&lt;br /&gt;
* '''msync''': 65&lt;br /&gt;
* '''vfork''': 66&lt;br /&gt;
* '''munmap''': 73&lt;br /&gt;
* '''mprotect''': 74&lt;br /&gt;
* '''madvise''': 75&lt;br /&gt;
* '''mincore''': 78&lt;br /&gt;
* '''getgroups''': 79&lt;br /&gt;
* '''setgroups''': 80&lt;br /&gt;
* '''getpgrp''': 81&lt;br /&gt;
* '''setpgid''': 82&lt;br /&gt;
* '''setitimer''': 83&lt;br /&gt;
* '''swapon''': 85&lt;br /&gt;
* '''getitimer''': 86&lt;br /&gt;
* '''getdtablesize''': 89&lt;br /&gt;
* '''dup2''': 90&lt;br /&gt;
* '''fnctl''': 92&lt;br /&gt;
* '''select''': 93&lt;br /&gt;
* '''fsync''': 95&lt;br /&gt;
* '''setpriority''': 96&lt;br /&gt;
* '''socket''': 97&lt;br /&gt;
* '''connect''': 98&lt;br /&gt;
* '''getpriority''': 100&lt;br /&gt;
* '''bind''': 104&lt;br /&gt;
* '''setsockopt''': 105&lt;br /&gt;
* '''listen''': 106&lt;br /&gt;
* '''sigsuspend''': 111&lt;br /&gt;
* '''gettimeofday''': 116&lt;br /&gt;
* '''getrusage''': 117&lt;br /&gt;
* '''getsockopt''': 118&lt;br /&gt;
* '''readv''': 120&lt;br /&gt;
* '''writev''': 121&lt;br /&gt;
* '''settimeofday''': 122&lt;br /&gt;
* '''fchown''': 123&lt;br /&gt;
* '''fchmod''': 124&lt;br /&gt;
* '''setreuid''': 126&lt;br /&gt;
* '''setregid''': 127&lt;br /&gt;
* '''rename''': 128&lt;br /&gt;
* '''flock''': 131&lt;br /&gt;
* '''mkfifo''': 132&lt;br /&gt;
* '''sendto''': 133&lt;br /&gt;
* '''shutdown''': 134&lt;br /&gt;
* '''socketpair''': 135&lt;br /&gt;
* '''mkdir''': 136&lt;br /&gt;
* '''rmdir''': 137&lt;br /&gt;
* '''utimes''': 138&lt;br /&gt;
* '''futimes''': 139&lt;br /&gt;
* '''adjtime''': 140&lt;br /&gt;
* '''gethostuuid''': 142&lt;br /&gt;
* '''setsid''': 145&lt;br /&gt;
* '''getpgid''': 151&lt;br /&gt;
* '''setprivexec''': 152&lt;br /&gt;
* '''pread''': 153&lt;br /&gt;
* '''pwrite''': 154&lt;br /&gt;
* '''statfs''': 157&lt;br /&gt;
* '''fstatfs''': 158&lt;br /&gt;
* '''unmount''': 159&lt;br /&gt;
* '''quotactl''': 165&lt;br /&gt;
* '''mount''': 167&lt;br /&gt;
* '''csops''': 169&lt;br /&gt;
* '''waitid''': 173&lt;br /&gt;
* '''add_profil''': 176&lt;br /&gt;
* '''kdebug_trace''': 180&lt;br /&gt;
* '''setgid''': 181&lt;br /&gt;
* '''setegid''': 182&lt;br /&gt;
* '''seteuid''': 183&lt;br /&gt;
* '''sigreturn''': 184&lt;br /&gt;
* '''chod''': 185&lt;br /&gt;
* '''fdatasync''': 187&lt;br /&gt;
* '''stat''': 188&lt;br /&gt;
* '''fstat''': 189&lt;br /&gt;
* '''lstat''': 190&lt;br /&gt;
* '''pathconf''': 191&lt;br /&gt;
* '''fpathconf''': 192&lt;br /&gt;
* '''getrlimit''': 194&lt;br /&gt;
* '''setrlimit''': 195&lt;br /&gt;
* '''getdirentries''': 196&lt;br /&gt;
* '''mmap''': 197&lt;br /&gt;
* '''lseek''': 199&lt;br /&gt;
* '''truncate''': 200&lt;br /&gt;
* '''ftruncate''': 201&lt;br /&gt;
* '''__sysctl''': 202&lt;br /&gt;
* '''mlock''': 203&lt;br /&gt;
* '''munlock''': 204&lt;br /&gt;
* '''undelete''': 205&lt;br /&gt;
* '''mkcomplex''': 216&lt;br /&gt;
* '''statv''': 217&lt;br /&gt;
* '''lstatv''': 218&lt;br /&gt;
* '''fstatv''': 219&lt;br /&gt;
* '''getattrlist''': 220&lt;br /&gt;
* '''setattrlist''': 221&lt;br /&gt;
* '''getdirentriesattr''': 222&lt;br /&gt;
* '''exchangedata''': 223&lt;br /&gt;
* '''fsgetpath''': 224&lt;br /&gt;
* '''searchfs''': 225&lt;br /&gt;
* '''delete''': 226&lt;br /&gt;
* '''copyfile''': 227&lt;br /&gt;
* '''fgetattrlist''': 228&lt;br /&gt;
* '''fsetattrlist''': 229&lt;br /&gt;
* '''poll''': 230&lt;br /&gt;
* '''watchevent''': 231&lt;br /&gt;
* '''waitevent''': 232&lt;br /&gt;
* '''modwatch''': 233&lt;br /&gt;
* '''getxattr''': 234&lt;br /&gt;
* '''fgetxattr''': 235&lt;br /&gt;
* '''setxattr''': 236&lt;br /&gt;
* '''fsetxattr''': 237&lt;br /&gt;
* '''removexattr''': 238&lt;br /&gt;
* '''fremovexattr''': 239&lt;br /&gt;
* '''listxattr''': 240&lt;br /&gt;
* '''flistxattr''': 241&lt;br /&gt;
* '''fsctl''': 242&lt;br /&gt;
* '''initgroups''': 243&lt;br /&gt;
* '''posix_spawn''': 244&lt;br /&gt;
* '''ffsctl''': 245&lt;br /&gt;
* '''minherit''': 250&lt;br /&gt;
* '''shm_open''': 266&lt;br /&gt;
* '''shm_unlink''': 267&lt;br /&gt;
* '''sem_open''': 268&lt;br /&gt;
* '''sem_close''': 269&lt;br /&gt;
* '''sem_unlink''': 270&lt;br /&gt;
* '''sem_wait''': 271&lt;br /&gt;
* '''sem_trywait''': 272&lt;br /&gt;
* '''sem_post''': 273&lt;br /&gt;
* '''sem_getvalue''': 274&lt;br /&gt;
* '''sem_init''': 275&lt;br /&gt;
* '''sem_destroy''': 276&lt;br /&gt;
* '''open_extended''': 277&lt;br /&gt;
* '''umask_extended''': 278&lt;br /&gt;
* '''stat_extended''': 279&lt;br /&gt;
* '''lstat_extended''': 280&lt;br /&gt;
* '''fstat_extended''': 281&lt;br /&gt;
* '''chmod_extended''': 282&lt;br /&gt;
* '''fchmod_extended''': 283&lt;br /&gt;
* '''access_extended''': 284&lt;br /&gt;
* '''settid''': 285&lt;br /&gt;
* '''gettid''': 286&lt;br /&gt;
* '''setsgroups''': 287&lt;br /&gt;
* '''getsgroups''': 288&lt;br /&gt;
* '''setwgroups''': 289&lt;br /&gt;
* '''getwgroups''': 290&lt;br /&gt;
* '''mkfifo_extended''': 291&lt;br /&gt;
* '''mkdir_extended''': 292&lt;br /&gt;
* '''identitysvc''': 293&lt;br /&gt;
* '''shared_region_check_np''': 294&lt;br /&gt;
* '''shared_region_map_np''': 295&lt;br /&gt;
* '''vm_pressure_monitor''': 296&lt;br /&gt;
* '''__pthread_mutex_destroy''': 301&lt;br /&gt;
* '''__pthread_mutex_init''': 302&lt;br /&gt;
* '''__pthread_mutex_lock''': 303&lt;br /&gt;
* '''__pthread_mutex_trylock''': 304&lt;br /&gt;
* '''__pthread_mutex_unlock''': 305&lt;br /&gt;
* '''__pthread_cond_init''': 306&lt;br /&gt;
* '''__pthread_cond_destroy''': 307&lt;br /&gt;
* '''__pthread_cond_broadcast''': 308&lt;br /&gt;
* '''__pthread_cond_signal''': 309&lt;br /&gt;
* '''getsid''': 310&lt;br /&gt;
* '''settid_with_pid''': 311&lt;br /&gt;
* '''__pthread_cond_timedwait''': 312&lt;br /&gt;
* '''aio_fsync''': 313&lt;br /&gt;
* '''aio_return''': 314&lt;br /&gt;
* '''aio_suspend''': 315&lt;br /&gt;
* '''aio_cancel''': 316&lt;br /&gt;
* '''aio_error''': 317&lt;br /&gt;
* '''aio_read''': 318&lt;br /&gt;
* '''aio_write''': 319&lt;br /&gt;
* '''lio_listio''': 320&lt;br /&gt;
* '''__pthread_cond_wait''': 321&lt;br /&gt;
* '''iopolicysys''': 322&lt;br /&gt;
* '''mlockall''': 324&lt;br /&gt;
* '''munlockall''': 325&lt;br /&gt;
* '''issetugid''': 327&lt;br /&gt;
* '''__pthread_kill''': 328&lt;br /&gt;
* '''__pthread_sigmask''': 329&lt;br /&gt;
* '''__sigwait''': 330&lt;br /&gt;
* '''__disable_threadsignal''': 331&lt;br /&gt;
* '''__pthread_markcancel''': 332&lt;br /&gt;
* '''__pthread_canceled''': 333&lt;br /&gt;
* '''proc_info''': 336&lt;br /&gt;
* '''stat64''': 338&lt;br /&gt;
* '''fstat64''': 339&lt;br /&gt;
* '''lstat64''': 340&lt;br /&gt;
* '''stat64_extended''': 341&lt;br /&gt;
* '''lstat64_extended''': 342&lt;br /&gt;
* '''fstat64_extended''': 343&lt;br /&gt;
* '''getdirectories64''': 344&lt;br /&gt;
* '''statfs64''': 345&lt;br /&gt;
* '''fstatfs64''': 346&lt;br /&gt;
* '''getfsstat64''': 347&lt;br /&gt;
* '''__pthread_chdir''': 348&lt;br /&gt;
* '''__pthread_fchdir''': 349&lt;br /&gt;
* '''kqueue''': 362&lt;br /&gt;
* '''kevent''': 363&lt;br /&gt;
* '''lchown''': 364&lt;br /&gt;
* '''stack_snapshot''': 365&lt;br /&gt;
* '''kevent64''': 369&lt;br /&gt;
* '''__semwait_signal''': 370&lt;br /&gt;
* '''__semwait_signal_nocancel''': 371&lt;br /&gt;
* '''__mac_execve''': 380&lt;br /&gt;
* '''__mac_syscall''': 381&lt;br /&gt;
* '''__mac_get_file''': 382&lt;br /&gt;
* '''__mac_set_file''': 383&lt;br /&gt;
* '''__mac_get_link''': 384&lt;br /&gt;
* '''__mac_set_link''': 385&lt;br /&gt;
* '''__mac_get_proc''': 386&lt;br /&gt;
* '''__mac_set_proc''': 387&lt;br /&gt;
* '''__mac_get_fd''': 388&lt;br /&gt;
* '''__mac_set_fd''': 389&lt;br /&gt;
* '''__mac_get_pid''': 390&lt;br /&gt;
* '''__mac_get_lcid''': 391&lt;br /&gt;
* '''__mac_get_lctx''': 392&lt;br /&gt;
* '''__mac_set_lctx''': 393&lt;br /&gt;
* '''setlcid''': 394&lt;br /&gt;
* '''getlcid''': 395&lt;br /&gt;
* '''read_nocancel''': 396&lt;br /&gt;
* '''write_nocancel''': 397&lt;br /&gt;
* '''open_nocancel''': 398&lt;br /&gt;
* '''close_nocancel''': 399&lt;br /&gt;
* '''wait4_nocancel''': 400&lt;br /&gt;
* '''recvmsg_nocancel''': 401&lt;br /&gt;
* '''sendmsg_nocancel''': 402&lt;br /&gt;
* '''recvfrom_nocancel''': 403&lt;br /&gt;
* '''accept_nocancel''': 404&lt;br /&gt;
* '''msync_nocancel''': 405&lt;br /&gt;
* '''fnctl_nocancel''': 406&lt;br /&gt;
* '''select_nocancel''': 407&lt;br /&gt;
* '''fsync_nocancel''': 408&lt;br /&gt;
* '''connect_nocancel''': 409&lt;br /&gt;
* '''sigsuspend_nocancel''': 410&lt;br /&gt;
* '''readv_nocancel''': 411&lt;br /&gt;
* '''writev_nocancel''': 412&lt;br /&gt;
* '''sendto_nocancel''': 413&lt;br /&gt;
* '''pread_nocancel''': 414&lt;br /&gt;
* '''pwrite_nocancel''': 415&lt;br /&gt;
* '''waitid_nocancel''': 416&lt;br /&gt;
* '''poll_nocancel''': 417&lt;br /&gt;
* '''sem_wait_nocancel''': 420&lt;br /&gt;
* '''aio_suspend_nocancel''': 421&lt;br /&gt;
* '''__sigwait_nocancel''': 422&lt;br /&gt;
* '''__mac_mount''': 423&lt;br /&gt;
* '''__mac_get_mount''': 424&lt;br /&gt;
* '''fsgetpath_1''': 425&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Talk:PurpleRestore&amp;diff=9822</id>
		<title>Talk:PurpleRestore</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Talk:PurpleRestore&amp;diff=9822"/>
		<updated>2010-10-02T14:43:46Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Where does the Reverse Engineer Information come from? From the original program ? --[[User:M2m|M2m]] 08:10, 1 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I just removed it. According to page history it came from [[User:EinCodierer|EinCodierer]], someone just beginning to learn assembler. These few assembler instructions weren't of any help understanding [[PurpleRestore]]. -- [[User:Http|http]] 10:35, 1 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Would just be interesting if this is some hidden code out fo itunes, the iphone kernel or wherever else... not just code without knowing here it came from .... --[[User:M2m|M2m]] 11:24, 1 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::That specific code that the user posted is from iTunes. It will detect if PurpleRestore is running so taht it does not interfere with any operations that PurpleRestore is performing. [[User:ChronicDev|Will Strafach]] 14:43, 2 October 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=S5L8930&amp;diff=9662</id>
		<title>S5L8930</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=S5L8930&amp;diff=9662"/>
		<updated>2010-09-28T23:59:53Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* Bootrom */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An SoC developed by Apple in-house chip design department. It is currently used in [[k48ap|iPad]], [[N90ap|iPhone 4]], and [[N81ap|iPod Touch 4G]]. Publicly, Apple refers to this chip as the '''A4'''.&lt;br /&gt;
&lt;br /&gt;
== Exploits ==&lt;br /&gt;
&lt;br /&gt;
=== [[iBoot]] ===&lt;br /&gt;
* [http://www.youtube.com/watch?v=0NValNoW5Rc Unreleased Untethered iBoot Exploit]&lt;br /&gt;
&lt;br /&gt;
=== [[S5L8930 (Bootrom)|Bootrom]] ===&lt;br /&gt;
* Unreleased exploit (demonstrated by Geohot)&lt;br /&gt;
* [[SHAtter]] ('''vuln''': [[posixninja]]; '''exploit''': [[pod2g]])&lt;br /&gt;
&lt;br /&gt;
=== [[Kernel]] ===&lt;br /&gt;
* [[BPF STX Kernel Write Exploit]] - Works up to [[iOS]] 3.2&lt;br /&gt;
* [[IOSurface Kernel Exploit]] - Works up to [[iOS]] 3.2.1 (and iOS 4.0 and 4.0.1)&lt;br /&gt;
&lt;br /&gt;
=== [[Userland]] ===&lt;br /&gt;
* [[MobileBackup Copy Exploit]] - Works up to [[iOS]] 3.2&lt;br /&gt;
* [[PDF CFF Font Stack Overflow]] - Works up to [[iOS]] 3.2.1 (and iOS 4.0 and 4.0.1)&lt;br /&gt;
&lt;br /&gt;
== Boot Chain ==&lt;br /&gt;
[[S5L8930 (Bootrom)|Bootrom]]-&amp;gt;[[LLB]]-&amp;gt;[[iBoot]]-&amp;gt;[[Kernel]]-&amp;gt;[[Firmware|System Software]]&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
* '''CPU''': ARM Cortex-A8&lt;br /&gt;
* '''GPU''': PowerVR SGX 535&lt;br /&gt;
* '''A/V Playback''': PowerVR VXD&lt;br /&gt;
* '''RAM''': 256 MB ([[K48ap|iPad]] &amp;amp; [[N81ap|iPod touch 4G]]) or 512 MB ([[N90ap|iPhone 4]])&lt;br /&gt;
&lt;br /&gt;
Aside from the [[N90ap|iPhone 4]]'s additional RAM and an overall higher clock speed, these are the same specifications as the [[S5L8920]] and [[S5L8922]].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[S5L8930 (Bootrom)]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* http://www.apple.com/ipad/specs/&lt;br /&gt;
* http://www.brightsideofnews.com/news/2010/1/27/apple-a4-soc-unveiled---its-an-arm-cpu-and-the-gpu!.aspx&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=S5L8930&amp;diff=9661</id>
		<title>S5L8930</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=S5L8930&amp;diff=9661"/>
		<updated>2010-09-28T23:59:20Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* Bootrom */ fixed credits and removed baseless note at the end&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An SoC developed by Apple in-house chip design department. It is currently used in [[k48ap|iPad]], [[N90ap|iPhone 4]], and [[N81ap|iPod Touch 4G]]. Publicly, Apple refers to this chip as the '''A4'''.&lt;br /&gt;
&lt;br /&gt;
== Exploits ==&lt;br /&gt;
&lt;br /&gt;
=== [[iBoot]] ===&lt;br /&gt;
* [http://www.youtube.com/watch?v=0NValNoW5Rc Unreleased Untethered iBoot Exploit]&lt;br /&gt;
&lt;br /&gt;
=== [[S5L8930 (Bootrom)|Bootrom]] ===&lt;br /&gt;
* Unreleased exploit (demonstrated by Geohot)&lt;br /&gt;
* [[SHAtter]] (**vuln**: [[posixninja]]; **exploit**: [[pod2g]])&lt;br /&gt;
&lt;br /&gt;
=== [[Kernel]] ===&lt;br /&gt;
* [[BPF STX Kernel Write Exploit]] - Works up to [[iOS]] 3.2&lt;br /&gt;
* [[IOSurface Kernel Exploit]] - Works up to [[iOS]] 3.2.1 (and iOS 4.0 and 4.0.1)&lt;br /&gt;
&lt;br /&gt;
=== [[Userland]] ===&lt;br /&gt;
* [[MobileBackup Copy Exploit]] - Works up to [[iOS]] 3.2&lt;br /&gt;
* [[PDF CFF Font Stack Overflow]] - Works up to [[iOS]] 3.2.1 (and iOS 4.0 and 4.0.1)&lt;br /&gt;
&lt;br /&gt;
== Boot Chain ==&lt;br /&gt;
[[S5L8930 (Bootrom)|Bootrom]]-&amp;gt;[[LLB]]-&amp;gt;[[iBoot]]-&amp;gt;[[Kernel]]-&amp;gt;[[Firmware|System Software]]&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
* '''CPU''': ARM Cortex-A8&lt;br /&gt;
* '''GPU''': PowerVR SGX 535&lt;br /&gt;
* '''A/V Playback''': PowerVR VXD&lt;br /&gt;
* '''RAM''': 256 MB ([[K48ap|iPad]] &amp;amp; [[N81ap|iPod touch 4G]]) or 512 MB ([[N90ap|iPhone 4]])&lt;br /&gt;
&lt;br /&gt;
Aside from the [[N90ap|iPhone 4]]'s additional RAM and an overall higher clock speed, these are the same specifications as the [[S5L8920]] and [[S5L8922]].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[S5L8930 (Bootrom)]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* http://www.apple.com/ipad/specs/&lt;br /&gt;
* http://www.brightsideofnews.com/news/2010/1/27/apple-a4-soc-unveiled---its-an-arm-cpu-and-the-gpu!.aspx&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=S5L8930&amp;diff=9659</id>
		<title>S5L8930</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=S5L8930&amp;diff=9659"/>
		<updated>2010-09-28T23:47:05Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: Reverted edits by ChronicDev (Talk); changed back to last version by Dialexio&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An SoC developed by Apple in-house chip design department. It is currently used in [[k48ap|iPad]], [[N90ap|iPhone 4]], and [[N81ap|iPod Touch 4G]]. Publicly, Apple refers to this chip as the '''A4'''.&lt;br /&gt;
&lt;br /&gt;
== Exploits ==&lt;br /&gt;
&lt;br /&gt;
=== [[iBoot]] ===&lt;br /&gt;
* [http://www.youtube.com/watch?v=0NValNoW5Rc Unreleased Untethered iBoot Exploit]&lt;br /&gt;
&lt;br /&gt;
=== [[S5L8930 (Bootrom)|Bootrom]] ===&lt;br /&gt;
* Unreleased exploit (demonstrated by Geohot)&lt;br /&gt;
* [[SHAtter]] (pod2g)&lt;br /&gt;
(These are most likely the same exploit.)&lt;br /&gt;
&lt;br /&gt;
=== [[Kernel]] ===&lt;br /&gt;
* [[BPF STX Kernel Write Exploit]] - Works up to [[iOS]] 3.2&lt;br /&gt;
* [[IOSurface Kernel Exploit]] - Works up to [[iOS]] 3.2.1 (and iOS 4.0 and 4.0.1)&lt;br /&gt;
&lt;br /&gt;
=== [[Userland]] ===&lt;br /&gt;
* [[MobileBackup Copy Exploit]] - Works up to [[iOS]] 3.2&lt;br /&gt;
* [[PDF CFF Font Stack Overflow]] - Works up to [[iOS]] 3.2.1 (and iOS 4.0 and 4.0.1)&lt;br /&gt;
&lt;br /&gt;
== Boot Chain ==&lt;br /&gt;
[[S5L8930 (Bootrom)|Bootrom]]-&amp;gt;[[LLB]]-&amp;gt;[[iBoot]]-&amp;gt;[[Kernel]]-&amp;gt;[[Firmware|System Software]]&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
* '''CPU''': ARM Cortex-A8&lt;br /&gt;
* '''GPU''': PowerVR SGX 535&lt;br /&gt;
* '''A/V Playback''': PowerVR VXD&lt;br /&gt;
* '''RAM''': 256 MB ([[K48ap|iPad]] &amp;amp; [[N81ap|iPod touch 4G]]) or 512 MB ([[N90ap|iPhone 4]])&lt;br /&gt;
&lt;br /&gt;
Aside from the [[N90ap|iPhone 4]]'s additional RAM and an overall higher clock speed, these are the same specifications as the [[S5L8920]] and [[S5L8922]].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[S5L8930 (Bootrom)]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* http://www.apple.com/ipad/specs/&lt;br /&gt;
* http://www.brightsideofnews.com/news/2010/1/27/apple-a4-soc-unveiled---its-an-arm-cpu-and-the-gpu!.aspx&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=S5L8930&amp;diff=9658</id>
		<title>S5L8930</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=S5L8930&amp;diff=9658"/>
		<updated>2010-09-28T23:37:34Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* Bootrom */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An SoC developed by Apple in-house chip design department. It is currently used in [[k48ap|iPad]], [[N90ap|iPhone 4]], and [[N81ap|iPod Touch 4G]]. Publicly, Apple refers to this chip as the '''A4'''.&lt;br /&gt;
&lt;br /&gt;
== Exploits ==&lt;br /&gt;
&lt;br /&gt;
=== [[iBoot]] ===&lt;br /&gt;
* [http://www.youtube.com/watch?v=0NValNoW5Rc Unreleased Untethered iBoot Exploit]&lt;br /&gt;
&lt;br /&gt;
=== [[S5L8930 (Bootrom)|Bootrom]] ===&lt;br /&gt;
* Unreleased exploit (demonstrated by Geohot)&lt;br /&gt;
* [[SHAtter]] ([[pod2g]], [[posixninja]])&lt;br /&gt;
(These are most likely the same exploit.)&lt;br /&gt;
&lt;br /&gt;
=== [[Kernel]] ===&lt;br /&gt;
* [[BPF STX Kernel Write Exploit]] - Works up to [[iOS]] 3.2&lt;br /&gt;
* [[IOSurface Kernel Exploit]] - Works up to [[iOS]] 3.2.1 (and iOS 4.0 and 4.0.1)&lt;br /&gt;
&lt;br /&gt;
=== [[Userland]] ===&lt;br /&gt;
* [[MobileBackup Copy Exploit]] - Works up to [[iOS]] 3.2&lt;br /&gt;
* [[PDF CFF Font Stack Overflow]] - Works up to [[iOS]] 3.2.1 (and iOS 4.0 and 4.0.1)&lt;br /&gt;
&lt;br /&gt;
== Boot Chain ==&lt;br /&gt;
[[S5L8930 (Bootrom)|Bootrom]]-&amp;gt;[[LLB]]-&amp;gt;[[iBoot]]-&amp;gt;[[Kernel]]-&amp;gt;[[Firmware|System Software]]&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
* '''CPU''': ARM Cortex-A8&lt;br /&gt;
* '''GPU''': PowerVR SGX 535&lt;br /&gt;
* '''A/V Playback''': PowerVR VXD&lt;br /&gt;
* '''RAM''': 256 MB ([[K48ap|iPad]] &amp;amp; [[N81ap|iPod touch 4G]]) or 512 MB ([[N90ap|iPhone 4]])&lt;br /&gt;
&lt;br /&gt;
Aside from the [[N90ap|iPhone 4]]'s additional RAM and an overall higher clock speed, these are the same specifications as the [[S5L8920]] and [[S5L8922]].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[S5L8930 (Bootrom)]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* http://www.apple.com/ipad/specs/&lt;br /&gt;
* http://www.brightsideofnews.com/news/2010/1/27/apple-a4-soc-unveiled---its-an-arm-cpu-and-the-gpu!.aspx&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Main_Page&amp;diff=9622</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Main_Page&amp;diff=9622"/>
		<updated>2010-09-28T11:39:46Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: Since there is no official names (besides with the iPhone lineup), I reclassified to make things easier, and added links to AppleTV&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Logo by iHassan --&amp;gt;&lt;br /&gt;
[[Image:Iptwiki.png|center]]&lt;br /&gt;
&amp;lt;!-- Added a split column information box- computid --&amp;gt;&lt;br /&gt;
{{:Main Page/Welcome}}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:lime; text-align:center; width:25%;&amp;quot;| '''[[Jailbreak (S5L8920+)|Find bootrom exploit allowing unsigned code exec via USB (S5L8920+)]]'''&lt;br /&gt;
|style=&amp;quot;background-color:orange; text-align:center; width:25%;&amp;quot;| '''[[Jailbreak (S5L8920+)|Find bootrom exploit allowing unsigned code exec on startup (S5L8920+)]]'''&lt;br /&gt;
|style=&amp;quot;background-color:orange; text-align:center; width:25%;&amp;quot;| '''[[X-Gold 608 Unlock|Break Chain of Trust (X-Gold 608)]]'''&lt;br /&gt;
|style=&amp;quot;background-color:orange; text-align:center; width:25%;&amp;quot;| '''[[X-Gold 618 Unlock|Break Chain of Trust (X-Gold 618)]]'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{col-begin}}&lt;br /&gt;
{{col-2}}&lt;br /&gt;
{{HeadingA|Software}}&lt;br /&gt;
* [[/|Filesystem]]&lt;br /&gt;
* [[Firmware]]&lt;br /&gt;
* [[iTunes]]&lt;br /&gt;
** [[iTunes Errors]]&lt;br /&gt;
** [[iTunes Modes]]&lt;br /&gt;
* [[Keys]]&lt;br /&gt;
** [[AES Keys]]&lt;br /&gt;
** [[Apple Certificate]]&lt;br /&gt;
** [[Baseband RSA Keys|RSA Keys]]&lt;br /&gt;
** [[Baseband TEA Keys|TEA Keys]]&lt;br /&gt;
** [[NCK]]&lt;br /&gt;
* [[Protocols]]&lt;br /&gt;
** [[Normal Mode]]&lt;br /&gt;
** [[Recovery Mode (Protocols)|Recovery Mode]]&lt;br /&gt;
** [[Restore Mode]]&lt;br /&gt;
** [[DFU (Protocol)|DFU]]&lt;br /&gt;
** [[Baseband Bootrom Protocol]]&lt;br /&gt;
** [[Interactive Mode|Baseband Bootloader Protocol]]&lt;br /&gt;
* [[System Log|System Log (syslog)]]&lt;br /&gt;
&lt;br /&gt;
====Jailbreak Software====&lt;br /&gt;
* [[blackra1n]]&lt;br /&gt;
* [[iBrickr]]&lt;br /&gt;
* [[iLiberty / iLiberty+]]&lt;br /&gt;
* [[iNdependence]]&lt;br /&gt;
* [[JailbreakMe]]&lt;br /&gt;
* [[purplera1n]]&lt;br /&gt;
* [[PwnageTool]]&lt;br /&gt;
* [[redsn0w]]&lt;br /&gt;
* [[sn0wbreeze]]&lt;br /&gt;
* [[Spirit]]&lt;br /&gt;
* [[ZiPhone]]&lt;br /&gt;
&lt;br /&gt;
{{col-2}}&lt;br /&gt;
{{HeadingB|Hardware}}&lt;br /&gt;
====[[iPhone]]====&lt;br /&gt;
* [[M68ap|iPhone (m68ap)]]&lt;br /&gt;
* [[N82ap|iPhone 3G (n82ap)]]&lt;br /&gt;
* [[N88ap|iPhone 3GS (n88ap)]]&lt;br /&gt;
* [[N90ap|iPhone 4 (n90ap)]]&lt;br /&gt;
&lt;br /&gt;
====[[iPod touch]]====&lt;br /&gt;
* [[N45ap|iPod1,1 (n45ap)]]&lt;br /&gt;
* [[N72ap|iPod2,1 (n72ap)]]&lt;br /&gt;
* [[N18ap|iPod3,1 (n18ap)]]&lt;br /&gt;
* [[N81ap|iPod4,1 (n81ap)]]&lt;br /&gt;
&lt;br /&gt;
====[[iPad]]====&lt;br /&gt;
* [[K48ap|iPad1,1]]&lt;br /&gt;
&lt;br /&gt;
====[[Apple TV]]====&lt;br /&gt;
* [[K66ap|AppleTV2,1]]&lt;br /&gt;
&lt;br /&gt;
====Processors====&lt;br /&gt;
* [[S5L8900]] ([[M68ap|iPhone]], [[N45ap|iPod1,1]], [[N82ap|iPhone 3G]])&lt;br /&gt;
* [[S5L8720]] ([[N72ap|iPod2,1]])&lt;br /&gt;
* [[S5L8920]] ([[N88ap|iPhone 3GS]])&lt;br /&gt;
* [[S5L8922]] ([[N18ap|iPod3,1]])&lt;br /&gt;
* [[S5L8930]] ([[k48ap|iPad]], [[n90ap|iPhone 4]], [[n81ap|iPod4,1]], [[K66ap|AppleTV2,1]])&lt;br /&gt;
* [[Baseband Device]]&lt;br /&gt;
&lt;br /&gt;
====Other====&lt;br /&gt;
* [[Bluetooth]]&lt;br /&gt;
{{col-end}}&lt;br /&gt;
&lt;br /&gt;
{{col-begin}}&lt;br /&gt;
{{col-2}}&lt;br /&gt;
{{HeadingA|Development}}&lt;br /&gt;
&lt;br /&gt;
====iPhone Hackers====&lt;br /&gt;
* [[User:Planetbeing|planetbeing]]&lt;br /&gt;
* [[User:MuscleNerd|MuscleNerd]]&lt;br /&gt;
* [[User:Comex|comex]]&lt;br /&gt;
* [[User:Geohot|geohot]]&lt;br /&gt;
&lt;br /&gt;
====iPhone Hacker Teams====&lt;br /&gt;
* [[iPhone Dev Team]]&lt;br /&gt;
* [[Chronic Dev (team)|Chronic Dev]]&lt;br /&gt;
&lt;br /&gt;
====Application Development====&lt;br /&gt;
* [[Toolchain]] (Includes tutorials)&lt;br /&gt;
* [[Toolchain 2.0]] (Includes tutorials)&lt;br /&gt;
* [[Frameworks]]&lt;br /&gt;
* [[MobileDevice Library]]&lt;br /&gt;
* [[Apple Certification Process]]&lt;br /&gt;
* [[Bypassing iPhone Code Signatures]]&lt;br /&gt;
* [[Distribution Methods]]&lt;br /&gt;
&lt;br /&gt;
====Application Copy Protection====&lt;br /&gt;
* [[Copy Protection Overview]]&lt;br /&gt;
* [[Application Structure and Signatures]]&lt;br /&gt;
* [[Mach-O Loading Process]]&lt;br /&gt;
* [[Bugging Debuggers]]&lt;br /&gt;
* [[Defeating Cracks]]&lt;br /&gt;
{{col-2}}&lt;br /&gt;
{{HeadingB|Help}}&lt;br /&gt;
&lt;br /&gt;
====Guides====&lt;br /&gt;
* [[Tutorials]]&lt;br /&gt;
* [[Useful Links]]&lt;br /&gt;
&lt;br /&gt;
====Definitions====&lt;br /&gt;
* [[Activation]]&lt;br /&gt;
* [[Baseband Device|Baseband]]&lt;br /&gt;
* [[Baseband Bootloader|Bootloader]]&lt;br /&gt;
* [[Bootrom]] / [[VROM]]&lt;br /&gt;
* [[CHIPID]]&lt;br /&gt;
* [[CPID]]&lt;br /&gt;
* [[DFU Mode]]&lt;br /&gt;
* [[ECID]]&lt;br /&gt;
* [[iBEC]]&lt;br /&gt;
* [[iBoot]]&lt;br /&gt;
* [[iBSS]]&lt;br /&gt;
* [[Jailbreak]]&lt;br /&gt;
** [[Tethered jailbreak]]&lt;br /&gt;
** [[Untethered jailbreak]]&lt;br /&gt;
* [[Kernel]]&lt;br /&gt;
* [[LLB]]&lt;br /&gt;
* [[NAND]]&lt;br /&gt;
* [[NOR]]&lt;br /&gt;
* [[NORID]]&lt;br /&gt;
* [[SHSH]]&lt;br /&gt;
* [[Unlock]]&lt;br /&gt;
{{col-end}}&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:orange; width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot; style=&amp;quot;background-color:orange; text-align:center;&amp;quot;| [[Disclaimer]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
__NOTOC____NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=BurnIn&amp;diff=5713</id>
		<title>BurnIn</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=BurnIn&amp;diff=5713"/>
		<updated>2009-12-10T23:52:18Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Burnin2.jpg|thumb|left|&amp;quot;Drag To Unlock&amp;quot; screen. Text is &amp;quot;Drag To Unlock&amp;quot; and &amp;quot;Shut Down&amp;quot;|150px]]&lt;br /&gt;
[[Image:Burnin1.jpg|thumb|After &amp;quot;Drag To Unlock&amp;quot; screen, when you &amp;quot;Drag To Unlock&amp;quot;, you get this screen. In order, &amp;quot;Start Burnin&amp;quot;, &amp;quot;Reset Test Enviroment&amp;quot;, and &amp;quot;Quit&amp;quot;|150px]]&lt;br /&gt;
[[Image:Burnin3.jpg|thumb|left|boot logo|150px]]&lt;br /&gt;
'''BurnIn''' is codename for a tool used by Apple. Nothing is really known about it, but somebody on Hackint0sh got their iPhone back with [[BurnIn]] on it, suggesting that it is a diagnotstics or a repair tool.&lt;br /&gt;
&lt;br /&gt;
== What it does ==&lt;br /&gt;
Leftover strings on firmware 2.1 have told me this; Apple restores a special firmware to the iPhone, but it is based on a regular firmware. At boot, /AppleInternal/Applications/SwitchBoard/BurnIn.app/BurnIn will run. It checks /AppleInternal/Diags/purpleskank/config.plist for configuration information, such as version (v3.0 in this case), where to store the logs (/Library/Logs/BurnIn/ in this case), what level to set the backlight to, and also, some kind of cleanup script is defined (/AppleInternal/Diags/Utilities/burnin_cleanup.sh). What it actually does is still not known though. Two log files are also left by it, by doing whatever is done. They are /Library/Logs/BurnIn/burning_log.xml and /Library/Logs/BurnIn/burnin_log.txt.&lt;br /&gt;
&lt;br /&gt;
On the old iPhone prototypes, BurnIn is launched by the /AppleInternal/Applications/SkankPhone.app/SkankPhone, a SpringBoard replacement. It starts the /AppleInternal/Diags/purpleskank/factoryharness, which loads the configuration from config.plist file in the same directory. Factoryharness loads the index.plist file from location specified in config.plist (default is /AppleInternal/Diags/purpleskank/tables/index.plist) and begins to execute the tests specified in index.plist (&amp;quot;Burnin process&amp;quot;). When tests are successful, logs from burnin process are saved to /AppleInternal/Diags/Logs/ (or to other directory that can be set in config.plist). In case of failure, a failures.plist file is created in Logs directory. If Burnin process has not been completed, file state.plist is parsed by factoryharness and it continues the burnin process. If burnin process has failed, Skankphone.app shows a FAILURE screen  and displays contents of burnin_log.txt. To get rid of that screen, user must select the Reset Test Environment option in SkankPhone - it executes the /AppleInternal/Diags/Utilities/burnin_cleanup.sh.&lt;br /&gt;
&lt;br /&gt;
==BurnIn on iPod touch==&lt;br /&gt;
The day of the launch, numerous iPod touches shipped with BurnIn on it. In order to get it off them, you just did a restore. A few of these were sold on eBay.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;BurnIn on iPod touch&amp;quot; widths=&amp;quot;100px&amp;quot; heights=&amp;quot;100px&amp;quot; perrow=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
Image:0.jpg|boot logo&lt;br /&gt;
Image:1.jpg|The main menu.&lt;br /&gt;
Image:2.jpg|Wi-Fi antenna test.&lt;br /&gt;
Image:3.jpg|The &amp;quot;Bluetooth&amp;quot; screen.&lt;br /&gt;
Image:4.jpg|The &amp;quot;Battery&amp;quot; screen.&lt;br /&gt;
Image:5.jpg|The &amp;quot;Accelerometer&amp;quot; menu.&lt;br /&gt;
Image:6.jpg|The &amp;quot;Buttons&amp;quot; menu.&lt;br /&gt;
Image:7.jpg|Speaker screen.&lt;br /&gt;
Image:8.jpg|&amp;quot;Touch&amp;quot; screen.&lt;br /&gt;
Image:9.jpg|The &amp;quot;Serial Number&amp;quot; screen.&lt;br /&gt;
Image:10.jpg|Tests the ambient light sensor.&lt;br /&gt;
Image:11.jpg|A test for any connected headphones.&lt;br /&gt;
Image:12.jpg|The temperature inside the device.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* '''Definition''': http://en.wikipedia.org/wiki/Burn-in&lt;br /&gt;
* '''Video Demonstration (iPod touch - 1.1.0 - Pressing random options)''': http://www.youtube.com/watch?v=nVMY1aC1kk4&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=NitroKey&amp;diff=5709</id>
		<title>NitroKey</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=NitroKey&amp;diff=5709"/>
		<updated>2009-12-09T02:28:34Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[NitroKey]] was a product released in late February of 2009, by the company &amp;quot;NitroKey,&amp;quot; in order to aid those with a tethered jailbroken [[N72ap|iPod touch 2G]] to boot their iPods. It consisted of a small dongle that looked EXACTLY like the end of an iPod cable, with no cord on it. The product was being sold for an outrageous price of $55.00 to those unfortunate enough to have made the decision to purchase one, as it went obsolete not two weeks after its release.&lt;br /&gt;
&lt;br /&gt;
They also released a stolen version of the [[24kPwn]] untethered [[N72ap|iPod Touch 2G]] jailbreak, giving Apple enough time to fix the 3rd generation iPod Touch so that it CANNOT be directly jailbroken from its release. In addition, NitroKey's irresponsible handling gave Apple enough time to add the [[ECID]] tag to the [[IMG3 File Format|IMG3 format]] in the [[N88AP|iPhone 3GS]], preventing a permanent untethered [[jailbreak]] without a new [[iBoot]] exploit in every firmware exploit.&lt;br /&gt;
&lt;br /&gt;
NitroKey has also leaked a [[baseband]] hole which was meant to be kept in secret - [[AT+FNS]]. [http://nitrokey.com/Hash.html] The hash was posted by NitroKey one day after the exploit was found and shared with the [[dev team]] by [[Oranav]], making things very suspicious. Apple has now patched the hole, needlessly burning an exploit that could have been used as an unlock vector for a future firmware.&lt;br /&gt;
&lt;br /&gt;
May those bastards burn in hell for all eternity.&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=0x24000_Segment_Overflow&amp;diff=5708</id>
		<title>0x24000 Segment Overflow</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=0x24000_Segment_Overflow&amp;diff=5708"/>
		<updated>2009-12-09T02:25:38Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* Timing Impact */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Also known by its codename, 24kPwn, this was the first exploit in the [[S5L8720]] that allowed us to bypass the bootrom signature checks on [[LLB]] and create what is known as an [[untethered jailbreak]].&lt;br /&gt;
&lt;br /&gt;
As of October 2009, seven months after the exposure of this hole, Apple is now selling updated [[iPhone 3GS]] and [[N72ap|iPod Touch 2G]] units with a new bootrom, erasing the vulnerability used by this exploit.&lt;br /&gt;
&lt;br /&gt;
==Credit==&lt;br /&gt;
A &amp;quot;hybrid&amp;quot; dev team, in alphabetical order: '''chronic''', '''CPICH''', '''ius''', '''MuscleNerd''', '''planetbeing''', '''pod2g''', '''posixninja''', et al. (anyone wishing to be unnamed)&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
&lt;br /&gt;
Upon boot-up, the [[S5L8720]] and [[S5L8920]] SoC have a MIU configuration which maps the [[VROM (S5L8720)|Secure ROM]] to 0x0, providing the newly turned on device with an ARM exception vector and the first code to execute. This MIU configuration also maps a small amount of SRAM to 0x22000000 for the [[S5L8720]], and 0x84000000 for the [[S5L8920]]. Statically allocated variables, heap, and stack must use the SRAM, as &amp;quot;[[VROM (S5L8720)|Secure ROM]]&amp;quot; is unwritable. A region of memory starting from (SRAM Start)+0x24000 is used for this purpose. The region of memory from the start of SRAM to (SRAM Start)+0x24000 is used as a buffer for loading the [[LLB|next stage bootloader]] code. The [[LLB]] code is stored in [[NOR]], along with code for all other bootloader stages, as well as art resources (boot logos) and the [[DeviceTree|OpenFirmware device tree]] to provide to the XNU [[kernel]]. The first portion (first 0x160 bytes) of memory at (SRAM Start)+0x24000 is used for initialized statically allocated variables. Shortly after boot, values for that region are initialized from [[VROM (S5L8720)|Secure ROM]].&lt;br /&gt;
&lt;br /&gt;
==Vulnerability==&lt;br /&gt;
&lt;br /&gt;
The code that reads the [[LLB]] [[img3]] firmware file from [[NOR]] into memory does not check the size of the [[LLB]] image being loaded, instead taking the size directly from the non-signature checked portion of the [[img3]] header on the [[NOR]] (see ROM offset 0x2178). Any image greater than 0x24000 bytes in length will begin overwriting the portion of memory used to store Secure ROM statically allocated variables. Immediately vulnerable data includes USB data structures for [[DFU]] mode, a pointer to the bdev list structure, task list structures for the Secure ROM's scheduler, as well as the addresses of the hardware SHA1 registers. All of the above are potential avenues for exploitation.  The method described below uses the SHA1 register addresses.&lt;br /&gt;
&lt;br /&gt;
This vulnerability was discovered independently by '''pod2g''' and '''MuscleNerd'''.&lt;br /&gt;
&lt;br /&gt;
== Exploit==&lt;br /&gt;
&lt;br /&gt;
The goal of the exploit is to gain arbitrary code execution capability.&lt;br /&gt;
&lt;br /&gt;
The exploit, as proposed by '''planetbeing''', uses the overflow to overwrite one of the addresses of the SHA1 registers. The particular register is the only one that directly copies data to be hashed into the hardware (or into an arbitrary memory location, once the destination address has been overwritten). Code execution is achieved by writing data into the stack, specifically by overwriting the LR of the function performing the write to the &amp;quot;SHA1 register&amp;quot; so that instead of returning to the main SHA1 routine, it returns to a chosen location in memory that contains the payload code. The location chosen is within the range of memory that is filled with the [[LLB]] [[img3]], so that the payload code can be placed within the [[LLB]] [[img3]].&lt;br /&gt;
&lt;br /&gt;
The challenge is determining what to put in as the SHA1 register location so that the right portion of stack can be overwritten with the payload LR. This can be challenging without having access to any sort of exception dump (crash register dumps in the [[SecureROM (S5L8720)|bootrom]] had been disabled by Apple). '''planetbeing''' performed a static analysis of a very detailed IDB produced by '''chronic''' and '''CPICH''' and determined the theoretical call stack for both of the invocations of the SHA1 hardware within the bootrom code [http://pastie.org/414981].&lt;br /&gt;
&lt;br /&gt;
In-situ verification of the LR location was performed by '''posixninja'''. '''CPICH''' discovered a way to alter the [[img3]] DER so that the second invocation of the SHA1 hardware was not performed without affecting the first, allowing better confirmation that this step was performed properly.&lt;br /&gt;
&lt;br /&gt;
The final SHA1 register address was chosen so that the first dword of the DATA tag of the [[LLB]] [[img3]] would replace sub_5E54's LR. This is because this is the first dword of the [[img3]] that can be altered without substantially changing the img3's structure (and possibly disrupting earlier parsing code). The LR replacement must be done the first time the exploit is triggered (by the invocation of sub_5E54), or else the [[SecureROM (S5L8720)|bootrom]] would crash. Since sub_5E54 takes 0x40 bytes of data at a time, the replacement LR thus must be within the first 0x40 bytes of data to be hashed. Data to be hashed starts at 0xC bytes from the start of the [[img3]], and the first dword of the DATA tag is 0x20 bytes from the start of the img3. Thus, the SHA1 register address chosen should be 0x20 - 0xC = 0x14 bytes before sub_5E54's LR. So, it must be 0x2202FE24. Note that the exploit will also trash up to 0x2202FE24 + 0x40 = 0x2202FE64. So a sizeable portion of doComputeSHA1's stack will be trashed as well.&lt;br /&gt;
&lt;br /&gt;
The final exploit [[img3]] was verified by '''posixninja''' under '''planetbeing''''s instructions to allow arbitrary code execution. It was a regular [[Img3]] with padding up to 0x24000 bytes. The next 0x100 bytes were taken from the original initialization values for 0x22024000. However, 0x240FC, the offset of the SHA1 register address, was altered to 0x2202FE24. The first dword of the DATA tag (offset 0x20) was altered to 0x22023000. Payload code was placed at offset 0x23000.&lt;br /&gt;
&lt;br /&gt;
==Payload==&lt;br /&gt;
&lt;br /&gt;
The goal of the payload is to allow an unsigned [[LLB]] to be loaded.&lt;br /&gt;
&lt;br /&gt;
There are several ways that can be used, including directly calling the JumpToMemory function which is designed to prepare the SoC and invoke the [[LLB]] code. However, it's designed to be used on decrypted, unpacked code, and the [[LLB]] code currently resides in an encrypted from within the img3's DATA tag. The simplest solution is thus to use the bootrom's own machinery to decrypt and execute the code.&lt;br /&gt;
&lt;br /&gt;
The final payload evolved out of a discussion between '''pod2g''' and '''planetbeing''', based on an IDB documented by '''pod2g''', '''chronic''', '''CPICH''', et al. The lowest impact solution is to apply the pwnage patch to the rsaCheck subroutine of the bootrom, and returning from the payload from computing the SHA1 without crashing the bootrom. However, in this case, since bootrom text is unwritable, this was not a viable solution.&lt;br /&gt;
&lt;br /&gt;
The next lowest impact solution is to return from the entire parseFirmwareFooter function with a successful value, instead of the failure value it would normally return if signature checks fail. This would skip any remaining code  in that subroutine. This solution did not work in-situ. Failures checking the epoch tags prevented the firmware from being executed. The cause of this was not investigated.&lt;br /&gt;
&lt;br /&gt;
The final payload was to return past the verification of epoch and other tags in the [[LLB]] img3 to a spot right before the DATA tag was loaded from memory and decrypted. R5 was set to 0 to ensure decryption would not be skipped. The original value for the first DATA dword (before we had to overwrite it with the exploit LR) is written back to 0x22000020 by the payload, and the original SHA1 register value was written back to 0x2202FE24 to ensure the payload only activates once.&lt;br /&gt;
&lt;br /&gt;
== Deployment ==&lt;br /&gt;
&lt;br /&gt;
Although the exploitable [[LLB]] can be manually written to [[NOR]] by bootstrapping from a tethered jailbreak, the easiest way is to use the Apple restore process itself. Apple's Restore process will write arbitrary [[img3]]s onto the [[NOR]], even if they fail signature checks. However, the &amp;quot;total size&amp;quot; value of the [[img3]] is fixed up by the kernel before it is written to [[NOR]]. This would negate the exploit. However, '''MuscleNerd''' discovered that this could be bypassed by including the padding in another tag, such as CERT. Then, the written exploit [[LLB]] would have the &amp;quot;correct&amp;quot;, exploitable total size.&lt;br /&gt;
&lt;br /&gt;
==Timing Impact==&lt;br /&gt;
This exploit would have allowed the [[pwnage]] of the next generation iPhone without the discovery of an additional code execution vulnerability (required to write the exploit [[LLB]]), provided that the bug still existed in the next generation's [[SecureROM (S5L8920)|bootrom]]. Even though it was too late to patch the bootrom, it was not too late for Apple to repair the restore process in the stock IPSW, removing the method used to get the exploitive [[LLB]] onto the device. Before, Apple would have no reason to fix this, since writing arbitrary data to [[NOR]] does not negate their chain of trust. However, now that a way has been found, they were able to prioritize a fix for this oversight thus making the permanent [[pwnage]] of future devices significantly more difficult.&lt;br /&gt;
&lt;br /&gt;
Thanks to irresponsible handling of the exploit by a third-party company known as [[NitroKey]] who was interested in making financial gain from the work of others, this eventuality became a near-certainty and pretty much erased the possibility of a day-of-release jailbreak for the [[iPhone 3GS]] and the third-generation [[N18AP|iPod touch]]. In addition, to counteract the exploit, with the early exposure of the exploit, Apple was able to add the [[ECID]] tag to the [[IMG3 File Format|IMG3 format]] in the [[N88AP|iPhone 3GS]]. The early leak of the exploit allowed Apple to understand that an [[iBoot]] exploit would be necessary to flash the required oversized [[LLB]] and through doing so, Apple have prevented this exploit from allowing the [[N88AP|iPhone 3GS]] to be permanently jailbroken through this exploit unless new [[iBoot]] exploits (allowing unsigned code to be run) can be found in every firmware release or a signed copy of an (older) vulnerable version of [[iBoot]] is stored.&lt;br /&gt;
&lt;br /&gt;
May the bastards of [[NitroKey]] burn in hell for all eternity.&lt;br /&gt;
&lt;br /&gt;
==3GS Implementation==&lt;br /&gt;
&lt;br /&gt;
The exploit remains the same in spirit.&lt;br /&gt;
&lt;br /&gt;
The call tree and stacks analysis is very similar although a few bytes here and there changed it slightly. It was again done manually but afterward, and out of fun, an IDA Python Script was written to automate the process. The new static analysis can be seen here [http://pastie.org/551212], and the IDA Python Script for it there [http://github.com/iZsh/IDA-Python-Scripts/].&lt;br /&gt;
&lt;br /&gt;
The main differences are:&lt;br /&gt;
&lt;br /&gt;
* the SRAM is at 0x84000000 instead of 0x22000000&lt;br /&gt;
* the Original value of the first DATA dword is written back to 0x84000040 (which was overwritten by the LR address)&lt;br /&gt;
* the SHA1 register original value is written back to 0x840241CC&lt;br /&gt;
* '''The decrypt flag is not held in R5 anymore''', but in a local variable of the function &amp;quot;my_process_module&amp;quot; (sub_2564). An extra static analysis tells us this variable is held at 0x84033F30, thus that's where you have to store your 0x0 value before returning to this function.&lt;br /&gt;
&lt;br /&gt;
[[Category:Bootrom Exploits]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=0x24000_Segment_Overflow&amp;diff=5707</id>
		<title>0x24000 Segment Overflow</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=0x24000_Segment_Overflow&amp;diff=5707"/>
		<updated>2009-12-09T02:22:36Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* Deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Also known by its codename, 24kPwn, this was the first exploit in the [[S5L8720]] that allowed us to bypass the bootrom signature checks on [[LLB]] and create what is known as an [[untethered jailbreak]].&lt;br /&gt;
&lt;br /&gt;
As of October 2009, seven months after the exposure of this hole, Apple is now selling updated [[iPhone 3GS]] and [[N72ap|iPod Touch 2G]] units with a new bootrom, erasing the vulnerability used by this exploit.&lt;br /&gt;
&lt;br /&gt;
==Credit==&lt;br /&gt;
A &amp;quot;hybrid&amp;quot; dev team, in alphabetical order: '''chronic''', '''CPICH''', '''ius''', '''MuscleNerd''', '''planetbeing''', '''pod2g''', '''posixninja''', et al. (anyone wishing to be unnamed)&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
&lt;br /&gt;
Upon boot-up, the [[S5L8720]] and [[S5L8920]] SoC have a MIU configuration which maps the [[VROM (S5L8720)|Secure ROM]] to 0x0, providing the newly turned on device with an ARM exception vector and the first code to execute. This MIU configuration also maps a small amount of SRAM to 0x22000000 for the [[S5L8720]], and 0x84000000 for the [[S5L8920]]. Statically allocated variables, heap, and stack must use the SRAM, as &amp;quot;[[VROM (S5L8720)|Secure ROM]]&amp;quot; is unwritable. A region of memory starting from (SRAM Start)+0x24000 is used for this purpose. The region of memory from the start of SRAM to (SRAM Start)+0x24000 is used as a buffer for loading the [[LLB|next stage bootloader]] code. The [[LLB]] code is stored in [[NOR]], along with code for all other bootloader stages, as well as art resources (boot logos) and the [[DeviceTree|OpenFirmware device tree]] to provide to the XNU [[kernel]]. The first portion (first 0x160 bytes) of memory at (SRAM Start)+0x24000 is used for initialized statically allocated variables. Shortly after boot, values for that region are initialized from [[VROM (S5L8720)|Secure ROM]].&lt;br /&gt;
&lt;br /&gt;
==Vulnerability==&lt;br /&gt;
&lt;br /&gt;
The code that reads the [[LLB]] [[img3]] firmware file from [[NOR]] into memory does not check the size of the [[LLB]] image being loaded, instead taking the size directly from the non-signature checked portion of the [[img3]] header on the [[NOR]] (see ROM offset 0x2178). Any image greater than 0x24000 bytes in length will begin overwriting the portion of memory used to store Secure ROM statically allocated variables. Immediately vulnerable data includes USB data structures for [[DFU]] mode, a pointer to the bdev list structure, task list structures for the Secure ROM's scheduler, as well as the addresses of the hardware SHA1 registers. All of the above are potential avenues for exploitation.  The method described below uses the SHA1 register addresses.&lt;br /&gt;
&lt;br /&gt;
This vulnerability was discovered independently by '''pod2g''' and '''MuscleNerd'''.&lt;br /&gt;
&lt;br /&gt;
== Exploit==&lt;br /&gt;
&lt;br /&gt;
The goal of the exploit is to gain arbitrary code execution capability.&lt;br /&gt;
&lt;br /&gt;
The exploit, as proposed by '''planetbeing''', uses the overflow to overwrite one of the addresses of the SHA1 registers. The particular register is the only one that directly copies data to be hashed into the hardware (or into an arbitrary memory location, once the destination address has been overwritten). Code execution is achieved by writing data into the stack, specifically by overwriting the LR of the function performing the write to the &amp;quot;SHA1 register&amp;quot; so that instead of returning to the main SHA1 routine, it returns to a chosen location in memory that contains the payload code. The location chosen is within the range of memory that is filled with the [[LLB]] [[img3]], so that the payload code can be placed within the [[LLB]] [[img3]].&lt;br /&gt;
&lt;br /&gt;
The challenge is determining what to put in as the SHA1 register location so that the right portion of stack can be overwritten with the payload LR. This can be challenging without having access to any sort of exception dump (crash register dumps in the [[SecureROM (S5L8720)|bootrom]] had been disabled by Apple). '''planetbeing''' performed a static analysis of a very detailed IDB produced by '''chronic''' and '''CPICH''' and determined the theoretical call stack for both of the invocations of the SHA1 hardware within the bootrom code [http://pastie.org/414981].&lt;br /&gt;
&lt;br /&gt;
In-situ verification of the LR location was performed by '''posixninja'''. '''CPICH''' discovered a way to alter the [[img3]] DER so that the second invocation of the SHA1 hardware was not performed without affecting the first, allowing better confirmation that this step was performed properly.&lt;br /&gt;
&lt;br /&gt;
The final SHA1 register address was chosen so that the first dword of the DATA tag of the [[LLB]] [[img3]] would replace sub_5E54's LR. This is because this is the first dword of the [[img3]] that can be altered without substantially changing the img3's structure (and possibly disrupting earlier parsing code). The LR replacement must be done the first time the exploit is triggered (by the invocation of sub_5E54), or else the [[SecureROM (S5L8720)|bootrom]] would crash. Since sub_5E54 takes 0x40 bytes of data at a time, the replacement LR thus must be within the first 0x40 bytes of data to be hashed. Data to be hashed starts at 0xC bytes from the start of the [[img3]], and the first dword of the DATA tag is 0x20 bytes from the start of the img3. Thus, the SHA1 register address chosen should be 0x20 - 0xC = 0x14 bytes before sub_5E54's LR. So, it must be 0x2202FE24. Note that the exploit will also trash up to 0x2202FE24 + 0x40 = 0x2202FE64. So a sizeable portion of doComputeSHA1's stack will be trashed as well.&lt;br /&gt;
&lt;br /&gt;
The final exploit [[img3]] was verified by '''posixninja''' under '''planetbeing''''s instructions to allow arbitrary code execution. It was a regular [[Img3]] with padding up to 0x24000 bytes. The next 0x100 bytes were taken from the original initialization values for 0x22024000. However, 0x240FC, the offset of the SHA1 register address, was altered to 0x2202FE24. The first dword of the DATA tag (offset 0x20) was altered to 0x22023000. Payload code was placed at offset 0x23000.&lt;br /&gt;
&lt;br /&gt;
==Payload==&lt;br /&gt;
&lt;br /&gt;
The goal of the payload is to allow an unsigned [[LLB]] to be loaded.&lt;br /&gt;
&lt;br /&gt;
There are several ways that can be used, including directly calling the JumpToMemory function which is designed to prepare the SoC and invoke the [[LLB]] code. However, it's designed to be used on decrypted, unpacked code, and the [[LLB]] code currently resides in an encrypted from within the img3's DATA tag. The simplest solution is thus to use the bootrom's own machinery to decrypt and execute the code.&lt;br /&gt;
&lt;br /&gt;
The final payload evolved out of a discussion between '''pod2g''' and '''planetbeing''', based on an IDB documented by '''pod2g''', '''chronic''', '''CPICH''', et al. The lowest impact solution is to apply the pwnage patch to the rsaCheck subroutine of the bootrom, and returning from the payload from computing the SHA1 without crashing the bootrom. However, in this case, since bootrom text is unwritable, this was not a viable solution.&lt;br /&gt;
&lt;br /&gt;
The next lowest impact solution is to return from the entire parseFirmwareFooter function with a successful value, instead of the failure value it would normally return if signature checks fail. This would skip any remaining code  in that subroutine. This solution did not work in-situ. Failures checking the epoch tags prevented the firmware from being executed. The cause of this was not investigated.&lt;br /&gt;
&lt;br /&gt;
The final payload was to return past the verification of epoch and other tags in the [[LLB]] img3 to a spot right before the DATA tag was loaded from memory and decrypted. R5 was set to 0 to ensure decryption would not be skipped. The original value for the first DATA dword (before we had to overwrite it with the exploit LR) is written back to 0x22000020 by the payload, and the original SHA1 register value was written back to 0x2202FE24 to ensure the payload only activates once.&lt;br /&gt;
&lt;br /&gt;
== Deployment ==&lt;br /&gt;
&lt;br /&gt;
Although the exploitable [[LLB]] can be manually written to [[NOR]] by bootstrapping from a tethered jailbreak, the easiest way is to use the Apple restore process itself. Apple's Restore process will write arbitrary [[img3]]s onto the [[NOR]], even if they fail signature checks. However, the &amp;quot;total size&amp;quot; value of the [[img3]] is fixed up by the kernel before it is written to [[NOR]]. This would negate the exploit. However, '''MuscleNerd''' discovered that this could be bypassed by including the padding in another tag, such as CERT. Then, the written exploit [[LLB]] would have the &amp;quot;correct&amp;quot;, exploitable total size.&lt;br /&gt;
&lt;br /&gt;
==Timing Impact==&lt;br /&gt;
This exploit would have allowed the [[pwnage]] of the next generation iPhone without the discovery of an additional code execution vulnerability (required to write the exploit [[LLB]]), provided that the bug still existed in the next generation's bootrom. Even though it was too late to patch the bootrom, it was not too late for Apple to repair the restore process in the stock IPSW, removing the method used to get the exploitive [[LLB]] onto the device. Before, Apple would have no reason to fix this, since writing arbitrary data to [[NOR]] does not negate their chain of trust. However, now that a way has been found, they were able to prioritize a fix for this oversight thus making the permanent [[pwnage]] of future devices significantly more difficult.&lt;br /&gt;
&lt;br /&gt;
Thanks to irresponsible handling of the exploit by a third-party company known as [[NitroKey]] who were interested in making financial gain from the work of others, this eventuality became a near-certainty and pretty much erased the possibility of a day-of-release jailbreak for the [[iPhone 3GS]] and the third-generation iPod touch. In addition, to counteract the exploit, with the early exposure of the exploit, Apple were able to add the [[ECID]] tag to the [[IMG3 File Format|IMG3 format]] in the iPhone 3GS. The early leak of the exploit allowed Apple to understand that an iBoot exploit would be necessary to flash the required oversized LLB and through doing so, Apple have prevented this exploit from allowing the iPhone 3GS to be permanently jailbroken through this exploit unless new iBoot exploits (allowing unsigned code to be run) can be found in every firmware release or a signed copy of an (older) vulnerable version of iBoot is stored.&lt;br /&gt;
&lt;br /&gt;
May the bastards of NitroKey burn in hell for all eternity.&lt;br /&gt;
&lt;br /&gt;
==3GS Implementation==&lt;br /&gt;
&lt;br /&gt;
The exploit remains the same in spirit.&lt;br /&gt;
&lt;br /&gt;
The call tree and stacks analysis is very similar although a few bytes here and there changed it slightly. It was again done manually but afterward, and out of fun, an IDA Python Script was written to automate the process. The new static analysis can be seen here [http://pastie.org/551212], and the IDA Python Script for it there [http://github.com/iZsh/IDA-Python-Scripts/].&lt;br /&gt;
&lt;br /&gt;
The main differences are:&lt;br /&gt;
&lt;br /&gt;
* the SRAM is at 0x84000000 instead of 0x22000000&lt;br /&gt;
* the Original value of the first DATA dword is written back to 0x84000040 (which was overwritten by the LR address)&lt;br /&gt;
* the SHA1 register original value is written back to 0x840241CC&lt;br /&gt;
* '''The decrypt flag is not held in R5 anymore''', but in a local variable of the function &amp;quot;my_process_module&amp;quot; (sub_2564). An extra static analysis tells us this variable is held at 0x84033F30, thus that's where you have to store your 0x0 value before returning to this function.&lt;br /&gt;
&lt;br /&gt;
[[Category:Bootrom Exploits]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=0x24000_Segment_Overflow&amp;diff=5706</id>
		<title>0x24000 Segment Overflow</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=0x24000_Segment_Overflow&amp;diff=5706"/>
		<updated>2009-12-09T02:17:45Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* Exploit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Also known by its codename, 24kPwn, this was the first exploit in the [[S5L8720]] that allowed us to bypass the bootrom signature checks on [[LLB]] and create what is known as an [[untethered jailbreak]].&lt;br /&gt;
&lt;br /&gt;
As of October 2009, seven months after the exposure of this hole, Apple is now selling updated [[iPhone 3GS]] and [[N72ap|iPod Touch 2G]] units with a new bootrom, erasing the vulnerability used by this exploit.&lt;br /&gt;
&lt;br /&gt;
==Credit==&lt;br /&gt;
A &amp;quot;hybrid&amp;quot; dev team, in alphabetical order: '''chronic''', '''CPICH''', '''ius''', '''MuscleNerd''', '''planetbeing''', '''pod2g''', '''posixninja''', et al. (anyone wishing to be unnamed)&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
&lt;br /&gt;
Upon boot-up, the [[S5L8720]] and [[S5L8920]] SoC have a MIU configuration which maps the [[VROM (S5L8720)|Secure ROM]] to 0x0, providing the newly turned on device with an ARM exception vector and the first code to execute. This MIU configuration also maps a small amount of SRAM to 0x22000000 for the [[S5L8720]], and 0x84000000 for the [[S5L8920]]. Statically allocated variables, heap, and stack must use the SRAM, as &amp;quot;[[VROM (S5L8720)|Secure ROM]]&amp;quot; is unwritable. A region of memory starting from (SRAM Start)+0x24000 is used for this purpose. The region of memory from the start of SRAM to (SRAM Start)+0x24000 is used as a buffer for loading the [[LLB|next stage bootloader]] code. The [[LLB]] code is stored in [[NOR]], along with code for all other bootloader stages, as well as art resources (boot logos) and the [[DeviceTree|OpenFirmware device tree]] to provide to the XNU [[kernel]]. The first portion (first 0x160 bytes) of memory at (SRAM Start)+0x24000 is used for initialized statically allocated variables. Shortly after boot, values for that region are initialized from [[VROM (S5L8720)|Secure ROM]].&lt;br /&gt;
&lt;br /&gt;
==Vulnerability==&lt;br /&gt;
&lt;br /&gt;
The code that reads the [[LLB]] [[img3]] firmware file from [[NOR]] into memory does not check the size of the [[LLB]] image being loaded, instead taking the size directly from the non-signature checked portion of the [[img3]] header on the [[NOR]] (see ROM offset 0x2178). Any image greater than 0x24000 bytes in length will begin overwriting the portion of memory used to store Secure ROM statically allocated variables. Immediately vulnerable data includes USB data structures for [[DFU]] mode, a pointer to the bdev list structure, task list structures for the Secure ROM's scheduler, as well as the addresses of the hardware SHA1 registers. All of the above are potential avenues for exploitation.  The method described below uses the SHA1 register addresses.&lt;br /&gt;
&lt;br /&gt;
This vulnerability was discovered independently by '''pod2g''' and '''MuscleNerd'''.&lt;br /&gt;
&lt;br /&gt;
== Exploit==&lt;br /&gt;
&lt;br /&gt;
The goal of the exploit is to gain arbitrary code execution capability.&lt;br /&gt;
&lt;br /&gt;
The exploit, as proposed by '''planetbeing''', uses the overflow to overwrite one of the addresses of the SHA1 registers. The particular register is the only one that directly copies data to be hashed into the hardware (or into an arbitrary memory location, once the destination address has been overwritten). Code execution is achieved by writing data into the stack, specifically by overwriting the LR of the function performing the write to the &amp;quot;SHA1 register&amp;quot; so that instead of returning to the main SHA1 routine, it returns to a chosen location in memory that contains the payload code. The location chosen is within the range of memory that is filled with the [[LLB]] [[img3]], so that the payload code can be placed within the [[LLB]] [[img3]].&lt;br /&gt;
&lt;br /&gt;
The challenge is determining what to put in as the SHA1 register location so that the right portion of stack can be overwritten with the payload LR. This can be challenging without having access to any sort of exception dump (crash register dumps in the [[SecureROM (S5L8720)|bootrom]] had been disabled by Apple). '''planetbeing''' performed a static analysis of a very detailed IDB produced by '''chronic''' and '''CPICH''' and determined the theoretical call stack for both of the invocations of the SHA1 hardware within the bootrom code [http://pastie.org/414981].&lt;br /&gt;
&lt;br /&gt;
In-situ verification of the LR location was performed by '''posixninja'''. '''CPICH''' discovered a way to alter the [[img3]] DER so that the second invocation of the SHA1 hardware was not performed without affecting the first, allowing better confirmation that this step was performed properly.&lt;br /&gt;
&lt;br /&gt;
The final SHA1 register address was chosen so that the first dword of the DATA tag of the [[LLB]] [[img3]] would replace sub_5E54's LR. This is because this is the first dword of the [[img3]] that can be altered without substantially changing the img3's structure (and possibly disrupting earlier parsing code). The LR replacement must be done the first time the exploit is triggered (by the invocation of sub_5E54), or else the [[SecureROM (S5L8720)|bootrom]] would crash. Since sub_5E54 takes 0x40 bytes of data at a time, the replacement LR thus must be within the first 0x40 bytes of data to be hashed. Data to be hashed starts at 0xC bytes from the start of the [[img3]], and the first dword of the DATA tag is 0x20 bytes from the start of the img3. Thus, the SHA1 register address chosen should be 0x20 - 0xC = 0x14 bytes before sub_5E54's LR. So, it must be 0x2202FE24. Note that the exploit will also trash up to 0x2202FE24 + 0x40 = 0x2202FE64. So a sizeable portion of doComputeSHA1's stack will be trashed as well.&lt;br /&gt;
&lt;br /&gt;
The final exploit [[img3]] was verified by '''posixninja''' under '''planetbeing''''s instructions to allow arbitrary code execution. It was a regular [[Img3]] with padding up to 0x24000 bytes. The next 0x100 bytes were taken from the original initialization values for 0x22024000. However, 0x240FC, the offset of the SHA1 register address, was altered to 0x2202FE24. The first dword of the DATA tag (offset 0x20) was altered to 0x22023000. Payload code was placed at offset 0x23000.&lt;br /&gt;
&lt;br /&gt;
==Payload==&lt;br /&gt;
&lt;br /&gt;
The goal of the payload is to allow an unsigned [[LLB]] to be loaded.&lt;br /&gt;
&lt;br /&gt;
There are several ways that can be used, including directly calling the JumpToMemory function which is designed to prepare the SoC and invoke the [[LLB]] code. However, it's designed to be used on decrypted, unpacked code, and the [[LLB]] code currently resides in an encrypted from within the img3's DATA tag. The simplest solution is thus to use the bootrom's own machinery to decrypt and execute the code.&lt;br /&gt;
&lt;br /&gt;
The final payload evolved out of a discussion between '''pod2g''' and '''planetbeing''', based on an IDB documented by '''pod2g''', '''chronic''', '''CPICH''', et al. The lowest impact solution is to apply the pwnage patch to the rsaCheck subroutine of the bootrom, and returning from the payload from computing the SHA1 without crashing the bootrom. However, in this case, since bootrom text is unwritable, this was not a viable solution.&lt;br /&gt;
&lt;br /&gt;
The next lowest impact solution is to return from the entire parseFirmwareFooter function with a successful value, instead of the failure value it would normally return if signature checks fail. This would skip any remaining code  in that subroutine. This solution did not work in-situ. Failures checking the epoch tags prevented the firmware from being executed. The cause of this was not investigated.&lt;br /&gt;
&lt;br /&gt;
The final payload was to return past the verification of epoch and other tags in the [[LLB]] img3 to a spot right before the DATA tag was loaded from memory and decrypted. R5 was set to 0 to ensure decryption would not be skipped. The original value for the first DATA dword (before we had to overwrite it with the exploit LR) is written back to 0x22000020 by the payload, and the original SHA1 register value was written back to 0x2202FE24 to ensure the payload only activates once.&lt;br /&gt;
&lt;br /&gt;
==Deployment==&lt;br /&gt;
&lt;br /&gt;
Although the exploitive [[LLB]] can be manually written to [[NOR]] by bootstrapping from a tethered jailbreak, the easiest way is to use the Apple restore process itself. Apple's Restore process will write arbitrary img3s onto the [[NOR]], even if they fail signature checks. However, the &amp;quot;total size&amp;quot; value of the img3 is fixed up by the kernel before it is written to [[NOR]]. This would negate the exploit. However, '''MuscleNerd''' discovered that this could be bypassed by including the padding in another tag, such as CERT. Then, the written exploit [[LLB]] would have the &amp;quot;correct&amp;quot;, exploitive total size.&lt;br /&gt;
&lt;br /&gt;
==Timing Impact==&lt;br /&gt;
This exploit would have allowed the [[pwnage]] of the next generation iPhone without the discovery of an additional code execution vulnerability (required to write the exploit [[LLB]]), provided that the bug still existed in the next generation's bootrom. Even though it was too late to patch the bootrom, it was not too late for Apple to repair the restore process in the stock IPSW, removing the method used to get the exploitive [[LLB]] onto the device. Before, Apple would have no reason to fix this, since writing arbitrary data to [[NOR]] does not negate their chain of trust. However, now that a way has been found, they were able to prioritize a fix for this oversight thus making the permanent [[pwnage]] of future devices significantly more difficult.&lt;br /&gt;
&lt;br /&gt;
Thanks to irresponsible handling of the exploit by a third-party company known as [[NitroKey]] who were interested in making financial gain from the work of others, this eventuality became a near-certainty and pretty much erased the possibility of a day-of-release jailbreak for the [[iPhone 3GS]] and the third-generation iPod touch. In addition, to counteract the exploit, with the early exposure of the exploit, Apple were able to add the [[ECID]] tag to the [[IMG3 File Format|IMG3 format]] in the iPhone 3GS. The early leak of the exploit allowed Apple to understand that an iBoot exploit would be necessary to flash the required oversized LLB and through doing so, Apple have prevented this exploit from allowing the iPhone 3GS to be permanently jailbroken through this exploit unless new iBoot exploits (allowing unsigned code to be run) can be found in every firmware release or a signed copy of an (older) vulnerable version of iBoot is stored.&lt;br /&gt;
&lt;br /&gt;
May the bastards of NitroKey burn in hell for all eternity.&lt;br /&gt;
&lt;br /&gt;
==3GS Implementation==&lt;br /&gt;
&lt;br /&gt;
The exploit remains the same in spirit.&lt;br /&gt;
&lt;br /&gt;
The call tree and stacks analysis is very similar although a few bytes here and there changed it slightly. It was again done manually but afterward, and out of fun, an IDA Python Script was written to automate the process. The new static analysis can be seen here [http://pastie.org/551212], and the IDA Python Script for it there [http://github.com/iZsh/IDA-Python-Scripts/].&lt;br /&gt;
&lt;br /&gt;
The main differences are:&lt;br /&gt;
&lt;br /&gt;
* the SRAM is at 0x84000000 instead of 0x22000000&lt;br /&gt;
* the Original value of the first DATA dword is written back to 0x84000040 (which was overwritten by the LR address)&lt;br /&gt;
* the SHA1 register original value is written back to 0x840241CC&lt;br /&gt;
* '''The decrypt flag is not held in R5 anymore''', but in a local variable of the function &amp;quot;my_process_module&amp;quot; (sub_2564). An extra static analysis tells us this variable is held at 0x84033F30, thus that's where you have to store your 0x0 value before returning to this function.&lt;br /&gt;
&lt;br /&gt;
[[Category:Bootrom Exploits]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=0x24000_Segment_Overflow&amp;diff=5705</id>
		<title>0x24000 Segment Overflow</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=0x24000_Segment_Overflow&amp;diff=5705"/>
		<updated>2009-12-09T02:14:19Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* Vulnerability */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Also known by its codename, 24kPwn, this was the first exploit in the [[S5L8720]] that allowed us to bypass the bootrom signature checks on [[LLB]] and create what is known as an [[untethered jailbreak]].&lt;br /&gt;
&lt;br /&gt;
As of October 2009, seven months after the exposure of this hole, Apple is now selling updated [[iPhone 3GS]] and [[N72ap|iPod Touch 2G]] units with a new bootrom, erasing the vulnerability used by this exploit.&lt;br /&gt;
&lt;br /&gt;
==Credit==&lt;br /&gt;
A &amp;quot;hybrid&amp;quot; dev team, in alphabetical order: '''chronic''', '''CPICH''', '''ius''', '''MuscleNerd''', '''planetbeing''', '''pod2g''', '''posixninja''', et al. (anyone wishing to be unnamed)&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
&lt;br /&gt;
Upon boot-up, the [[S5L8720]] and [[S5L8920]] SoC have a MIU configuration which maps the [[VROM (S5L8720)|Secure ROM]] to 0x0, providing the newly turned on device with an ARM exception vector and the first code to execute. This MIU configuration also maps a small amount of SRAM to 0x22000000 for the [[S5L8720]], and 0x84000000 for the [[S5L8920]]. Statically allocated variables, heap, and stack must use the SRAM, as &amp;quot;[[VROM (S5L8720)|Secure ROM]]&amp;quot; is unwritable. A region of memory starting from (SRAM Start)+0x24000 is used for this purpose. The region of memory from the start of SRAM to (SRAM Start)+0x24000 is used as a buffer for loading the [[LLB|next stage bootloader]] code. The [[LLB]] code is stored in [[NOR]], along with code for all other bootloader stages, as well as art resources (boot logos) and the [[DeviceTree|OpenFirmware device tree]] to provide to the XNU [[kernel]]. The first portion (first 0x160 bytes) of memory at (SRAM Start)+0x24000 is used for initialized statically allocated variables. Shortly after boot, values for that region are initialized from [[VROM (S5L8720)|Secure ROM]].&lt;br /&gt;
&lt;br /&gt;
==Vulnerability==&lt;br /&gt;
&lt;br /&gt;
The code that reads the [[LLB]] [[img3]] firmware file from [[NOR]] into memory does not check the size of the [[LLB]] image being loaded, instead taking the size directly from the non-signature checked portion of the [[img3]] header on the [[NOR]] (see ROM offset 0x2178). Any image greater than 0x24000 bytes in length will begin overwriting the portion of memory used to store Secure ROM statically allocated variables. Immediately vulnerable data includes USB data structures for [[DFU]] mode, a pointer to the bdev list structure, task list structures for the Secure ROM's scheduler, as well as the addresses of the hardware SHA1 registers. All of the above are potential avenues for exploitation.  The method described below uses the SHA1 register addresses.&lt;br /&gt;
&lt;br /&gt;
This vulnerability was discovered independently by '''pod2g''' and '''MuscleNerd'''.&lt;br /&gt;
&lt;br /&gt;
== Exploit==&lt;br /&gt;
&lt;br /&gt;
The goal of the exploit is to gain arbitrary code execution capability.&lt;br /&gt;
&lt;br /&gt;
The exploit, as proposed by '''planetbeing''', uses the overflow to overwrite one of the addresses of the SHA1 registers. The particular register is the only one that directly copies data to be hashed into the hardware (or into an arbitrary memory location, once the destination address has been overwritten). Code execution is achieved by writing data into the stack, specifically by overwriting the LR of the function performing the write to the &amp;quot;SHA1 register&amp;quot; so that instead of returning to the main SHA1 routine, it returns to a chosen location in memory that contains the payload code. The location chosen is within the range of memory that is filled with the [[LLB]] img3, so that the payload code can be placed within the [[LLB]] img3.&lt;br /&gt;
&lt;br /&gt;
The challenge is determining what to put in as the SHA1 register location so that the right portion of stack can be overwritten with the payload LR. This can be challenging without having access to any sort of exception dump (crash register dumps in the bootrom had been disabled by Apple). '''planetbeing''' performed a static analysis of a very detailed IDB produced by '''chronic''' and '''CPICH''' and determined the theoretical call stack for both of the invocations of the SHA1 hardware within the bootrom code [http://pastie.org/414981].&lt;br /&gt;
&lt;br /&gt;
In-situ verification of the LR location was performed by '''posixninja'''. '''CPICH''' discovered a way to alter the img3 DER so that the second invocation of the SHA1 hardware was not performed without affecting the first, allowing better confirmation that this step was performed properly.&lt;br /&gt;
&lt;br /&gt;
The final SHA1 register address was chosen so that the first dword of the DATA tag of the [[LLB]] img3 would replace sub_5E54's LR. This is because this is the first dword of the img3 that can be altered without substantially changing the img3's structure (and possibly disrupting earlier parsing code). The LR replacement must be done the first time the exploit is triggered (by the invocation of sub_5E54), or else the bootrom would crash. Since sub_5E54 takes 0x40 bytes of data at a time, the replacement LR thus must be within the first 0x40 bytes of data to be hashed. Data to be hashed starts at 0xC bytes from the start of the img3, and the first dword of the DATA tag is 0x20 bytes from the start of the img3. Thus, the SHA1 register address chosen should be 0x20 - 0xC = 0x14 bytes before sub_5E54's LR. So, it must be 0x2202FE24. Note that the exploit will also trash up to 0x2202FE24 + 0x40 = 0x2202FE64. So a sizeable portion of doComputeSHA1's stack will be trashed as well.&lt;br /&gt;
&lt;br /&gt;
The final exploit img3 was verified by '''posixninja''' under '''planetbeing''''s instructions to allow arbitrary code execution. It was a regular Img3 with padding up to 0x24000 bytes. The next 0x100 bytes were taken from the original initialization values for 0x22024000. However, 0x240FC, the offset of the SHA1 register address, was altered to 0x2202FE24. The first dword of the DATA tag (offset 0x20) was altered to 0x22023000. Payload code was placed at offset 0x23000.&lt;br /&gt;
&lt;br /&gt;
==Payload==&lt;br /&gt;
&lt;br /&gt;
The goal of the payload is to allow an unsigned [[LLB]] to be loaded.&lt;br /&gt;
&lt;br /&gt;
There are several ways that can be used, including directly calling the JumpToMemory function which is designed to prepare the SoC and invoke the [[LLB]] code. However, it's designed to be used on decrypted, unpacked code, and the [[LLB]] code currently resides in an encrypted from within the img3's DATA tag. The simplest solution is thus to use the bootrom's own machinery to decrypt and execute the code.&lt;br /&gt;
&lt;br /&gt;
The final payload evolved out of a discussion between '''pod2g''' and '''planetbeing''', based on an IDB documented by '''pod2g''', '''chronic''', '''CPICH''', et al. The lowest impact solution is to apply the pwnage patch to the rsaCheck subroutine of the bootrom, and returning from the payload from computing the SHA1 without crashing the bootrom. However, in this case, since bootrom text is unwritable, this was not a viable solution.&lt;br /&gt;
&lt;br /&gt;
The next lowest impact solution is to return from the entire parseFirmwareFooter function with a successful value, instead of the failure value it would normally return if signature checks fail. This would skip any remaining code  in that subroutine. This solution did not work in-situ. Failures checking the epoch tags prevented the firmware from being executed. The cause of this was not investigated.&lt;br /&gt;
&lt;br /&gt;
The final payload was to return past the verification of epoch and other tags in the [[LLB]] img3 to a spot right before the DATA tag was loaded from memory and decrypted. R5 was set to 0 to ensure decryption would not be skipped. The original value for the first DATA dword (before we had to overwrite it with the exploit LR) is written back to 0x22000020 by the payload, and the original SHA1 register value was written back to 0x2202FE24 to ensure the payload only activates once.&lt;br /&gt;
&lt;br /&gt;
==Deployment==&lt;br /&gt;
&lt;br /&gt;
Although the exploitive [[LLB]] can be manually written to [[NOR]] by bootstrapping from a tethered jailbreak, the easiest way is to use the Apple restore process itself. Apple's Restore process will write arbitrary img3s onto the [[NOR]], even if they fail signature checks. However, the &amp;quot;total size&amp;quot; value of the img3 is fixed up by the kernel before it is written to [[NOR]]. This would negate the exploit. However, '''MuscleNerd''' discovered that this could be bypassed by including the padding in another tag, such as CERT. Then, the written exploit [[LLB]] would have the &amp;quot;correct&amp;quot;, exploitive total size.&lt;br /&gt;
&lt;br /&gt;
==Timing Impact==&lt;br /&gt;
This exploit would have allowed the [[pwnage]] of the next generation iPhone without the discovery of an additional code execution vulnerability (required to write the exploit [[LLB]]), provided that the bug still existed in the next generation's bootrom. Even though it was too late to patch the bootrom, it was not too late for Apple to repair the restore process in the stock IPSW, removing the method used to get the exploitive [[LLB]] onto the device. Before, Apple would have no reason to fix this, since writing arbitrary data to [[NOR]] does not negate their chain of trust. However, now that a way has been found, they were able to prioritize a fix for this oversight thus making the permanent [[pwnage]] of future devices significantly more difficult.&lt;br /&gt;
&lt;br /&gt;
Thanks to irresponsible handling of the exploit by a third-party company known as [[NitroKey]] who were interested in making financial gain from the work of others, this eventuality became a near-certainty and pretty much erased the possibility of a day-of-release jailbreak for the [[iPhone 3GS]] and the third-generation iPod touch. In addition, to counteract the exploit, with the early exposure of the exploit, Apple were able to add the [[ECID]] tag to the [[IMG3 File Format|IMG3 format]] in the iPhone 3GS. The early leak of the exploit allowed Apple to understand that an iBoot exploit would be necessary to flash the required oversized LLB and through doing so, Apple have prevented this exploit from allowing the iPhone 3GS to be permanently jailbroken through this exploit unless new iBoot exploits (allowing unsigned code to be run) can be found in every firmware release or a signed copy of an (older) vulnerable version of iBoot is stored.&lt;br /&gt;
&lt;br /&gt;
May the bastards of NitroKey burn in hell for all eternity.&lt;br /&gt;
&lt;br /&gt;
==3GS Implementation==&lt;br /&gt;
&lt;br /&gt;
The exploit remains the same in spirit.&lt;br /&gt;
&lt;br /&gt;
The call tree and stacks analysis is very similar although a few bytes here and there changed it slightly. It was again done manually but afterward, and out of fun, an IDA Python Script was written to automate the process. The new static analysis can be seen here [http://pastie.org/551212], and the IDA Python Script for it there [http://github.com/iZsh/IDA-Python-Scripts/].&lt;br /&gt;
&lt;br /&gt;
The main differences are:&lt;br /&gt;
&lt;br /&gt;
* the SRAM is at 0x84000000 instead of 0x22000000&lt;br /&gt;
* the Original value of the first DATA dword is written back to 0x84000040 (which was overwritten by the LR address)&lt;br /&gt;
* the SHA1 register original value is written back to 0x840241CC&lt;br /&gt;
* '''The decrypt flag is not held in R5 anymore''', but in a local variable of the function &amp;quot;my_process_module&amp;quot; (sub_2564). An extra static analysis tells us this variable is held at 0x84033F30, thus that's where you have to store your 0x0 value before returning to this function.&lt;br /&gt;
&lt;br /&gt;
[[Category:Bootrom Exploits]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=0x24000_Segment_Overflow&amp;diff=5704</id>
		<title>0x24000 Segment Overflow</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=0x24000_Segment_Overflow&amp;diff=5704"/>
		<updated>2009-12-09T02:10:49Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* Background */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Also known by its codename, 24kPwn, this was the first exploit in the [[S5L8720]] that allowed us to bypass the bootrom signature checks on [[LLB]] and create what is known as an [[untethered jailbreak]].&lt;br /&gt;
&lt;br /&gt;
As of October 2009, seven months after the exposure of this hole, Apple is now selling updated [[iPhone 3GS]] and [[N72ap|iPod Touch 2G]] units with a new bootrom, erasing the vulnerability used by this exploit.&lt;br /&gt;
&lt;br /&gt;
==Credit==&lt;br /&gt;
A &amp;quot;hybrid&amp;quot; dev team, in alphabetical order: '''chronic''', '''CPICH''', '''ius''', '''MuscleNerd''', '''planetbeing''', '''pod2g''', '''posixninja''', et al. (anyone wishing to be unnamed)&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
&lt;br /&gt;
Upon boot-up, the [[S5L8720]] and [[S5L8920]] SoC have a MIU configuration which maps the [[VROM (S5L8720)|Secure ROM]] to 0x0, providing the newly turned on device with an ARM exception vector and the first code to execute. This MIU configuration also maps a small amount of SRAM to 0x22000000 for the [[S5L8720]], and 0x84000000 for the [[S5L8920]]. Statically allocated variables, heap, and stack must use the SRAM, as &amp;quot;[[VROM (S5L8720)|Secure ROM]]&amp;quot; is unwritable. A region of memory starting from (SRAM Start)+0x24000 is used for this purpose. The region of memory from the start of SRAM to (SRAM Start)+0x24000 is used as a buffer for loading the [[LLB|next stage bootloader]] code. The [[LLB]] code is stored in [[NOR]], along with code for all other bootloader stages, as well as art resources (boot logos) and the [[DeviceTree|OpenFirmware device tree]] to provide to the XNU [[kernel]]. The first portion (first 0x160 bytes) of memory at (SRAM Start)+0x24000 is used for initialized statically allocated variables. Shortly after boot, values for that region are initialized from [[VROM (S5L8720)|Secure ROM]].&lt;br /&gt;
&lt;br /&gt;
==Vulnerability==&lt;br /&gt;
&lt;br /&gt;
The code that reads the [[LLB]] img3 from [[NOR]] into memory does not check the size of the [[LLB]] image being loaded, instead taking the size directly from the non-signature checked portion of its img3 header on the [[NOR]] (see ROM offset 0x2178). Any image greater than 0x24000 bytes in length will begin overwriting the portion of memory used to store Secure ROM statically allocated variables. Immediately vulnerable data includes USB data structures for [[DFU]] mode, a pointer to the bdev list structure, task list structures for the Secure ROM's scheduler, as well as the addresses of the hardware SHA1 registers. All of the above are potential avenues for exploitation.  The method described below uses the SHA1 register addresses.&lt;br /&gt;
&lt;br /&gt;
This vulnerability was discovered independently by '''pod2g''' and '''MuscleNerd'''.&lt;br /&gt;
&lt;br /&gt;
== Exploit==&lt;br /&gt;
&lt;br /&gt;
The goal of the exploit is to gain arbitrary code execution capability.&lt;br /&gt;
&lt;br /&gt;
The exploit, as proposed by '''planetbeing''', uses the overflow to overwrite one of the addresses of the SHA1 registers. The particular register is the only one that directly copies data to be hashed into the hardware (or into an arbitrary memory location, once the destination address has been overwritten). Code execution is achieved by writing data into the stack, specifically by overwriting the LR of the function performing the write to the &amp;quot;SHA1 register&amp;quot; so that instead of returning to the main SHA1 routine, it returns to a chosen location in memory that contains the payload code. The location chosen is within the range of memory that is filled with the [[LLB]] img3, so that the payload code can be placed within the [[LLB]] img3.&lt;br /&gt;
&lt;br /&gt;
The challenge is determining what to put in as the SHA1 register location so that the right portion of stack can be overwritten with the payload LR. This can be challenging without having access to any sort of exception dump (crash register dumps in the bootrom had been disabled by Apple). '''planetbeing''' performed a static analysis of a very detailed IDB produced by '''chronic''' and '''CPICH''' and determined the theoretical call stack for both of the invocations of the SHA1 hardware within the bootrom code [http://pastie.org/414981].&lt;br /&gt;
&lt;br /&gt;
In-situ verification of the LR location was performed by '''posixninja'''. '''CPICH''' discovered a way to alter the img3 DER so that the second invocation of the SHA1 hardware was not performed without affecting the first, allowing better confirmation that this step was performed properly.&lt;br /&gt;
&lt;br /&gt;
The final SHA1 register address was chosen so that the first dword of the DATA tag of the [[LLB]] img3 would replace sub_5E54's LR. This is because this is the first dword of the img3 that can be altered without substantially changing the img3's structure (and possibly disrupting earlier parsing code). The LR replacement must be done the first time the exploit is triggered (by the invocation of sub_5E54), or else the bootrom would crash. Since sub_5E54 takes 0x40 bytes of data at a time, the replacement LR thus must be within the first 0x40 bytes of data to be hashed. Data to be hashed starts at 0xC bytes from the start of the img3, and the first dword of the DATA tag is 0x20 bytes from the start of the img3. Thus, the SHA1 register address chosen should be 0x20 - 0xC = 0x14 bytes before sub_5E54's LR. So, it must be 0x2202FE24. Note that the exploit will also trash up to 0x2202FE24 + 0x40 = 0x2202FE64. So a sizeable portion of doComputeSHA1's stack will be trashed as well.&lt;br /&gt;
&lt;br /&gt;
The final exploit img3 was verified by '''posixninja''' under '''planetbeing''''s instructions to allow arbitrary code execution. It was a regular Img3 with padding up to 0x24000 bytes. The next 0x100 bytes were taken from the original initialization values for 0x22024000. However, 0x240FC, the offset of the SHA1 register address, was altered to 0x2202FE24. The first dword of the DATA tag (offset 0x20) was altered to 0x22023000. Payload code was placed at offset 0x23000.&lt;br /&gt;
&lt;br /&gt;
==Payload==&lt;br /&gt;
&lt;br /&gt;
The goal of the payload is to allow an unsigned [[LLB]] to be loaded.&lt;br /&gt;
&lt;br /&gt;
There are several ways that can be used, including directly calling the JumpToMemory function which is designed to prepare the SoC and invoke the [[LLB]] code. However, it's designed to be used on decrypted, unpacked code, and the [[LLB]] code currently resides in an encrypted from within the img3's DATA tag. The simplest solution is thus to use the bootrom's own machinery to decrypt and execute the code.&lt;br /&gt;
&lt;br /&gt;
The final payload evolved out of a discussion between '''pod2g''' and '''planetbeing''', based on an IDB documented by '''pod2g''', '''chronic''', '''CPICH''', et al. The lowest impact solution is to apply the pwnage patch to the rsaCheck subroutine of the bootrom, and returning from the payload from computing the SHA1 without crashing the bootrom. However, in this case, since bootrom text is unwritable, this was not a viable solution.&lt;br /&gt;
&lt;br /&gt;
The next lowest impact solution is to return from the entire parseFirmwareFooter function with a successful value, instead of the failure value it would normally return if signature checks fail. This would skip any remaining code  in that subroutine. This solution did not work in-situ. Failures checking the epoch tags prevented the firmware from being executed. The cause of this was not investigated.&lt;br /&gt;
&lt;br /&gt;
The final payload was to return past the verification of epoch and other tags in the [[LLB]] img3 to a spot right before the DATA tag was loaded from memory and decrypted. R5 was set to 0 to ensure decryption would not be skipped. The original value for the first DATA dword (before we had to overwrite it with the exploit LR) is written back to 0x22000020 by the payload, and the original SHA1 register value was written back to 0x2202FE24 to ensure the payload only activates once.&lt;br /&gt;
&lt;br /&gt;
==Deployment==&lt;br /&gt;
&lt;br /&gt;
Although the exploitive [[LLB]] can be manually written to [[NOR]] by bootstrapping from a tethered jailbreak, the easiest way is to use the Apple restore process itself. Apple's Restore process will write arbitrary img3s onto the [[NOR]], even if they fail signature checks. However, the &amp;quot;total size&amp;quot; value of the img3 is fixed up by the kernel before it is written to [[NOR]]. This would negate the exploit. However, '''MuscleNerd''' discovered that this could be bypassed by including the padding in another tag, such as CERT. Then, the written exploit [[LLB]] would have the &amp;quot;correct&amp;quot;, exploitive total size.&lt;br /&gt;
&lt;br /&gt;
==Timing Impact==&lt;br /&gt;
This exploit would have allowed the [[pwnage]] of the next generation iPhone without the discovery of an additional code execution vulnerability (required to write the exploit [[LLB]]), provided that the bug still existed in the next generation's bootrom. Even though it was too late to patch the bootrom, it was not too late for Apple to repair the restore process in the stock IPSW, removing the method used to get the exploitive [[LLB]] onto the device. Before, Apple would have no reason to fix this, since writing arbitrary data to [[NOR]] does not negate their chain of trust. However, now that a way has been found, they were able to prioritize a fix for this oversight thus making the permanent [[pwnage]] of future devices significantly more difficult.&lt;br /&gt;
&lt;br /&gt;
Thanks to irresponsible handling of the exploit by a third-party company known as [[NitroKey]] who were interested in making financial gain from the work of others, this eventuality became a near-certainty and pretty much erased the possibility of a day-of-release jailbreak for the [[iPhone 3GS]] and the third-generation iPod touch. In addition, to counteract the exploit, with the early exposure of the exploit, Apple were able to add the [[ECID]] tag to the [[IMG3 File Format|IMG3 format]] in the iPhone 3GS. The early leak of the exploit allowed Apple to understand that an iBoot exploit would be necessary to flash the required oversized LLB and through doing so, Apple have prevented this exploit from allowing the iPhone 3GS to be permanently jailbroken through this exploit unless new iBoot exploits (allowing unsigned code to be run) can be found in every firmware release or a signed copy of an (older) vulnerable version of iBoot is stored.&lt;br /&gt;
&lt;br /&gt;
May the bastards of NitroKey burn in hell for all eternity.&lt;br /&gt;
&lt;br /&gt;
==3GS Implementation==&lt;br /&gt;
&lt;br /&gt;
The exploit remains the same in spirit.&lt;br /&gt;
&lt;br /&gt;
The call tree and stacks analysis is very similar although a few bytes here and there changed it slightly. It was again done manually but afterward, and out of fun, an IDA Python Script was written to automate the process. The new static analysis can be seen here [http://pastie.org/551212], and the IDA Python Script for it there [http://github.com/iZsh/IDA-Python-Scripts/].&lt;br /&gt;
&lt;br /&gt;
The main differences are:&lt;br /&gt;
&lt;br /&gt;
* the SRAM is at 0x84000000 instead of 0x22000000&lt;br /&gt;
* the Original value of the first DATA dword is written back to 0x84000040 (which was overwritten by the LR address)&lt;br /&gt;
* the SHA1 register original value is written back to 0x840241CC&lt;br /&gt;
* '''The decrypt flag is not held in R5 anymore''', but in a local variable of the function &amp;quot;my_process_module&amp;quot; (sub_2564). An extra static analysis tells us this variable is held at 0x84033F30, thus that's where you have to store your 0x0 value before returning to this function.&lt;br /&gt;
&lt;br /&gt;
[[Category:Bootrom Exploits]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Baseband_Bootrom_Protocol&amp;diff=5695</id>
		<title>Baseband Bootrom Protocol</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Baseband_Bootrom_Protocol&amp;diff=5695"/>
		<updated>2009-11-25T21:47:19Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the protocol used to talk to the old, and probably the new baseband, at the bootrom level. The old bootrom didn't have an sig checking, the new one does.&lt;br /&gt;
&lt;br /&gt;
==Protocol==&lt;br /&gt;
 AT&lt;br /&gt;
 0x30&lt;br /&gt;
 2 byte length&lt;br /&gt;
 n byte data&lt;br /&gt;
 2 byte checksum&lt;br /&gt;
 sends A5 on success, 5A on failure&lt;br /&gt;
&lt;br /&gt;
===3G===&lt;br /&gt;
Correct me if I am wrong, but on the [[iPhone 3G]] bootrom, the &amp;quot;protocol&amp;quot; section is pretty much identical, besides the last line, which is instead this:&lt;br /&gt;
 sends 01 on success, FF on failure&lt;br /&gt;
&lt;br /&gt;
==Implementations==&lt;br /&gt;
[http://lpahome.com/geohot/gbootloader.rar bootrom.h in gbootloader]&lt;br /&gt;
&lt;br /&gt;
[[Category:Protocols (Baseband)]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=The_iPhone_Wiki:Spam&amp;diff=5648</id>
		<title>The iPhone Wiki:Spam</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=The_iPhone_Wiki:Spam&amp;diff=5648"/>
		<updated>2009-11-10T20:21:10Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How do we combat this recent spamming of this wiki? I suggest a possible invite system or similar? --[[User:Srts|Srts]] 02:24, 9 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
I have already blocked account signup, they must have had this account for a while. --[[User:Geohot|geohot]] 02:29, 9 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Well if they don't stop, we can't have account creation disabled forever, defeats the purpose of the wiki. People like him are sad. Great work to all the sysops et all. keeping disruption to a minimal :D --[[User:Srts|Srts]] 02:34, 9 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yea thanks a lot guys for putting up with this. We'll give a bit of time, and if they continue, we'll figure something out. This kid keep trying to reset my password for hosting and the wiki. Too bad he doesn't have a life. --[[User:Geohot|geohot]] 03:10, 9 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
An invite system might not be a bad idea actually [[User:ChronicDev|Will Strafach]] 03:16, 9 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
feel free to post their IP addresses, lol --[[User:Posixninja|posixninja]] 04:08, 9 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Well, if you need an extra admin to block them (and delete spam pages), I volunteer.  --[[User:Dranfi|Dranfi]] Congrats, you're an admin --[[User:Geohot|geohot]] 13:22, 9 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
How many different IPs are we dealing with? Is it within a specific range? For the time being, it may be possible to blacklist an entire subnet if they are all coming from the same place. But if a botnet is doing this, may be more difficult. Is it possible for MediaWiki to require admin approval of an edit prior to it being commited? Not well versed with MediaWiki administration, just thossing out some ideas. --[[User:Tsuehpsyde|tsuehpsyde]] 17:29, 9 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
We could figure out where they come rom and do the same to them. Secondly, we could create a filter that unless your part of a specific group you cannot do more than this many edits in this amount of time. We could try making a period where the admins have to approve the users. Lastly, we could make it so that in the first 12 hours of a user account that user could not edit pages so it would give time for the sysops to ban the users. [[User:Revolution|Revolution]] 00:02, 10 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
If the ones you refer to as 'they' are the [http://code.google.com/p/pois0nhack pois0nhack] group then 'they' don't really seem to pose much of a threat in my opinion. I agree that for the time being we could impose some kind of 12/24 hr posting limitation (maybe no more than +-300 char changes?), but no more than that since this is, after all, a public wiki. Sorry if I'm intruding on some kind of admin/mod meeting, just figured I should have my say. --[[User:Rekoil|adriaaan]] 00:27, 10 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
I am in favor of a 12hr limit for new users, but since it's a public wiki, during this time, contributions would have to be approved by sysops. --Untagged&lt;br /&gt;
&lt;br /&gt;
Personally I think it would be good to have it so that all edits by new users a thrown into a moderation pool, then once a good amount of worthwhile contributions, that user can be &amp;quot;whitelisted&amp;quot;.&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=The_iPhone_Wiki:Spam&amp;diff=5627</id>
		<title>The iPhone Wiki:Spam</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=The_iPhone_Wiki:Spam&amp;diff=5627"/>
		<updated>2009-11-09T03:16:27Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How do we combat this recent spamming of this wiki? I suggest a possible invite system or similar? --[[User:Srts|Srts]] 02:24, 9 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
I have already blocked account signup, they must have had this account for a while. --[[User:Geohot|geohot]] 02:29, 9 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Well if they don't stop, we can't have account creation disabled forever, defeats the purpose of the wiki. People like him are sad. Great work to all the sysops et all. keeping disruption to a minimal :D --[[User:Srts|Srts]] 02:34, 9 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yea thanks a lot guys for putting up with this. We'll give a bit of time, and if they continue, we'll figure something out. This kid keep trying to reset my password for hosting and the wiki. Too bad he doesn't have a life. --[[User:Geohot|geohot]] 03:10, 9 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
An invite system might not be a bad idea actually [[User:ChronicDev|Will Strafach]] 03:16, 9 November 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=VROM_(S5L8720)&amp;diff=5395</id>
		<title>VROM (S5L8720)</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=VROM_(S5L8720)&amp;diff=5395"/>
		<updated>2009-11-04T21:09:48Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: VROM (S5L8720) moved to SecureROM (S5L8720)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[SecureROM (S5L8720)]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=S5L8720&amp;diff=5393</id>
		<title>S5L8720</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=S5L8720&amp;diff=5393"/>
		<updated>2009-11-04T21:08:38Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* iBoot / Kernel Level */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the Application Processor used on the [[n72ap|iPod Touch 2G]].&lt;br /&gt;
&lt;br /&gt;
==Exploits==&lt;br /&gt;
===[[iBoot]] / [[Kernel]] Level===&lt;br /&gt;
'''Note''': [[iBoot]] on the S5L8720 can be downgraded, allowing any of these exploits to be used on future firmwares&lt;br /&gt;
&lt;br /&gt;
* [[ARM7 Go]] - Firmware v2.1.1&lt;br /&gt;
* [[iBoot Environment Variable Overflow]] - 3.1 beta 3 and below&lt;br /&gt;
* [[usb_control_msg(0x21, 2) Exploit]] - 3.1.2 and below&lt;br /&gt;
&lt;br /&gt;
===[[VROM (S5L8720)|Bootrom]]===&lt;br /&gt;
* [[0x24000 Segment Overflow]]&lt;br /&gt;
&lt;br /&gt;
==Boot Chain==&lt;br /&gt;
[[VROM (S5L8720)|VROM]]-&amp;gt;[[LLB]]-&amp;gt;[[iBoot]]-&amp;gt;[[Kernel]]-&amp;gt;[[System|System Software]]&lt;br /&gt;
&lt;br /&gt;
It is definitely worthy to note that the [[Pwnage]] exploit is fixed because the images are now flashed to the [[NOR]] in their encrypted [[IMG3]] containers, and the [[S5L8720 Bootrom|bootrom]] can properly sigcheck [[LLB]]. That being said, unsigned images can still be run using the [[0x24000 Segment Overflow]].&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[S5L8720 (Hardware)]]&lt;br /&gt;
* [[S5L File Formats]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Timeline&amp;diff=5392</id>
		<title>Timeline</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Timeline&amp;diff=5392"/>
		<updated>2009-11-04T21:08:09Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* September */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==2009==&lt;br /&gt;
===November===&lt;br /&gt;
*November 3 -- [[Geohot]] releases [[blackra1n]] RC3, A software jailbreak for all devices, that now only takes 15 Seconds! Includes a new unlock for the baseband 5.11.07 called [[blacksn0w|blacksn0w]].&lt;br /&gt;
&lt;br /&gt;
===October===&lt;br /&gt;
*October 11 -- [[Geohot]] releases [[blackra1n]] RC1, a 30 second software jailbreak for all devices, including a tethered jailbreak for the [[iPod touch 3G]].&lt;br /&gt;
&lt;br /&gt;
===September===&lt;br /&gt;
* September 24 -- [[ih8sn0w|ih8sn0w]] Discovers the [[AT+XEMN|AT+XEMN]] Vulnerability used in [[blacksn0w|blacksn0w]] independently.&lt;br /&gt;
* September 9 -- The [[iPod touch 3G]] w/ [[S5L8922]] processor is released, as well as an &amp;quot;MC Model&amp;quot; [[n72ap|iPod touch 2G]]. Both are no longer vulnerable to [[24kPwn]].&lt;br /&gt;
* Firmware 3.1/3.1.1 (7C144/7C145) Released to the Public. Firmware closes [[iBoot Environment Variable Overflow|iBoot Environment Variable Overflow]] and [[AT+XLOG Vulnerability|AT+XLOG]] + [[AT+FNS|AT+FNS]] Baseband Exploits.&lt;br /&gt;
&lt;br /&gt;
===July===&lt;br /&gt;
* July 14 -- [[Geohot]] releases [[purplesn0w]], a software unlock for the [[iPhone 3GS]] using [[AT+XLOG Vulnerability|the same exploit as ultrasn0w]], but handled differently. Minutes later, an explanation and source code was posted.&lt;br /&gt;
* July 7 -- [[The dev team]] updates [[redsn0w]] and [[ultrasn0w]] to version 0.8, now with [[iPhone 3GS]] support. Saurik also updates Winterboard to support the [[iPhone 3GS]].&lt;br /&gt;
* July 3 -- [[Geohot]] releases [[purplera1n]], a software jailbreak for the [[iPhone 3GS]].&lt;br /&gt;
&lt;br /&gt;
===June===&lt;br /&gt;
* June 28 -- [[Geohot]] posts pictures on his blog of the first fully jailbroken [[iPhone 3GS]].&lt;br /&gt;
* June 25 -- It's discovered that [[iPhone 3GS]] is vulnerable to [[0x24000 Segment Overflow|24kpwn]] exploit.&lt;br /&gt;
* June 24 -- [[The dev team]] release [[ultrasn0w]] unlock for [[iPhone 3G]] thanks to [[AT+XLOG Vulnerability|a new exploit]] discovered by [[User:Oranav|Oranav]].&lt;br /&gt;
* June 23 -- [[Geohot]] announces he's found a new exploit in [[iBoot]] he calls purplera1n.&lt;br /&gt;
* June 19 -- Release of [[iPhone2,1|iPhone 3GS]] to the public and the release of [[PwnageTool|Pwnage Tool 3.0]] and [[RedSn0w|Redsn0w]] for jailbreaking devices running firmware 3.0&lt;br /&gt;
* June 17 -- Release of firmware 3.0 to the public.&lt;br /&gt;
* June 8 -- Apple announces the [[iPhone2,1|iPhone 3GS]].&lt;br /&gt;
&lt;br /&gt;
===March===&lt;br /&gt;
* March 10 -- The [[0x24000 Segment Overflow|untethered jailbreak]] for the [[iPod touch 2G]] is released thanks to the combined work of chronic, CPICH, posixninja, pod2g, ius, planetbeing, MuscleNerd, and co after being leaked and sold by [[NitroKey]]. To prevent users wasting their money on a stolen exploit, the Hybrid DevTeam decided to release it immediately.&lt;br /&gt;
&lt;br /&gt;
===January===&lt;br /&gt;
* January 31 -- The [[iPhone Dev Team]] released a [[redsn0w Lite]], a tethered jailbreak for the [[N72ap|iPod touch 2G]].  It combines the [[ARM7 Go]] vulnerability with the well-established pwnage flow for other Apple mobile devices. It was bundled in a way that will allow usage on the 2.2.1 firmware through uploading the [[ARM7 Go]] vulnerable 2.1.1 iBoot to the device while in DFU mode.&lt;br /&gt;
&lt;br /&gt;
* January 25 -- [[0wnboot]] is released to chronicdev google code page, thanks to AriX, chronic, CPICH, westbaer, ius, pod2g, the rest of the iPod devel crew on IRC, and to the #iphone-hax lab rats. Within days, the AriX and the chronic dev team got a ramdisk booting for a tethered jailbreak.&lt;br /&gt;
&lt;br /&gt;
* January 17 -- MuscleNerd of the [[iPhone Dev Team]] [http://twitter.com/MuscleNerd/status/1127346766 shows a video demo] of the first jailbroken iPod Touch 2G.&lt;br /&gt;
&lt;br /&gt;
* January 16 -- [[ARM7 Go]] hole disclosed where else but here on The iPhone Wiki, for developers to poke and prod at&lt;br /&gt;
&lt;br /&gt;
* January 15 -- The [[iPhone Dev Team]] [http://twitter.com/iphone_dev/status/1120595069 tweets the vfdecrypt key] for the [[iPod touch 2G]] 2.2 firmware, demonstrating for the first time that unsigned code can now be run on that device.&lt;br /&gt;
&lt;br /&gt;
* January 1 -- The [[iPhone Dev Team]] releases [[yellowsn0w]] 0.9 beta for baseband 02.28.00.&lt;br /&gt;
&lt;br /&gt;
==2008==&lt;br /&gt;
&lt;br /&gt;
===December===&lt;br /&gt;
* December 21 -- [[MuscleNerd]], of [[the dev team]] does a live demo of the 3G unlock, dubbed as 'yellowsn0w': http://qik.com/video/729275&lt;br /&gt;
&lt;br /&gt;
===August===&lt;br /&gt;
* August 18 -- [[The dev team]] releases [http://wikee.iphwn.org/news:pwnage20announcement QuickPwn], a 2.x [[pwnage]]/ramdisk combination exploit that allows jailbreaking without needing to create custom IPSWs.&lt;br /&gt;
&lt;br /&gt;
===July===&lt;br /&gt;
* July 22 -- [[TA_Mobile]] hardware dumps the 3G baseband (bootloader 5.8 &amp;amp; FW 1.45.00) by desoldering the [[NOR]].&lt;br /&gt;
* July 19 -- [[The dev team]] releases [[PwnageTool]] 2.0, jailbreaking and unlocking the 2.0 software on the iPhone 2G and jailbreaking the 2.0 software on the iPhone 3G.&lt;br /&gt;
* July 11 -- [[iPhone 3G]] is released.&lt;br /&gt;
&lt;br /&gt;
===June===&lt;br /&gt;
* June 9 - [[iPhone 3G]] is announced at [[WWDC]] '08.&lt;br /&gt;
&lt;br /&gt;
===April===&lt;br /&gt;
* April 3 -- Dev team releases [[PwnageTool]] 1.0, making use of the pmdx exploit (to patch RSA checks out of the [[kernel]], to write unsigned to [[NOR]])&lt;br /&gt;
&lt;br /&gt;
===March===&lt;br /&gt;
* March 12 -- Dev team releases dual-boot jailbreak method, only to be silently fixed in 2.0.&lt;br /&gt;
* March 4 -- [[User:N000b|George Zhu (n000b)]] releases [[ILiberty / ILiberty%2B]].&lt;br /&gt;
&lt;br /&gt;
===February===&lt;br /&gt;
* February 28 -- [[Cydia]] is released as an open-source alternative to Installer.app, and prepares to take over the jailbreak application scene upon 2.0's release.&lt;br /&gt;
* February 11 -- [[Zibri]] releases [[ZiPhone]], the first all-in-one unlock, activate, jailbreak solution.&lt;br /&gt;
* February 8 -- [[User:Geohot|geohot]] releases software unlock for 4.6, Apple states 25% of phones were never activated with AT&amp;amp;T.&lt;br /&gt;
&lt;br /&gt;
===January===&lt;br /&gt;
* January 28 -- Dev team releases soft upgrade jailbreak for 1.1.3.&lt;br /&gt;
* January 18 -- Geohot and his friends [http://iphonejtag.blogspot.com/2008/01/112-otb-unlocked.html unlocked 1.1.2 OTB 4.6 by test point], the unbeatable version at that time.&lt;br /&gt;
* January 18 -- Dev team posts YouTube video of a jailbroken 1.1.3, which was made possible by the dual boot jailbreak from bgm.&lt;br /&gt;
&lt;br /&gt;
== 2007 ==&lt;br /&gt;
===November===&lt;br /&gt;
* November 15 -- New baseband [[Bootloader 4.6|bootloader (4.6)]] comes out, new iPhones can't be unlocked.&lt;br /&gt;
* November 2 -- [[Jailbreakme]] is released, bringing jailbreaking to the mainstream iPhone user.&lt;br /&gt;
&lt;br /&gt;
===October===&lt;br /&gt;
* October 23 -- iPhone-Elite Team releases the [[Virginizer]].&lt;br /&gt;
* October 14 -- AriX releases iJailBreak, the first automated iPod touch jailbreak for the Mac.&lt;br /&gt;
* October 12 -- planetbeing releases touchFree, the first automated iPod touch jailbreak.&lt;br /&gt;
* October 10 -- niacin, cmw, and dre release the [[LibTiff]] exploit to jailbreak the iPod touch, which is later adapted for use in [[Jailbreakme]].&lt;br /&gt;
&lt;br /&gt;
===September===&lt;br /&gt;
* September 11 -- [[The dev team]] releases [[iUnlock]], first free software unlock.&lt;br /&gt;
* September 10 -- [[IPSF]] releases first paid software unlock.&lt;br /&gt;
* September 9 -- Apple announces the [[iPod touch]] at a media event.&lt;br /&gt;
&lt;br /&gt;
===August===&lt;br /&gt;
* August 23 -- [[User:Geohot|geohot]] and team release [[hardware unlock]] method.&lt;br /&gt;
* August 21 -- Installer.app is released by Nullriver, first GUI apps are distributed.&lt;br /&gt;
&lt;br /&gt;
===July===&lt;br /&gt;
* July 23 -- First phones are used with other carriers by means of [[SIM hacks]].&lt;br /&gt;
* July 20 -- nightwatch adapts a [[toolchain]] to the iPhone. The first apps are compiled.&lt;br /&gt;
* July 9 -- [[The dev team]] releases a [[jailbreak]] method. The first use of this is ringtones.&lt;br /&gt;
* July 3 -- DVD Jon first cracks [[activation]]. People can use the apps on the phone without a subscription.&lt;br /&gt;
&lt;br /&gt;
===June===&lt;br /&gt;
* June 29 -- [[iPhone]] is released. World's most hyped consumer product.&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=IRecovery&amp;diff=5357</id>
		<title>IRecovery</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=IRecovery&amp;diff=5357"/>
		<updated>2009-11-04T01:02:28Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* Features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;iRecovery is a libusb-based commandline utility for Mac OS X , Linux ,and Windows . It is able to talk to the iBoot/iBSS in Apple's iPhone/iPod touch via USB. &lt;br /&gt;
&lt;br /&gt;
It's completely open-source, the source-code is released under the terms of the GNU General Public License version 3.&lt;br /&gt;
The full license text can be found in the LICENSE file on github.&lt;br /&gt;
&lt;br /&gt;
It currently connects to 0x1281 (iPhone, iPhone 3G, iPod touch, iPod touch 2G: Recovery Mode/iBSS), 0x1227 (iPhone, &lt;br /&gt;
iPhone 3G, iPod touch: WTF Mode; iPod touch 2G: DFU Mode).&lt;br /&gt;
&lt;br /&gt;
==Credits==&lt;br /&gt;
westbaer&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===DFU 2.0 (0x1227)===&lt;br /&gt;
It can upload a file, such as an iBSS, so that you can unplug and spawn a shell with 0x1281.&lt;br /&gt;
&lt;br /&gt;
===Recovery 2.0 (0x1281)===&lt;br /&gt;
====File Uploading====&lt;br /&gt;
You can upload a file to 0x9000000 with the following syntax:&lt;br /&gt;
 ./iRecovery -f file&lt;br /&gt;
&lt;br /&gt;
====Two-Way Shell====&lt;br /&gt;
You can spawn a shell to do all sorts of neat things with the syntax:&lt;br /&gt;
 ./iRecovery -s&lt;br /&gt;
Once it has spawned, you can type 'help' and iBoot will respond with its built-in command list.&lt;br /&gt;
&lt;br /&gt;
====Single Command====&lt;br /&gt;
 ./iRecovery -c &amp;quot;command&amp;quot;&lt;br /&gt;
Sends a single command to the device *without* spawning a shell.&lt;br /&gt;
&lt;br /&gt;
====usb_control_msg(0x21, 2) Exploit Command====&lt;br /&gt;
 ./iRecovery -k &lt;br /&gt;
Sends Chronic Dev's + Geohot's latest usb exploit. Implemented into blackra1n.&lt;br /&gt;
This was just updated a few days ago. (10/17/09) [http://github.com/posixninja/irecovery posixninja's fork]&lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
[http://github.com/westbaer/irecovery Offical Repository / Download here]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=AT%2BXEMN_Heap_Overflow&amp;diff=5331</id>
		<title>AT+XEMN Heap Overflow</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=AT%2BXEMN_Heap_Overflow&amp;diff=5331"/>
		<updated>2009-10-31T16:16:30Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AT+XEMN is a command on baseband 5.11.07 (pushed out with the 3.1 release), which when exploited correctly, causes a heap overflow allowing the crash to be moulded into an injection vector. This injection vector can then be used to inject an unlocking payload to provide a coveted Software SIM Unlock on the official 3.1(.2) firmware running 5.11.07&lt;br /&gt;
&lt;br /&gt;
== Credit ==&lt;br /&gt;
'''Vulnerability''': [[Oranav]] (July) and ih8sn0w (September) (discovered independently)&lt;br /&gt;
'''Exploit''': [[geohot]]&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
This exploit is used in [[blacksn0w]].&lt;br /&gt;
&lt;br /&gt;
== Exception Dump == &lt;br /&gt;
 +XLOG: Exception Number: 1&lt;br /&gt;
 Trap Class:     0xDDDD  (SW GENERATED TRAP)&lt;br /&gt;
 Identification: 140 (0x008C)&lt;br /&gt;
 Date: 22.10.2009&lt;br /&gt;
 Time: 00:30&lt;br /&gt;
 File: atform/text/_malloc.c&lt;br /&gt;
 Line: 1036&lt;br /&gt;
 Logdata:&lt;br /&gt;
  2E 0C 76 ED 40 14 31 64 61 74 63 3A 31 00 64 63   ..v.@.1datc:1.dc&lt;br /&gt;
  20 44 F4 E9 20 20 20 20 20 20 20 20 20 20 20 20    D..            &lt;br /&gt;
  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                   &lt;br /&gt;
  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                   &lt;br /&gt;
  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                   &lt;br /&gt;
  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                   &lt;br /&gt;
  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                   &lt;br /&gt;
  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                   &lt;br /&gt;
  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                   &lt;br /&gt;
  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                   &lt;br /&gt;
  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                   &lt;br /&gt;
  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                   &lt;br /&gt;
  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                   &lt;br /&gt;
  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                   &lt;br /&gt;
  20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                   &lt;br /&gt;
  20 20 20 20 20 20 20 20&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
=== July 2009 ===&lt;br /&gt;
*[[User:Oranav|Oranav]] discovers this crash.&lt;br /&gt;
*Shortly after discovered, The [[iPhone Dev Team]], confirms that the crash is non-exploitable.&lt;br /&gt;
&lt;br /&gt;
=== September 2009 ===&lt;br /&gt;
*iH8sn0w discovered this command independently but kept it a secret for about a month. [http://twitter.com/iH8sn0w/status/4353547726 ]&lt;br /&gt;
&lt;br /&gt;
=== October 2009 ===&lt;br /&gt;
*When the Dev-Team stated that iH8sn0w did not have a unlock, he posted the command on Twitter. [http://twitter.com/iH8sn0w/status/4954333558]&lt;br /&gt;
*Shortly after, Oranav posted his Hash from July. [http://pastebin.ca/1485104]&lt;br /&gt;
*MuscleNerd tells iHacker that the crash was received awhile ago and was non-exploitable. [http://twitter.com/MuscleNerd/status/4978871033][http://twitter.com/iHacker/status/4978821448]&lt;br /&gt;
*[[User:Geohot|Geohot]] attempts to exploit this crash, but later finds out as well that it is non-exploitable. [http://twitter.com/geohot/status/4979506974]&lt;br /&gt;
*The hunt for another exploit continues as New 3G/3G[S] users join or if 3G/3G[S] users upgrade to Official Apple Firmware.&lt;br /&gt;
*Geohot does more investigation and discovers that this crash is indeed exploitable, and that it's a heap overflow. [http://twitter.com/geohot/status/5196861045]&lt;br /&gt;
*Geohot has achieved arbitrary code execution and has begun working on unlock which will be called blacksn0w. [http://iphonejtag.blogspot.com/2009/10/heap-of-trouble.html]&lt;br /&gt;
*Geohot posts a video of an unlocked 05.11.07 device. [http://www.youtube.com/watch?v=g23e9e9zOVI]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=IBoot_IRQs&amp;diff=5286</id>
		<title>IBoot IRQs</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=IBoot_IRQs&amp;diff=5286"/>
		<updated>2009-10-25T03:29:26Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:iBoot IRQs}}&lt;br /&gt;
== [[iPhone 3G]] ==&lt;br /&gt;
=== [[LLB]] irq table: 22010280 ===&lt;br /&gt;
 IRQ  0: 22001EE1        6        0&lt;br /&gt;
 IRQ  1: 22001EE1        5        0&lt;br /&gt;
 IRQ  2: 22001EE1        4        0&lt;br /&gt;
 IRQ  3: 22001EE1        3        0&lt;br /&gt;
 IRQ  7: 220033D5        1        0&lt;br /&gt;
 IRQ  9: 22002ED9        0        0&lt;br /&gt;
 IRQ  A: 22002ED9        1        0&lt;br /&gt;
 IRQ  B: 22002ED9        2        0&lt;br /&gt;
 IRQ 18: 22003E2D        0        0&lt;br /&gt;
 IRQ 19: 22003E2D        1        0&lt;br /&gt;
 IRQ 1A: 22003E2D        2        0&lt;br /&gt;
 IRQ 1B: 22003E2D        3        0&lt;br /&gt;
 IRQ 1C: 22003E2D        4        0&lt;br /&gt;
 IRQ 1F: 22001EE1        2        0&lt;br /&gt;
 IRQ 20: 22001EE1        1        0&lt;br /&gt;
 IRQ 21: 22001EE1        0        0&lt;br /&gt;
&lt;br /&gt;
=== [[iBoot]] irq table: 18028D60 ===&lt;br /&gt;
 IRQ  0: 1800C301        6        0&lt;br /&gt;
 IRQ  1: 1800C301        5        0&lt;br /&gt;
 IRQ  2: 1800C301        4        0&lt;br /&gt;
 IRQ  3: 1800C301        3        0&lt;br /&gt;
 IRQ* 7: 1800D7D5        1        0  timer&lt;br /&gt;
 IRQ* 9: 1800D2D9        0        0  spi flash&lt;br /&gt;
 IRQ* A: 1800D2D9        1        0  spi flash&lt;br /&gt;
 IRQ* B: 1800D2D9        2        0  spi flash&lt;br /&gt;
 IRQ*10: 1800B8D1        1        0  dma thing&lt;br /&gt;
 IRQ*11: 1800B8D1        2        0  dma thing&lt;br /&gt;
 IRQ*13: 1800F289        0        0  usb&lt;br /&gt;
 IRQ*18: 1800E26D        0        0  uart stuff&lt;br /&gt;
 IRQ*19: 1800E26D        1        0  uart stuff&lt;br /&gt;
 IRQ*1A: 1800E26D        2        0  uart stuff&lt;br /&gt;
 IRQ*1B: 1800E26D        3        0  uart stuff&lt;br /&gt;
 IRQ*1C: 1800E26D        4        0  uart stuff&lt;br /&gt;
 IRQ 1F: 1800C301        2        0&lt;br /&gt;
 IRQ 20: 1800C301        1        0&lt;br /&gt;
 IRQ 21: 1800C301        0        0&lt;br /&gt;
&lt;br /&gt;
== [[iPhone 3G S]] ==&lt;br /&gt;
=== [[LLB]] irq table: 8400F360 ===&lt;br /&gt;
 IRQ  6: 84000DD9        0        0&lt;br /&gt;
 IRQ 11: 8400101D 8400F090        0&lt;br /&gt;
 IRQ 13: 8400101D 8400F000        0&lt;br /&gt;
 IRQ 14: 840041B1        4        0&lt;br /&gt;
 IRQ 15: 840041B1        3        0&lt;br /&gt;
 IRQ 16: 840041B1        2        0&lt;br /&gt;
 IRQ 17: 840041B1        1        0&lt;br /&gt;
 IRQ 18: 840041B1        0        0&lt;br /&gt;
 IRQ 19: 840036DD        4        0&lt;br /&gt;
 IRQ 1A: 840036DD        3        0&lt;br /&gt;
 IRQ 1B: 840036DD        2        0&lt;br /&gt;
 IRQ 1C: 840036DD        1        0&lt;br /&gt;
 IRQ 1D: 840036DD        0        0&lt;br /&gt;
&lt;br /&gt;
=== [[iBoot]] irq table: 4FF2B4E0 ===&lt;br /&gt;
 IRQ  6: 4FF04915        0        0&lt;br /&gt;
 IRQ  E: 4FF13469        0        0&lt;br /&gt;
 IRQ 11: 4FF04B59 4FF2A100        0&lt;br /&gt;
 IRQ 13: 4FF04B59 4FF2A070        0&lt;br /&gt;
 IRQ 14: 4FF12471        4        0  uart stuff&lt;br /&gt;
 IRQ 15: 4FF12471        3        0  uart stuff&lt;br /&gt;
 IRQ 16: 4FF12471        2        0  uart stuff&lt;br /&gt;
 IRQ 17: 4FF12471        1        0  uart stuff&lt;br /&gt;
 IRQ 18: 4FF12471        0        0  uart stuff&lt;br /&gt;
 IRQ 19: 4FF1197D        4        0  nor, i think&lt;br /&gt;
 IRQ 1A: 4FF1197D        3        0  nor, i think&lt;br /&gt;
 IRQ 1B: 4FF1197D        2        0  nor, i think&lt;br /&gt;
 IRQ 1C: 4FF1197D        1        0  nor, i think&lt;br /&gt;
 IRQ 1D: 4FF1197D        0        0  nor, i think(this needed to load iboot)&lt;br /&gt;
 IRQ 1E: 4FF0354D 4FF2DDD0        0  H2fmi misc stuff&lt;br /&gt;
 IRQ 1F: 4FF0354D 4FF2DC70        0  H2fmi misc stuff&lt;br /&gt;
 IRQ 2F: 4FF01655        5        0  dma_int_handler&lt;br /&gt;
 IRQ 30: 4FF01655        6        0  dma_int_handler&lt;br /&gt;
 IRQ 31: 4FF01655        7        0  dma_int_handler&lt;br /&gt;
 IRQ 32: 4FF01655        8        0  dma_int_handler&lt;br /&gt;
&lt;br /&gt;
== [[iPod touch 3G]] ==&lt;br /&gt;
=== [[LLB]] IRQ table: ===&lt;br /&gt;
 IRQ  6: 84003039        0        0&lt;br /&gt;
 IRQ 11: 8400327D 8401209C        0&lt;br /&gt;
 IRQ 13: 8400327D 8401200C        0&lt;br /&gt;
 IRQ 14: 84005681        4        0&lt;br /&gt;
 IRQ 15: 84005681        3        0&lt;br /&gt;
 IRQ 16: 84005681        2        0&lt;br /&gt;
 IRQ 17: 84005681        1        0&lt;br /&gt;
 IRQ 18: 84005681        0        0&lt;br /&gt;
 IRQ 1E: 840021B9 84014360        0&lt;br /&gt;
 IRQ 1F: 840021B9 84014200        0&lt;br /&gt;
&lt;br /&gt;
=== [[iBoot]] IRQ table ===&lt;br /&gt;
 IRQ  6: 4FF04DF5        0        0&lt;br /&gt;
 IRQ  E: 4FF12AED        0        0  synopsys_otg_handle_endpoint_out&lt;br /&gt;
 IRQ 11: 4FF05039 4FF29100        0  i2c related&lt;br /&gt;
 IRQ 13: 4FF05039 4FF29070        0  i2c related&lt;br /&gt;
 IRQ 14: 4FF11AF5        4        0  uart stuff&lt;br /&gt;
 IRQ 15: 4FF11AF5        3        0  uart stuff&lt;br /&gt;
 IRQ 16: 4FF11AF5        2        0  uart stuff&lt;br /&gt;
 IRQ 17: 4FF11AF5        1        0  uart stuff&lt;br /&gt;
 IRQ 18: 4FF11AF5        0        0  uart stuff&lt;br /&gt;
 IRQ 1E: 4FF039A9 4FF2CBB0        0  H2fmi misc stuff&lt;br /&gt;
 IRQ 1F: 4FF039A9 4FF2CA50        0  H2fmi misc stuff&lt;br /&gt;
 IRQ 2F: 4FF01655        5        0  dma_int_handler&lt;br /&gt;
 IRQ 30: 4FF01655        6        0  dma_int_handler&lt;br /&gt;
 IRQ 31: 4FF01655        7        0  dma_int_handler&lt;br /&gt;
 IRQ 32: 4FF01655        8        0  dma_int_handler&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=IBoot_Environment_Variable_Overflow&amp;diff=5262</id>
		<title>IBoot Environment Variable Overflow</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=IBoot_Environment_Variable_Overflow&amp;diff=5262"/>
		<updated>2009-10-21T20:22:23Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* Implementation in purplera1n */ yes it should be there, the first one sets the env var and the second, the one you said shouldnt be there, actually performs th eexploit ;)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:iBoot Environment Variable Overflow}}&lt;br /&gt;
This is an exploit in the iBoot parsing of commands and environment variables.&lt;br /&gt;
&lt;br /&gt;
== Credit ==&lt;br /&gt;
[[User:Geohot|geohot]]&lt;br /&gt;
&lt;br /&gt;
== Explanation ==&lt;br /&gt;
This is a heap overflow in 3.0's [[iBoot]]. I'm really tired right now and will write more tomorrow.&lt;br /&gt;
&lt;br /&gt;
My implementation saves the first 8 bytes in overruns(important or phone crashes), and overwrites the first 8 bytes of the '?' environment variable in the ring buffer. When the ring buffer is freed, it attempts to close the ring. In doing so, it changes the command table to have an entry at 0x41000000, where I then(must be done after or else cmd pointer gets overwritten) upload the geohot command. Run it and enjoy.&lt;br /&gt;
&lt;br /&gt;
== Implementation in purplera1n ==&lt;br /&gt;
setenv a bbbbbbbbb1bbbbbbbbb2bbbbbbbbb3bbbbbbbbb4bbbbbbbbb5bbbbbbbbb6bbbbbbbbb7bbbbbbbbb8bbbbbbbbb9bbbbbbbbbAbbbbbbbbbBbbbbbbbbbCbbbbbbbbbDbbbbbbbbbEbbbbbbbbbbbbtbbbbbbbbbubbbbbbbbbvbbbbbbbbbwbbbbbbbbbxbbbbbbbbbybbbbbbbbbzbbbbbbbbbHbbbbbbbbbIbbbbbbbbbJbbbbgeohotbbbbbbbbbLbbbbbbbbbMbbbbbbbbbNbbbbbbbbbObbbbbbbbbPbbbbbbbbbbQbbbbbbbbbRbbbbbbbbbSbbbbbbbbbTbbbbbbbbbUbbbbbbbbbVbbbbbbbbbWbbbbbbb&lt;br /&gt;
&lt;br /&gt;
xxxx $a $a $a $a geohotaaaa \&amp;quot;\x04\x01\&amp;quot; \\ \&amp;quot;\x0c\&amp;quot; \\ \\ \\ \\ \\ \&amp;quot;\x41\x04\xA0\x02\&amp;quot; \\ \\ \\ \\ wwww;echo copyright;echo geohot&lt;br /&gt;
[[Category:Exploits]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Talk:Tethered_jailbreak&amp;diff=5173</id>
		<title>Talk:Tethered jailbreak</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Talk:Tethered_jailbreak&amp;diff=5173"/>
		<updated>2009-10-16T05:02:13Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I suggest no work should be done on making it untethered until the iphone 3,1 is released. {{unsigned|Revolution|01:01, October 15, 2009 (EST)}}&lt;br /&gt;
&lt;br /&gt;
No work done until iPhone3,1? That's a stretch. How about no public-work / for release until iPhone 3,1. If no jailbreakable iPhone3,1 in July, then no upgrade (for me) from iPhone2,1 :) . [[User:Iemit737|Iemit737]] 02:49, 16 October 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
thats probably what revolution implied :P [[User:ChronicDev|ChronicDev]] 03:05, 16 October 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Really I think no work at all since nitrokey published the exploit being kept in secret I think no work should be done so there is no risk of any compromise. and secondly if nitrokey got access to an unpublished exploit twice I think that there should be more security about all of this. Since nitrokey stole the a baseband exploit and a bootrom exploit. Soz about my rambling Im very tired [[User:Revolution|Revolution]] 04:02, 16 October 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
actually [[NitroKey]] stole 2 baseband exploits from devteam and then 1 boootrom exploit from us, so they burned a potential unlock vector making them bigger douches :P&lt;br /&gt;
&lt;br /&gt;
anyway, info was a bit more &amp;quot;loose&amp;quot; at the time, and we have definitely taken measures to secure all of our private information. If you were implying that any new secret info that we find will be seen by nitrokey, then we are already screwed by that logic. [[User:ChronicDev|ChronicDev]] 05:02, 16 October 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Talk:Tethered_jailbreak&amp;diff=5167</id>
		<title>Talk:Tethered jailbreak</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Talk:Tethered_jailbreak&amp;diff=5167"/>
		<updated>2009-10-16T03:05:29Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I suggest no work should be done on making it untethered until the iphone 3,1 is released. {{unsigned|Revolution|01:01, October 15, 2009 (EST)}}&lt;br /&gt;
&lt;br /&gt;
No work done until iPhone3,1? That's a stretch. How about no public-work / for release until iPhone 3,1. If no jailbreakable iPhone3,1 in July, then no upgrade (for me) from iPhone2,1 :) . [[User:Iemit737|Iemit737]] 02:49, 16 October 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
thats probably what revolution implied :P [[User:ChronicDev|ChronicDev]] 03:05, 16 October 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Talk:Tethered_jailbreak&amp;diff=5166</id>
		<title>Talk:Tethered jailbreak</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Talk:Tethered_jailbreak&amp;diff=5166"/>
		<updated>2009-10-16T03:05:18Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I suggest no work should be done on making it untethered until the iphone 3,1 is released. {{unsigned|Revolution|01:01, October 15, 2009 (EST)}}&lt;br /&gt;
&lt;br /&gt;
No work done until iPhone3,1? That's a stretch. How about no public-work / for release until iPhone 3,1. If no jailbreakable iPhone3,1 in July, then no upgrade (for me) from iPhone2,1 :) . [[User:Iemit737|Iemit737]] 02:49, 16 October 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
thats probably what revolution implied :P&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Tethered_jailbreak&amp;diff=5165</id>
		<title>Tethered jailbreak</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Tethered_jailbreak&amp;diff=5165"/>
		<updated>2009-10-16T03:04:52Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A tethered jailbreak is one that requires your computer to boot the device.&lt;br /&gt;
&lt;br /&gt;
== Tethered Devices ==&lt;br /&gt;
These are devices that a tethered jailbreak must be used for in all current public tools&lt;br /&gt;
* [[iPod touch 3G]]&lt;br /&gt;
* [[iPhone 3G S]] w/ updated bootrom&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Bootrom_240.5.1&amp;diff=5146</id>
		<title>Bootrom 240.5.1</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Bootrom_240.5.1&amp;diff=5146"/>
		<updated>2009-10-14T23:28:14Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: New page: Second revision of the S5L8720 bootrom. Found on iPod touch 2G devices sold after September 9, 2009.  '''This is not vulnerable to the 24kPwn exploit'''.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Second revision of the [[S5L8720]] bootrom. Found on [[iPod touch 2G]] devices sold after September 9, 2009.&lt;br /&gt;
&lt;br /&gt;
'''This is not vulnerable to the [[24kPwn]] exploit'''.&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Bootrom_240.4&amp;diff=5145</id>
		<title>Bootrom 240.4</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Bootrom_240.4&amp;diff=5145"/>
		<updated>2009-10-14T23:26:40Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: New page: S5L8720 bootrom revision for the iPod touch 2G's sold between September 2008 and September 2009. '''Vulnerable to the 24kPwn exploit.'''&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[S5L8720]] bootrom revision for the iPod touch 2G's sold between September 2008 and September 2009. '''Vulnerable to the [[24kPwn]] exploit.'''&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Bootrom&amp;diff=5144</id>
		<title>Bootrom</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Bootrom&amp;diff=5144"/>
		<updated>2009-10-14T23:25:41Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: New page: == Revisions == * iBoot-240.4 (S5L8720 Revision 1) * iBoot-240.5.1 (S5L8720 Revision 2, 24kPwn fixed)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Revisions ==&lt;br /&gt;
* [[iBoot-240.4]] ([[S5L8720]] Revision 1)&lt;br /&gt;
* [[iBoot-240.5.1]] ([[S5L8720]] Revision 2, 24kPwn fixed)&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=IBoot_(Bootloader)&amp;diff=5143</id>
		<title>IBoot (Bootloader)</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=IBoot_(Bootloader)&amp;diff=5143"/>
		<updated>2009-10-14T23:24:39Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* Revisions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:iBoot}}&lt;br /&gt;
This is Apple's stage 2 bootloader for all of the iDevices. It runs what is known as [[Recovery Mode]]. It has an interactive interface which can be used over USB or serial.&lt;br /&gt;
&lt;br /&gt;
== Revisions ==&lt;br /&gt;
* [[iBoot-99]] (1A420 a.k.a. Prototype)&lt;br /&gt;
* [[iBoot-159]] (1.0.x)&lt;br /&gt;
* [[iBoot-204]] (1.1 and 1.1.1 3A109a)&lt;br /&gt;
* [[iBoot-204.0.2]] (1.1.1 3A110a)&lt;br /&gt;
* [[iBoot-204.2.9]] (1.1.2)&lt;br /&gt;
* [[iBoot-204.3.14]] (1.1.3 and 1.1.4)&lt;br /&gt;
* [[iBoot-204.3.16]] (1.1.5)&lt;br /&gt;
* [[iBoot-320.20]] (2.0.x)&lt;br /&gt;
* [[iBoot-385.22]] (2.1 and 2.1.1)&lt;br /&gt;
* [[iBoot-385.49]] (2.2 and 2.2.1)&lt;br /&gt;
* [[iBoot-596.24]] (3.0 and 3.0.1)&lt;br /&gt;
* [[iBoot-636.65]] (3.1 and 3.1.1)&lt;br /&gt;
* [[iBoot-636.66]] (3.1.1 7C146 and 3.1.2)&lt;br /&gt;
&lt;br /&gt;
==Commands used as an exploit vector==&lt;br /&gt;
* Until 2.0 beta 6, the [[diags]] command would jump to code at the address provided to it. For example, if you sent &amp;quot;diags 0x9000000&amp;quot;, it would directly jump to the code at written to 0x9000000. There is now a check that only allows engineering devices to utilize this backdoor.&lt;br /&gt;
* In the iPod Touch 2G firmware 2.1.1 iBoot (iBoot version 385.22), the [[ARM7 Go]] command could be used to run a payload on the ARM7 in the iPod Touch 2G.&lt;br /&gt;
* The [[iBoot Environment Variable Overflow]] exists in 3.0 iBoot, and is being used by [[purplera1n]] and [[redsn0w]] (as of version 0.8) in order to flash the oversized [[LLB]] which utilizes the [[24kPwn]] exploit to the iPhone 3GS. While this exploit is present on iPod Touch 2nd Gen, it is not used in favour of the [[ARM7 Go]] exploit.&lt;br /&gt;
* The [[usb_control_msg(0x21, 2) Exploit]] exists in 3.1 and 3.1.1 iBoot and is being used by [[greenpois0n]] in order to flash the oversized [[LLB]] which utilizes the [[24kPwn]] exploit to the iPhone 3GS and iPod Touch 3G. While this exploit is present on iPod Touch 2nd Gen, it is not used in favour of the [[ARM7 Go]] exploit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==OpeniBoot==&lt;br /&gt;
There is an open source version of iBoot being made so that Linux on the iPhone will work. You can check out the source [http://github.com/planetbeing/iphonelinux/tree/master/openiboot here]. It is VERY useful if you are ever reversing iBoot and do not feel like finding out what certain hardware registers are yourself.&lt;br /&gt;
&lt;br /&gt;
==Remappings==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// n88&lt;br /&gt;
0x4FF00000 =&amp;gt; 0x0&lt;br /&gt;
0x40000000 =&amp;gt; 0xC0000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[iBoot (Enums)]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Main_Page&amp;diff=5116</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Main_Page&amp;diff=5116"/>
		<updated>2009-10-13T01:04:28Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Logo by iHassan --&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:Iptwiki.jpg‎]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;!-- Added a split column information box- computid --&amp;gt;&lt;br /&gt;
{{:Main Page/Welcome}}&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color:orange; text-align:center; width:25%;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;[[Jailbreak iPhone2,1 / iPod3,1|Find bootrom exploit allowing unsigned code exec via USB (S5L8920+)]]&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color:orange; text-align:center; width:25%;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;[[Unlock 2.0|Break Chain of Trust (X-Gold 608)]]&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[Disclaimer]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
==Software==&lt;br /&gt;
* [[/|Filesystem]]&lt;br /&gt;
* [[Firmware]]&lt;br /&gt;
* [[Keys]]&lt;br /&gt;
* [[Protocols]]&lt;br /&gt;
* [[System Log]]&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
=== iPhone ===&lt;br /&gt;
* [[m68ap|iPhone (m68ap)]]&lt;br /&gt;
* [[n82ap|iPhone 3G (n82ap)]]&lt;br /&gt;
* [[N88AP|iPhone 3GS (n88ap)]]&lt;br /&gt;
&lt;br /&gt;
=== iPod touch ===&lt;br /&gt;
* [[n45ap|iPod touch (n45ap)]]&lt;br /&gt;
* [[n72ap|iPod touch 2nd Generation (n72ap)]]&lt;br /&gt;
* [[N18ap|iPod touch 3rd Generation (n18ap)]]&lt;br /&gt;
&lt;br /&gt;
==App Processor ([[Jailbreak]])==&lt;br /&gt;
The [[iPhone]], [[iPod touch]], and [[iPhone 3G]] makes use of the [[S5L8900]] platform as application processor. Current models, such as the [[iPod touch 2G]] and the [[N88AP|iPhone 3GS]], use newer processors. The [[S5L8720]] and [[S5L8920]] are used, respectively. The [[N18ap|iPod Touch 3G]] operates using the [[S5L8922]] application processor. Here is where the [[Jailbreak|jailbreak]] applies.&lt;br /&gt;
&lt;br /&gt;
==Baseband ([[Unlock]])==&lt;br /&gt;
The [[Baseband Device]] is where the [[unlock]] applies.&lt;br /&gt;
&lt;br /&gt;
==Application Development==&lt;br /&gt;
* [[Toolchain]] (Includes tutorials)&lt;br /&gt;
* [[Toolchain 2.0]] (Includes tutorials)&lt;br /&gt;
* [[Frameworks]]&lt;br /&gt;
* [[MobileDevice Library]]&lt;br /&gt;
* [[Apple Certification Process]]&lt;br /&gt;
* [[Bypassing iPhone Code Signatures]]&lt;br /&gt;
* [[Distribution Methods]]&lt;br /&gt;
&lt;br /&gt;
==Application Copy Protection==&lt;br /&gt;
* [[Copy Protection Overview]]&lt;br /&gt;
* [[Application Structure and Signatures]]&lt;br /&gt;
* [[Mach-O Loading Process]]&lt;br /&gt;
* [[Bugging Debuggers]]&lt;br /&gt;
&lt;br /&gt;
==Definitions==&lt;br /&gt;
* [[Jailbreak]]&lt;br /&gt;
* [[Activation]]&lt;br /&gt;
* [[Unlock]]&lt;br /&gt;
* [[Baseband Device|Baseband]]&lt;br /&gt;
* [[Baseband Bootloader|Bootloader]]&lt;br /&gt;
* [[DFU]]&lt;br /&gt;
* [[iBoot]]&lt;br /&gt;
* [[iBEC]]&lt;br /&gt;
* [[iBSS]]&lt;br /&gt;
* [[NORID]]&lt;br /&gt;
* [[CHIPID]]&lt;br /&gt;
&lt;br /&gt;
==Other==&lt;br /&gt;
* [[Bluetooth]]&lt;br /&gt;
* [[Glossary]]&lt;br /&gt;
* [[Tutorials]]&lt;br /&gt;
* [[Useful Links]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=VROM_(S5L8900)&amp;diff=5115</id>
		<title>VROM (S5L8900)</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=VROM_(S5L8900)&amp;diff=5115"/>
		<updated>2009-10-13T01:04:02Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The VROM, or Virtual Read Only Memory, is said to be the earliest significant code that runs on the [[S5L8900]]. It is mapped to 0x20000000, and is believed to be copied from ROM and put there. It either boots the device or runs [[DFU]]. On 1.x, it was jumped to for RSA checking, although now in 2.x onward, [[iBoot]] and friends do that on their own.&lt;br /&gt;
&lt;br /&gt;
The [[pwnage]] exploit resides here.&lt;br /&gt;
&lt;br /&gt;
[[Category:VROM]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=VROM_(S5L8900)&amp;diff=5114</id>
		<title>VROM (S5L8900)</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=VROM_(S5L8900)&amp;diff=5114"/>
		<updated>2009-10-13T01:03:15Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The VROM, or Virtual Read Only Memory, is said to be the earliest significant code that runs on the [[S5L8900]]. It is mapped to 0x20000000, and is believed to be copied from ROM and put there. It either boots the device or runs the [[DFU]]. On 1.x, it was jumped to for RSA checking, although now in 2.x iBoot and friends do that on their own.&lt;br /&gt;
&lt;br /&gt;
The [[pwnage]] exploit resides here.&lt;br /&gt;
&lt;br /&gt;
[[Category:VROM]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=ARM7_Go&amp;diff=5113</id>
		<title>ARM7 Go</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=ARM7_Go&amp;diff=5113"/>
		<updated>2009-10-13T00:57:59Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* Payload */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This vulnerability is exclusive to the [[iPod touch 2G]]. It is present in the device's 2.1.1 firmware, as well as the [[iBEC]] / [[iBSS]] if you choose to upload it via DFU. It allows the running of unsigned code on the ARM7 coprocessor.&lt;br /&gt;
&lt;br /&gt;
==Credit==&lt;br /&gt;
[[User:ChronicDev|Chronic]] and [[iPhone Dev Team]] (independently)&lt;br /&gt;
&lt;br /&gt;
==Exploit==&lt;br /&gt;
There is an ARM7 coprocessor in the iPod Touch 2G in addition to the main processor, the ARM11. Like the [[Audio DSP Module|ADM]] in the [[S5L8900]] devices, it has access to everything the ARM11 has access to, such as the AES engine, the PKE accelerator, and such. The actual vulnerability is that, in the iPod Touch 2G 2.1.1 firmware, they left behind two commands from what was presumably a debug [[iBoot]]: arm7_stop and arm7_go. They were promptly removed in 2.2, but in 2.1.1 it would read the environmental variable &amp;quot;loadaddr&amp;quot; and have the ARM7 coprocessor execute whatever code was at that address. There was no signature or range checks in place for the command.&lt;br /&gt;
&lt;br /&gt;
==Payload==&lt;br /&gt;
The command gives the ARM7 the load address (default is 0x09000000) of an &amp;quot;image&amp;quot; you sent it, and it will jump to it. The limitation is, unlike the [[diags]] exploit you cannot just pass a patched [[iBoot]] or [[iBEC]]. You must write a payload for it to run, but one that patches [[iBEC]] or [[iBoot]] in memory would do fine.&lt;br /&gt;
&lt;br /&gt;
==Implementations==&lt;br /&gt;
Two released payloads are [[RedSn0w]] and [[0wnboot]]&lt;br /&gt;
&lt;br /&gt;
==How to use==&lt;br /&gt;
* Enter device in [[DFU]] mode.&lt;br /&gt;
* Upload iBSS 2.1.1.&lt;br /&gt;
* Unplug and then replug the device.&lt;br /&gt;
* Upload payload you wish to execute.&lt;br /&gt;
* Run arm7_go command to execute payload.&lt;br /&gt;
* Run arm7_stop to stop ARM7, needed if you plan on sending anything else to 0x09000000&lt;br /&gt;
&lt;br /&gt;
[[Category:Exploits]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=IPhone_Dev_Team&amp;diff=5112</id>
		<title>IPhone Dev Team</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=IPhone_Dev_Team&amp;diff=5112"/>
		<updated>2009-10-13T00:56:09Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* Current members */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:iPhone Dev Team}}&lt;br /&gt;
==Blog==&lt;br /&gt;
[http://blog.iphone-dev.org Dev Team blog]&lt;br /&gt;
&lt;br /&gt;
==Current members== &lt;br /&gt;
asap18, bgm, Bugout, bushing, c1de0x, chris, CPICH, dinopio, Fred_, ghost_000, gray, iZsh, jim–, marcan, MuscleNerd, netkas, planetbeing, pr3d4t0r, pumpkin, pytey, roxfan, saurik, Turbo, w___, wizdaz, Zf&lt;br /&gt;
&lt;br /&gt;
==Previous Members==&lt;br /&gt;
drudge, [[geohot]], gj, kroo, Nate True, NerveGas, sam, Whiterat, [[Zibri]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[PwnageTool]]&lt;br /&gt;
* [[pwnage]]&lt;br /&gt;
* [[pwnage 2.0]]&lt;br /&gt;
* [[yellowsn0w]]&lt;br /&gt;
* [[redsn0w]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Pwnage_2.0&amp;diff=5111</id>
		<title>Pwnage 2.0</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Pwnage_2.0&amp;diff=5111"/>
		<updated>2009-10-13T00:55:26Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This exploit in the [[S5L8900]] [[VROM (S5L8900)|bootrom]] is really the ultimate exploit, since it allows unsigned code to be run at the lowest level. It is available in all devices that use the [[S5L8900]] - [[iPhone]], [[iPod Touch]] and [[iPhone 3G]].&lt;br /&gt;
&lt;br /&gt;
==Credit==&lt;br /&gt;
[[The dev team]]&lt;br /&gt;
&lt;br /&gt;
==Exploit==&lt;br /&gt;
There is a stack overflow in the certificate parsing code. By passing a malformed certificate, unsigned code can be run.&lt;br /&gt;
&lt;br /&gt;
==Implementations==&lt;br /&gt;
*[[PwnageTool]]&lt;br /&gt;
*[[QuickPwn]]&lt;br /&gt;
*[[WinPwn]]&lt;br /&gt;
*[[redsn0w]]&lt;br /&gt;
*[http://lpahome.com/geohot/iran.rar iran]&lt;br /&gt;
&lt;br /&gt;
[[Category:Exploits]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Pwnage&amp;diff=5110</id>
		<title>Pwnage</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Pwnage&amp;diff=5110"/>
		<updated>2009-10-13T00:53:51Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* 2.0+ (S5L8720 and on) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This exploit is in the [[S5L8900]] bootrom, thus available in the iPhone, iPod Touch and iPhone 3G. The exploit is that the bootrom doesn't signature check [[LLB]].&lt;br /&gt;
&lt;br /&gt;
==Credit==&lt;br /&gt;
[[The dev team]]&lt;br /&gt;
&lt;br /&gt;
==Exploit==&lt;br /&gt;
===Pre-2.0 ([[S5L8900]])===&lt;br /&gt;
The [[NOR]] was set up in a way that when the firmware images were flashed there, the RSA signatures were dropped along with the rest of the firmware container. So although [[iBoot]] signature checked the [[kernel]], [[LLB]] did not signature check [[iBoot]], and the [[VROM]] did not signature check [[LLB]].&lt;br /&gt;
&lt;br /&gt;
===2.0+ ([[S5L8900]])===&lt;br /&gt;
The [[VROM (S5L8900)|VROM]] doesn't sig check the stuff it jumps to in the [[NOR]]. So to use the exploit, one finds a way of writing to the [[NOR]] unsigned, either with [[iBoot]] hacks or kernel patches. While images are now written to [[NOR]] in a way that one can verify the other, like [[LLB]] verifying [[iBoot]], the [[VROM (S5L8900)|bootrom]] cannot be written to, so it still defaults to just reading [[LLB]] normally, un-signature checked.&lt;br /&gt;
&lt;br /&gt;
===2.0+ ([[S5L8720]] and on)===&lt;br /&gt;
This exploit has been fixed on the [[n72ap|iPod Touch 2G]] and all devices released after it. The [[VROM (S5L8720)|bootrom]] sigchecks [[LLB]] before jumping to it now, and if the [[LLB]] is patched, it will default to [[DFU]] mode. The [[24kPwn]] exploit was later found in the [[iPod touch 2G]] [[VROM (S5L8900)|bootrom]] allowing the device to be fully jailbroken.&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
* [[PwnageTool]]&lt;br /&gt;
* [[iPhoneLinux]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Jailbreaks]]&lt;br /&gt;
[[Category:Exploits]]&lt;br /&gt;
[[Category:VROM]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Pwnage&amp;diff=5109</id>
		<title>Pwnage</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Pwnage&amp;diff=5109"/>
		<updated>2009-10-13T00:52:20Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* 2.0+ (S5L8720 and on) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This exploit is in the [[S5L8900]] bootrom, thus available in the iPhone, iPod Touch and iPhone 3G. The exploit is that the bootrom doesn't signature check [[LLB]].&lt;br /&gt;
&lt;br /&gt;
==Credit==&lt;br /&gt;
[[The dev team]]&lt;br /&gt;
&lt;br /&gt;
==Exploit==&lt;br /&gt;
===Pre-2.0 ([[S5L8900]])===&lt;br /&gt;
The [[NOR]] was set up in a way that when the firmware images were flashed there, the RSA signatures were dropped along with the rest of the firmware container. So although [[iBoot]] signature checked the [[kernel]], [[LLB]] did not signature check [[iBoot]], and the [[VROM]] did not signature check [[LLB]].&lt;br /&gt;
&lt;br /&gt;
===2.0+ ([[S5L8900]])===&lt;br /&gt;
The [[VROM (S5L8900)|VROM]] doesn't sig check the stuff it jumps to in the [[NOR]]. So to use the exploit, one finds a way of writing to the [[NOR]] unsigned, either with [[iBoot]] hacks or kernel patches. While images are now written to [[NOR]] in a way that one can verify the other, like [[LLB]] verifying [[iBoot]], the [[VROM (S5L8900)|bootrom]] cannot be written to, so it still defaults to just reading [[LLB]] normally, un-signature checked.&lt;br /&gt;
&lt;br /&gt;
===2.0+ ([[S5L8720]] and on)===&lt;br /&gt;
This exploit has been fixed on the [[n72ap|iPod Touch 2G]] and the [[n82ap|iPhone 3GS]]. The bootrom sigchecks LLB before jumping to it now, and if the LLB is patched, it will default to DFU mode. The [[24kpwn]] bootrom exploit was later found allowing the device to be fully jailbroken.&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
* [[PwnageTool]]&lt;br /&gt;
* [[iPhoneLinux]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Jailbreaks]]&lt;br /&gt;
[[Category:Exploits]]&lt;br /&gt;
[[Category:VROM]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Pwnage&amp;diff=5108</id>
		<title>Pwnage</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Pwnage&amp;diff=5108"/>
		<updated>2009-10-13T00:52:05Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* 2.0+ (S5L8720) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This exploit is in the [[S5L8900]] bootrom, thus available in the iPhone, iPod Touch and iPhone 3G. The exploit is that the bootrom doesn't signature check [[LLB]].&lt;br /&gt;
&lt;br /&gt;
==Credit==&lt;br /&gt;
[[The dev team]]&lt;br /&gt;
&lt;br /&gt;
==Exploit==&lt;br /&gt;
===Pre-2.0 ([[S5L8900]])===&lt;br /&gt;
The [[NOR]] was set up in a way that when the firmware images were flashed there, the RSA signatures were dropped along with the rest of the firmware container. So although [[iBoot]] signature checked the [[kernel]], [[LLB]] did not signature check [[iBoot]], and the [[VROM]] did not signature check [[LLB]].&lt;br /&gt;
&lt;br /&gt;
===2.0+ ([[S5L8900]])===&lt;br /&gt;
The [[VROM (S5L8900)|VROM]] doesn't sig check the stuff it jumps to in the [[NOR]]. So to use the exploit, one finds a way of writing to the [[NOR]] unsigned, either with [[iBoot]] hacks or kernel patches. While images are now written to [[NOR]] in a way that one can verify the other, like [[LLB]] verifying [[iBoot]], the [[VROM (S5L8900)|bootrom]] cannot be written to, so it still defaults to just reading [[LLB]] normally, un-signature checked.&lt;br /&gt;
&lt;br /&gt;
===2.0+ ([[S5L8720 and on]])===&lt;br /&gt;
This exploit has been fixed on the [[n72ap|iPod Touch 2G]] and the [[n82ap|iPhone 3GS]]. The bootrom sigchecks LLB before jumping to it now, and if the LLB is patched, it will default to DFU mode. The [[24kpwn]] bootrom exploit was later found allowing the device to be fully jailbroken.&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
* [[PwnageTool]]&lt;br /&gt;
* [[iPhoneLinux]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Jailbreaks]]&lt;br /&gt;
[[Category:Exploits]]&lt;br /&gt;
[[Category:VROM]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Pwnage&amp;diff=5107</id>
		<title>Pwnage</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Pwnage&amp;diff=5107"/>
		<updated>2009-10-13T00:51:46Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* 2.0+ (S5L8900) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This exploit is in the [[S5L8900]] bootrom, thus available in the iPhone, iPod Touch and iPhone 3G. The exploit is that the bootrom doesn't signature check [[LLB]].&lt;br /&gt;
&lt;br /&gt;
==Credit==&lt;br /&gt;
[[The dev team]]&lt;br /&gt;
&lt;br /&gt;
==Exploit==&lt;br /&gt;
===Pre-2.0 ([[S5L8900]])===&lt;br /&gt;
The [[NOR]] was set up in a way that when the firmware images were flashed there, the RSA signatures were dropped along with the rest of the firmware container. So although [[iBoot]] signature checked the [[kernel]], [[LLB]] did not signature check [[iBoot]], and the [[VROM]] did not signature check [[LLB]].&lt;br /&gt;
&lt;br /&gt;
===2.0+ ([[S5L8900]])===&lt;br /&gt;
The [[VROM (S5L8900)|VROM]] doesn't sig check the stuff it jumps to in the [[NOR]]. So to use the exploit, one finds a way of writing to the [[NOR]] unsigned, either with [[iBoot]] hacks or kernel patches. While images are now written to [[NOR]] in a way that one can verify the other, like [[LLB]] verifying [[iBoot]], the [[VROM (S5L8900)|bootrom]] cannot be written to, so it still defaults to just reading [[LLB]] normally, un-signature checked.&lt;br /&gt;
&lt;br /&gt;
===2.0+ ([[S5L8720]])===&lt;br /&gt;
This exploit has been fixed on the [[n72ap|iPod Touch 2G]] and the [[n82ap|iPhone 3GS]]. The bootrom sigchecks LLB before jumping to it now, and if the LLB is patched, it will default to DFU mode. The [[24kpwn]] bootrom exploit was later found allowing the device to be fully jailbroken.&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
* [[PwnageTool]]&lt;br /&gt;
* [[iPhoneLinux]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Jailbreaks]]&lt;br /&gt;
[[Category:Exploits]]&lt;br /&gt;
[[Category:VROM]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=S5L8900&amp;diff=5106</id>
		<title>S5L8900</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=S5L8900&amp;diff=5106"/>
		<updated>2009-10-13T00:49:19Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* iBoot / Kernel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the Application Processor shared between the [[M68ap|iPhone]], [[N45ap|iPod touch]], and the [[N82ap|iPhone 3G]]. Not much is known about it through official sources. This processor is not used in any of the newest devices, being replaced by the [[S5L8720]] and [[S5L8920]].&lt;br /&gt;
&lt;br /&gt;
==[[S5L File Formats|Firmware File Formats]]==&lt;br /&gt;
&lt;br /&gt;
==Exploits==&lt;br /&gt;
===[[System|Userland]]===&lt;br /&gt;
* [[Restore Mode]] - Firmware v1.0.2 and below&lt;br /&gt;
* [[Symlinks]] - Firmware v1.1.1 and below&lt;br /&gt;
* [[LibTiff|LibTIFF]] - Firmware v1.1.1 and below&lt;br /&gt;
* [[Mknod]] - Firmware v1.1.2 and below&lt;br /&gt;
* [[Dual Boot Exploit]] - Firmware 1.1.4 / v2.0b3 and below&lt;br /&gt;
&lt;br /&gt;
===[[iBoot]] / [[Kernel]]===&lt;br /&gt;
* [[Ramdisk Hack]] - 1.1.4 / 2.0 beta 3 and below&lt;br /&gt;
* [[diags|Diags Exploit]] - 1.1.4 / v2.0 beta 5 and below&lt;br /&gt;
* [[iBoot Environment Variable Overflow]] - 3.1 beta 1 and below&lt;br /&gt;
* [[usb_control_msg(0x21, 2) Exploit]] - 3.1.2 and below&lt;br /&gt;
&lt;br /&gt;
===[[VROM (S5L8900)|Bootrom]]===&lt;br /&gt;
* [[pwnage|Pwnage 1.0 (Ramdisk + AppleImage2NORAccess)]]&lt;br /&gt;
* [[Pwnage 2.0|Pwnage 2.0 (DFU + Malformed Certificate)]]&lt;br /&gt;
&lt;br /&gt;
==Boot Chain==&lt;br /&gt;
[[VROM]]-&amp;gt;[[LLB]]-&amp;gt;[[iBoot]]-&amp;gt;[[Kernel]]-&amp;gt;[[System|System Software]]&lt;br /&gt;
&lt;br /&gt;
One of the [[iPhoneLinux]] goals are to replace that Boot Chain after iBoot:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[VROM]]-&amp;gt;OpeniBoot-&amp;gt;Linux Kernel-&amp;gt;X Server-&amp;gt;Window Manager&lt;br /&gt;
&lt;br /&gt;
==Upgrade Process==&lt;br /&gt;
&lt;br /&gt;
=== [[Restore Mode]] ===&lt;br /&gt;
The common upgrade process chain is [[VROM]]-&amp;gt;[[DFU]]-&amp;gt;[[WTF]]-&amp;gt;[[iBoot]]-&amp;gt;[[Kernel]]-&amp;gt;[[Ramdisk]]-&amp;gt;[[Restore Mode]].&lt;br /&gt;
&lt;br /&gt;
=== [[DFU|DFU Mode]] ===&lt;br /&gt;
To flash an older version of the iPhone software you have to let your phone reside in [[DFU]]. In iTunes you have to press the option key (Mac) or the shift key (Windows) when pressing 'Restore' to be able to manually chose an [[IPSW File Format|IPSW]].&lt;br /&gt;
&lt;br /&gt;
==== Boot Chain ====&lt;br /&gt;
[[VROM]]-&amp;gt;[[DFU]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=S5L8720&amp;diff=5105</id>
		<title>S5L8720</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=S5L8720&amp;diff=5105"/>
		<updated>2009-10-13T00:48:11Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* iBoot / Kernel Level */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the Application Processor used on the [[n72ap|iPod Touch 2G]].&lt;br /&gt;
&lt;br /&gt;
==Exploits==&lt;br /&gt;
===[[iBoot]] / [[Kernel]] Level===&lt;br /&gt;
'''Note''': [[iBoot]] on the S5l8720 can be downgraded, allowing any of these exploits to be used on future firmwares&lt;br /&gt;
&lt;br /&gt;
* [[ARM7 Go]] - Firmware v2.1.1&lt;br /&gt;
* [[iBoot Environment Variable Overflow]] - 3.1 beta 3 and below&lt;br /&gt;
* [[usb_control_msg(0x21, 2) Exploit]] - 3.1.2 and below&lt;br /&gt;
&lt;br /&gt;
===[[VROM (S5L8720)|Bootrom]]===&lt;br /&gt;
* [[0x24000 Segment Overflow]]&lt;br /&gt;
&lt;br /&gt;
==Boot Chain==&lt;br /&gt;
[[VROM (S5L8720)|VROM]]-&amp;gt;[[LLB]]-&amp;gt;[[iBoot]]-&amp;gt;[[Kernel]]-&amp;gt;[[System|System Software]]&lt;br /&gt;
&lt;br /&gt;
It is definitely worthy to note that the [[Pwnage]] exploit is fixed because the images are now flashed to the [[NOR]] in their encrypted [[IMG3]] containers, and the [[S5L8720 Bootrom|bootrom]] can properly sigcheck [[LLB]]. That being said, unsigned images can still be run using the [[0x24000 Segment Overflow]].&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[S5L8720 (Hardware)]]&lt;br /&gt;
* [[S5L File Formats]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=S5L8720&amp;diff=5104</id>
		<title>S5L8720</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=S5L8720&amp;diff=5104"/>
		<updated>2009-10-13T00:47:54Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* iBoot / Kernel Level */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the Application Processor used on the [[n72ap|iPod Touch 2G]].&lt;br /&gt;
&lt;br /&gt;
==Exploits==&lt;br /&gt;
===[[iBoot]] / [[Kernel]] Level===&lt;br /&gt;
'''Note''': [[iBoot]] on the S5l8720 can be downgraded, allowing either exploit to be used on future firmwares&lt;br /&gt;
&lt;br /&gt;
* [[ARM7 Go]] - Firmware v2.1.1&lt;br /&gt;
* [[iBoot Environment Variable Overflow]] - 3.1 beta 3 and below&lt;br /&gt;
* [[usb_control_msg(0x21, 2) Exploit]] - 3.1.2 and below&lt;br /&gt;
&lt;br /&gt;
===[[VROM (S5L8720)|Bootrom]]===&lt;br /&gt;
* [[0x24000 Segment Overflow]]&lt;br /&gt;
&lt;br /&gt;
==Boot Chain==&lt;br /&gt;
[[VROM (S5L8720)|VROM]]-&amp;gt;[[LLB]]-&amp;gt;[[iBoot]]-&amp;gt;[[Kernel]]-&amp;gt;[[System|System Software]]&lt;br /&gt;
&lt;br /&gt;
It is definitely worthy to note that the [[Pwnage]] exploit is fixed because the images are now flashed to the [[NOR]] in their encrypted [[IMG3]] containers, and the [[S5L8720 Bootrom|bootrom]] can properly sigcheck [[LLB]]. That being said, unsigned images can still be run using the [[0x24000 Segment Overflow]].&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[S5L8720 (Hardware)]]&lt;br /&gt;
* [[S5L File Formats]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=S5L8920&amp;diff=5103</id>
		<title>S5L8920</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=S5L8920&amp;diff=5103"/>
		<updated>2009-10-13T00:46:26Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* iBoot / Kernel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the processor used in the [[iPhone 3GS]].&lt;br /&gt;
&lt;br /&gt;
S5L8920 using [http://www.arm.com/products/CPUs/archi-thumb2.html THUMB-2] instruction set as much as ARM and THUMB ones. So the compiled binaries are not compatible with older CPUs.&lt;br /&gt;
&lt;br /&gt;
== Exploits ==&lt;br /&gt;
=== [[iBoot]] / [[Kernel]] ===&lt;br /&gt;
* [[iBoot Environment Variable Overflow]] - Firmware 3.1b3 and below (Note: [[iBoot]] on the S5L8920 can be downgraded allowing the exploit to be used on future firmwares, but ''only if'' a backup of the device-specific Apple-signed 3.0 iBSS with unique [[ECID]] was made.)&lt;br /&gt;
* [[usb_control_msg(0x21, 2) Exploit]] - 3.1.2 and below.&lt;br /&gt;
&lt;br /&gt;
=== [[S5L8920 (Bootrom)|Bootrom]] ===&lt;br /&gt;
* [[0x24000 Segment Overflow]]&lt;br /&gt;
&lt;br /&gt;
== Boot Chain ==&lt;br /&gt;
[[S5L8920 (Bootrom)|Bootrom]]-&amp;gt;[[LLB]]-&amp;gt;[[iBoot]]-&amp;gt;[[Kernel]]-&amp;gt;[[System|System Software]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[S5L8920 (Bootrom)]]&lt;br /&gt;
* [[S5L8920 (Hardware)]]&lt;br /&gt;
* [[S5L8920 (Hardware - Quick Notes)]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=S5L8922&amp;diff=5102</id>
		<title>S5L8922</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=S5L8922&amp;diff=5102"/>
		<updated>2009-10-13T00:46:06Z</updated>

		<summary type="html">&lt;p&gt;ChronicDev: /* Exploits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the processor used in the [[N18ap|iPod Touch 3G]].&lt;br /&gt;
&lt;br /&gt;
== Exploits ==&lt;br /&gt;
=== [[iBoot]] / [[Kernel]] ===&lt;br /&gt;
* [[usb_control_msg(0x21, 2) Exploit]] - 3.1.2 and below.&lt;br /&gt;
&lt;br /&gt;
=== [[S5L8922 (Bootrom)|Bootrom]] ===&lt;br /&gt;
&lt;br /&gt;
== Boot Chain ==&lt;br /&gt;
[[S5L8922 (Bootrom)|Bootrom]]-&amp;gt;[[LLB]]-&amp;gt;[[iBoot]]-&amp;gt;[[Kernel]]-&amp;gt;[[System|System Software]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[S5L8922 (Bootrom)]]&lt;br /&gt;
* [[S5L8922 (Hardware)]]&lt;/div&gt;</summary>
		<author><name>ChronicDev</name></author>
		
	</entry>
</feed>