<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
<channel>
	<title>Yifan Lu</title>
	
	<link>http://yifan.lu</link>
	<description>Random stuff I'm making and thinking</description>
	<lastBuildDate>Thu, 02 Feb 2012 22:07:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/YifanLu" /><feedburner:info uri="yifanlu" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>YifanLu</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Welcome to the new yifan.lu!</title>
		<link>http://feedproxy.google.com/~r/YifanLu/~3/f4OwTSwmGv4/</link>
		<comments>http://yifan.lu/2012/01/12/welcome-to-the-new-yifan-lu/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 00:08:13 +0000</pubDate>
		<dc:creator>Yifan Lu</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Information]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[yifan.lu]]></category>
		<guid isPermaLink="false">http://yifan.lu/?p=446</guid>
		<description><![CDATA[It&#8217;s a new year, and I&#8217;m a bit tired of the old design. There were some main problems with it besides the looks though. The biggest one is I never wrote a backend for my &#8220;projects&#8221; list, so every time I add a new project, I&#8217;m doing it manually by uploading the files via FTP [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s a new year, and I&#8217;m a bit tired of the old design. There were some main problems with it besides the looks though. The biggest one is I never wrote a backend for my &#8220;projects&#8221; list, so every time I add a new project, I&#8217;m doing it manually by uploading the files via FTP and adding the entry in phpmyadmin. In addition, I&#8217;m sure there were tons of PHP bugs and security holes that I had in the old script. The old theme was also badly coded with many HTML errors and many WordPress incompatibilities.</p>
<p>On this new version of the site, the first thing I did was integrate my <a href="http://yifan.lu/projects/">projects list</a> to WordPress. I wrote a custom plugin that allows me to manage and add my projects with ease and manage things like downloads, version/changlog, screenshots, etc. I may release this plugin as open source one day. I also got a new style thanks to <a href="http://www.cssheaven.org">CSSHeaven</a>. They provided the free HTML template and I coded it into a WordPress style (and also made it more HTML5 compliant). If you have any complaints or suggestions regarding the new site, feel free to comment.</p>
<p>In addition, I added <a title="Kindle GUI Launcher" href="http://yifan.lu/p/kindlelauncher/">two</a> <a href="http://yifan.lu/p/kindletool/">new</a> Kindle projects that I&#8217;ve been working on.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/i2m5k4Ge32vfG_rze4RolEpBLPE/0/da"><img src="http://feedads.g.doubleclick.net/~a/i2m5k4Ge32vfG_rze4RolEpBLPE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/i2m5k4Ge32vfG_rze4RolEpBLPE/1/da"><img src="http://feedads.g.doubleclick.net/~a/i2m5k4Ge32vfG_rze4RolEpBLPE/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/YifanLu?a=f4OwTSwmGv4:60_J3FBCIRs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/YifanLu?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=f4OwTSwmGv4:60_J3FBCIRs:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=f4OwTSwmGv4:60_J3FBCIRs:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=f4OwTSwmGv4:60_J3FBCIRs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/YifanLu?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=f4OwTSwmGv4:60_J3FBCIRs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=f4OwTSwmGv4:60_J3FBCIRs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=f4OwTSwmGv4:60_J3FBCIRs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=f4OwTSwmGv4:60_J3FBCIRs:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=f4OwTSwmGv4:60_J3FBCIRs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=f4OwTSwmGv4:60_J3FBCIRs:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/YifanLu/~4/f4OwTSwmGv4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://yifan.lu/2012/01/12/welcome-to-the-new-yifan-lu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://yifan.lu/2012/01/12/welcome-to-the-new-yifan-lu/</feedburner:origLink></item>
		<item>
		<title>Kindle Touch (5.0) Jailbreak/Root and SSH</title>
		<link>http://feedproxy.google.com/~r/YifanLu/~3/Up6mdDrS9D0/</link>
		<comments>http://yifan.lu/2011/12/10/kindle-touch-5-0-jailbreakroot-and-ssh/#comments</comments>
		<pubDate>Sat, 10 Dec 2011 06:32:26 +0000</pubDate>
		<dc:creator>Yifan Lu</dc:creator>
				<category><![CDATA[Kindle]]></category>
		<category><![CDATA[Releases]]></category>
		<guid isPermaLink="false">http://yifan.lu/?p=332</guid>
		<description><![CDATA[Update Kindle 5.0.3 has fixed the hole to allow for jailbreak. Upgrading an already jailbroken Kindle Touch is fine as the update does not remove the custom key to allow custom packages. If you on 5.0.3 and have not already installed the key, there is a new jailbreak. So long story short, we can run custom [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update</strong> Kindle 5.0.3 has fixed the hole to allow for jailbreak. Upgrading an already jailbroken Kindle Touch is fine as the update does not remove the custom key to allow custom packages. If you on 5.0.3 and have not already installed the key, there is <a href="http://www.mobileread.com/forums/showpost.php?p=1927673&amp;postcount=84" target="_blank">a new jailbreak</a>.</p>
<p>So long story short, we can run custom code on the Kindle Touch now but because the operating system has changed so much from Kindle 3, most Kindle modifications will not run without changes. I hope developers will jump to this device now that it&#8217;s unlocked. See the bottom of the post for download links. The directions for using are in the readme. Keep reading for technical details on how this came about.</p>
<p><strong>Obtaining the root image</strong><br />
Before we can look for vulnerabilities in the system that would allow us to break in, we need to break into the system and obtain the files that might contain vulnerabilities. Yes, this is a chicken-and-egg problem, but fortunately Amazon is nice enough to help us with this. On every Kindle device is a TTL serial port. I <a href="http://yifan.lu/wp-content/uploads/2011/12/serial_port.jpg">found this port</a> on the bottom of the device when the <a href="http://www.mobileread.com/forums/showpost.php?p=1863158&amp;postcount=191">cover is opened</a>. Fortunately, I did not even have to mess with it, as <strong>hondamarlboro</strong> and <strong>ramirami </strong>both managed to get the dump before me. Once we have the root image, it was only a matter of painstakingly looking through all the files to see possible injection vectors.</p>
<p><strong>Looking for the needle</strong></p>
<p>At first, I was digging deep into the system, disassembling and maping out various native libraries, looking for stack overflows (I found a couple but none could be accessed efficiently). I found the <a href="http://www.mobileread.com/forums/showpost.php?p=1866389&amp;postcount=196">bootloader was unlocked</a> but it would be a pain and danger for users (and even developers) to flash custom kernels and such. I also found that the Java code (the Kindle&#8217;s entire GUI is written in Java) is NOT obfuscated (which means it would be easier to reverse and later modify) and Amazon has left in many places to place plugins. For example, once someone has the time to figure things out, it would be very possible to write a EPUB extension to read EPUBs from the native reader. There are some other hidden secrets in the device too. The Kindle Touch has an accelerometer and proximity sensor (and a mic, but we know that) but they aren&#8217;t used in the software (yet). The more I looked into the system, I was aware that because it was such a huge rewrite, I had misjudged when I assumed that it would be harder to break as Amazon had years to fix the holes now. In fact, I would say that the Kindle 4 is more secure until I found out that <a href="http://www.mobileread.com/forums/showpost.php?p=1868403&amp;postcount=202">Amazon left in SSH in diagnostics mode</a>. Anyways, as I searched up the complexity chain from the bootloader to the kernel to the libraries to the Java interface, I found something very curious. Much of the operating system is no longer written in Java, but are now in HTML5 and Javascript. In fact, many of the interfaces on the Touch are actually web pages in disguise. For example: the password entry screen, the search bar, the browser (is just an HTML page with a frame), the Wifi selection screen, and even the music player. Obviously, these can&#8217;t all run natively in HTML and JS, or the device will be even slower (and it is pretty damn slow). What Amazon did is write a couple of Javascript hooks that are implemented by native libraries and events are read by these libraries and they perform actions accordantly. In short, Javascript will run native code. This is a goldmine, there could be many possible ways of using this to our advantage. There could be buffer overflows, heap overflows, string formatting bugs, etc. However, I didn&#8217;t have to look though much before I found a curious function: nativeBridge.dbgCmd();. It seems too good to be true. This function takes any shell command, and runs it (as root). Yup. The web browser will run as root, any command given to it. Don&#8217;t go looking for remote code execution yet (although it is highly possible), as the native bridge seems to be disabled when in web browser mode (it may be able to be bypassed, but I haven&#8217;t looked into it).</p>
<p><strong>Calling the debug function</strong></p>
<p>So the normal browser (as the one you can enter URLs into) can&#8217;t make use of this native bridge. However, as I&#8217;ve mentioned, a large part of the GUI in the Kindle Touch is HTML and JavaScript. All we need to do is inject some HTML into one of these and we would be all set. We need something that takes input and displays it to the user. The first thing I thought of was the media player. The Kindle displays the song title, artist, and album name in the music player, so what if we put some HTML into the ID3 tag? Yup, it works. How about some javascript? Running. Let&#8217;s try to call the debug function. It works. Well, that was a freebie.<script type="text/javascript">// < ![CDATA[
// < ![CDATA[
// < ![CDATA[
// < ![CDATA[
// < ![CDATA[
// < ![CDATA[
// < ![CDATA[  tag? Still working. Ok, let's call nativeBridge.dbgCmd('reboot'). Yup, the Kindle is rebooting. An XSS code execution vulnerability? Well, that was a freebie.
// ]]&gt;</script></p>
<p><strong>Having some fun</strong></p>
<p>That was a bit too easy and I was disappointed that I didn&#8217;t get to talk about how I whipped out IDA Pro and did some master debugging. So, let&#8217;s make things harder. We can use a MP3 with custom ID3 tags to execute any command, but how can we make this into a cool one-click solution? First of all, we should limit ourselves to one file to copy. Why make the user keep track of MP3s and shell scripts and where to put them? I took the shell script payload (which installs a developer key into the device so custom packages can be installed) and placed it into the comments section of the ID3 tag in the MP3. Then I used &#8220;dd&#8221; to extract the script, chmod it, and execute it. Now, another problem in terms of user friendliness is how to let the user know that the process was successful? I quickly whipped up an awesome looking &#8220;splash screen&#8221; and planned on displaying it while the magic is taking place. At first I tried to encode it into a variable in the shell script payload and extract it, but it was too slow and memory intensive. Instead, I took the image, raw, and appended it into the end of the MP3 (after all, the file was a bit too small). You can see the result in the video attached.</p>
<p><strong>What&#8217;s next?</strong></p>
<p>Just because the device is jailbroken does not mean it can now magically do anything you want. What needs to happen first is that developers need to take the device and write some code for it. This first jailbreak is really for these developers. For regular users, the only use is to preemptively unlock your device now in case the method is patched in an update or something. <strong>No mods for older Kindles will work as-is on the Touch.</strong> I&#8217;ve included a VERY basic usbnetwork package that will allow you to have SSH access to the device. I think that&#8217;s as good of a starting point as anything. From there, developers should be able to rip the root filesystem, test modifications, and write useful tweaks. (And in case of a brick, read my <a href="http://www.mobileread.com/forums/showpost.php?p=1866389&amp;postcount=196">previous post</a> on the bootloader access). Some things I would have to see or do is GUI plugins in the device&#8217;s operating system. The Java code is easy to decompile and read as the variable names have not been stripped out (like previous models). Hopefully people can write some reader plugins (like X-Ray) or even format plugins for other ebook formats. Being a touch screen device, one could also write games or useful apps (although the speed and eink are limiting). I need to finish writing the update creation tool so developers can package their modifications.</p>
<p><strong>Download</strong></p>
<p><a href="http://yifan.lu/p/kindle-touch-jailbreak">Download the jailbreak here</a></p>
<p><a href="https://github.com/downloads/yifanlu/KindleTool/simple_screensaver_1.0.zip">Simple custom screensaver mod</a></p>
<p><a href="https://github.com/downloads/yifanlu/KindleTool/simple_usbnet_1.1.zip">Simple usbnet update (supports wifi ssh and resetting root password)</a></p>
<p><a href="https://github.com/yifanlu/KindleLauncher/downloads">GUI menu launcher and screen rotation hack</a></p>
<p><strong>Demonstration </strong><br />
<iframe src="http://www.youtube.com/embed/HMyv6nSAOU0" frameborder="0" width="420" height="315"></iframe></p>

<p><a href="http://feedads.g.doubleclick.net/~a/weniM5j3oLjWfhA7Sz_wSqWozU4/0/da"><img src="http://feedads.g.doubleclick.net/~a/weniM5j3oLjWfhA7Sz_wSqWozU4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/weniM5j3oLjWfhA7Sz_wSqWozU4/1/da"><img src="http://feedads.g.doubleclick.net/~a/weniM5j3oLjWfhA7Sz_wSqWozU4/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/YifanLu?a=Up6mdDrS9D0:DDpylt9e9q4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/YifanLu?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=Up6mdDrS9D0:DDpylt9e9q4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=Up6mdDrS9D0:DDpylt9e9q4:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=Up6mdDrS9D0:DDpylt9e9q4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/YifanLu?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=Up6mdDrS9D0:DDpylt9e9q4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=Up6mdDrS9D0:DDpylt9e9q4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=Up6mdDrS9D0:DDpylt9e9q4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=Up6mdDrS9D0:DDpylt9e9q4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=Up6mdDrS9D0:DDpylt9e9q4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=Up6mdDrS9D0:DDpylt9e9q4:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/YifanLu/~4/Up6mdDrS9D0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://yifan.lu/2011/12/10/kindle-touch-5-0-jailbreakroot-and-ssh/feed/</wfw:commentRss>
		<slash:comments>128</slash:comments>
		<feedburner:origLink>http://yifan.lu/2011/12/10/kindle-touch-5-0-jailbreakroot-and-ssh/</feedburner:origLink></item>
		<item>
		<title>Reversing the Xperia Play emulator (part deux)</title>
		<link>http://feedproxy.google.com/~r/YifanLu/~3/eVIm-_FdIzI/</link>
		<comments>http://yifan.lu/2011/11/27/reversing-the-xperia-play-emulator-part-deux/#comments</comments>
		<pubDate>Sun, 27 Nov 2011 23:45:01 +0000</pubDate>
		<dc:creator>Yifan Lu</dc:creator>
				<category><![CDATA[Assembly]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Xperia Play]]></category>
		<guid isPermaLink="false">http://yifan.lu/?p=329</guid>
		<description><![CDATA[The last time we spoke, I managed to run any PSX game on the Xperia Play by redirecting some function calls. Well, since then Sony (you could say) fixed it (still don&#8217;t know how, I should look into it one day, I&#8217;m guessing they revoked the certificates for Crash Bandicoot) and people running Android 2.3.4 [...]]]></description>
			<content:encoded><![CDATA[<p>The <a title="Reverse engineering a dynamic library on the Xperia Play" href="http://yifan.lu/2011/08/07/reverse-engineering-a-dynamic-library-on-the-xperia-play/">last time we spoke</a>, I managed to run any PSX game on the Xperia Play by redirecting some function calls. Well, since then Sony (you could say) fixed it (still don&#8217;t know how, I should look into it one day, I&#8217;m guessing they revoked the certificates for Crash Bandicoot) and people running Android 2.3.4 on the Xperia Play can&#8217;t use PSXPeria anymore. I&#8217;ve re-patched it a while ago, but never got the chance to modify the patching tool to use the new method (I really hate Java and don&#8217;t want to use it, so I held back.) until today. As&nbsp;customary&nbsp;to my releases, I will begin by telling more than what you want to know about how it works.</p>
<p><strong>Previously on &#8220;cracking the emulator&#8221;&#8230;</strong></p>
<p>If you haven&#8217;t read the <a title="Analyzing the PSX emulator on the Xperia Play" href="http://yifan.lu/2011/08/01/analyzing-the-psx-emulator-on-the-xperia-play/">last&nbsp;posts</a> I&#8217;ve made about how I reverse engineered the emulator data format and binary, you may want to, but I&#8217;ll&nbsp;summarize&nbsp;it in a few words. Basically, the emulator was&nbsp;separated&nbsp;into two binaries bin-one decrypts bin-two and bin-two asks bin-one to decrypt and load the game&#8217;s table-of-contents which is used to load the game. The TOC is important because anyone can replace the game data files, but it won&#8217;t load because the TOC contains addresses of the places to decompress in the game data. Well, after the hard part of&nbsp;reversing&nbsp;the formats and finding all this out, the actual patch was fairly easy. All we did was make a new library with the same function name as the one that is used by bin-two to query bin-one for the TOC, and use it to load the TOC for our custom game and make sure that library loads before Sony&#8217;s and the rest is almost magic. We don&#8217;t need to overwrite any function pointers or even touch the emulator because the linker looks for the first&nbsp;definition&nbsp;of a function and calls it.</p>
<p><strong>How Sony made our lives harder</strong></p>
<p>So version 1 is always easiest to break. This applies for almost everything. The PSP, the iPhone, the DS, etc. Version 2 is where it gets real. So what are the changes? First of all, no more bi-binary system. There is a single binary that does both the decrypting and emulating. Oh, and they removed the symbols so we can no longer search for &#8220;GetImageToc&#8221; and find where the function is. Also, they&#8217;ve started verifying that ISOs.</p>
<p><strong>Finding the needle</strong></p>
<p>Before we can begin to think about patching, we first need to find what to patch. As I&#8217;ve mentioned, Sony removed the symbols, so we no longer know what the function names are. We CAN try to map out the entire binary (10MB) and look for something that does what appears to be decrypting a TOC, but we don&#8217;t have months or a team of assembly experts. What we DO have is the older version of the binary that has the symbols. Assuming that they didn&#8217;t rewrite the emulator from scratch, the structure should be similar. We open up the old binary, find the function that calls the ones we want to patch, and look for identifying&nbsp;characteristics. What are they? Well, we look for mentions of unique strings and unique calls to standard functions (unique as in&nbsp;something&nbsp;like atoi, not malloc, which is called every other line). Luckily we have both. It seems like a few lines before the function we are interested in, the program does something with the string&nbsp;&#8221;/data/image.ps&#8221; and&nbsp;sometimes&nbsp;afterwards, uncompress is called. Now we have the address of the functions we want to patch.</p>
<p><strong>Patching the function</strong></p>
<p>Well, here&#8217;s our second problem. What do we patch the function with? We are only limited to the length of what the function originally is, but I&#8217;m sure that&#8217;s not a problem for experts. I&#8217;m not an expert though, so how about we steal what Sony did in version 1? We use dlsym to call the function from a loaded binary in memory. After a quick trip to an assembly reference, I wrote the following code:&nbsp;https://github.com/yifanlu/PSXPeria-Wrapper/blob/master/jni/java-activity-patch.S, I would go into more details, but I believe my comments on the code explains it better than I could. The only other thing we need is to manually define the address for &#8220;dlsym&#8221; and the offset for the name of the function. ARM assembly uses relative address, so I haven&#8217;t come up with a quick way to do this yet. For now, I&#8217;m using a calculator and a piece of paper to find the address of dlsym relative to the patch in the program. Comment if you have a better way.</p>
<p><strong>Phase 2</strong></p>
<p>When the game didn&#8217;t boot and was frozen on screen, I knew it had to be another&nbsp;obstacle. Our code had to have worked because otherwise, it would have crashed. Debugging with GDB, it seems like the program is blocking forever, seemingly on purpose. To double check, I loaded Crash Bandicoot again, but with my patched emulator and it worked. So, I guess there was a check somewhere that only loads Crash Bandicoot. Yes, I could go back into IDA and look for where the check is and NOP it out, but I was tired by then and my short attention span wants me to work on something else, so I took the easy way out and patched the PSX image with the titleid for Crash Bandicoot. As far as I know, this shouldn&#8217;t affect anything in terms of&nbsp;compatibility, but farther tests are needed.</p>
<p><strong>Next week on &#8220;cracking the emulator&#8221;&#8230;</strong></p>
<p>Version 3 of the emulator is already out and is distributed in the PS-Suite games in the Japanese PSN store (on the Play). I already took a look at it, and the emulator did not seem to be updated, so I didn&#8217;t try hard to patch it. However, it seems that they implemented many new security&nbsp;mechanisms&nbsp;in the PS-Suite PSX games. For starters, there is a public-private key exchange to make sure all the files in the APK are untouched, and I&#8217;m pretty sure the PS-Image is now encrypted or the format has changed. Now, Sony did not do all this to prevent us from loading our own games (or maybe they did). I suspect it&#8217;s to prevent pirates from stealing the PSN games. Which means that if I crack the version 3 emulator, I may be helping piracy. This means, I will most likely not touch the PS-Suite emulators, and if I do, two things have to happen. 1) I need to be sure that the emulator has much better&nbsp;compatibility, and 2) I need a way to make sure that my tool isn&#8217;t going to be used for piracy. So I guess this may be the last release for a while.</p>
<p><strong>Links</strong></p>
<p><a href="http://yifan.lu/p/psxperia">Project Page</a><br />
<a href="https://github.com/yifanlu/PSXperia">Source</a><br />
<a href="https://github.com/yifanlu/PSXperia/downloads">Downloads</a></p>

<p><a href="http://feedads.g.doubleclick.net/~a/pQ_RKnt46ZFhDl_LBEc28lUrC-Y/0/da"><img src="http://feedads.g.doubleclick.net/~a/pQ_RKnt46ZFhDl_LBEc28lUrC-Y/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/pQ_RKnt46ZFhDl_LBEc28lUrC-Y/1/da"><img src="http://feedads.g.doubleclick.net/~a/pQ_RKnt46ZFhDl_LBEc28lUrC-Y/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/YifanLu?a=eVIm-_FdIzI:hrYkUF5nKFU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/YifanLu?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=eVIm-_FdIzI:hrYkUF5nKFU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=eVIm-_FdIzI:hrYkUF5nKFU:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=eVIm-_FdIzI:hrYkUF5nKFU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/YifanLu?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=eVIm-_FdIzI:hrYkUF5nKFU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=eVIm-_FdIzI:hrYkUF5nKFU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=eVIm-_FdIzI:hrYkUF5nKFU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=eVIm-_FdIzI:hrYkUF5nKFU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=eVIm-_FdIzI:hrYkUF5nKFU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=eVIm-_FdIzI:hrYkUF5nKFU:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/YifanLu/~4/eVIm-_FdIzI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://yifan.lu/2011/11/27/reversing-the-xperia-play-emulator-part-deux/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://yifan.lu/2011/11/27/reversing-the-xperia-play-emulator-part-deux/</feedburner:origLink></item>
		<item>
		<title>Analyzing Kindle 4.0</title>
		<link>http://feedproxy.google.com/~r/YifanLu/~3/_jNSNFxOcpc/</link>
		<comments>http://yifan.lu/2011/09/28/analyzing-kindle-4-0/#comments</comments>
		<pubDate>Thu, 29 Sep 2011 01:21:55 +0000</pubDate>
		<dc:creator>Yifan Lu</dc:creator>
				<category><![CDATA[Kindle]]></category>
		<category><![CDATA[Technical]]></category>
		<guid isPermaLink="false">http://yifan.lu/?p=320</guid>
		<description><![CDATA[Well, Amazon might as well have stolen my wallet, because I am going to lose a couple hundreds of dollars. However, what fun is a Kindle if we can&#8217;t run our own code? (Answer: still pretty fun, but that&#8217;s besides the point.) Anyways, I haven&#8217;t gotten my hands on the new Kindles yet, but I [...]]]></description>
			<content:encoded><![CDATA[<p>Well, Amazon might as well have stolen my wallet, because I am going to lose a couple hundreds of dollars. However, what fun is a Kindle if we can&#8217;t run our own code? (Answer: still pretty fun, but that&#8217;s besides the point.) Anyways, I haven&#8217;t gotten my hands on the new Kindles yet, but I got the next best thing: a software update from Amazon (http://www.amazon.com/gp/help/customer/display.html/?nodeId=200774090)</p>
<p>If you want to follow me and others try to crack this thing, visit this thread on <a href="http://www.mobileread.com/forums/showthread.php?p=1762199">MobileRead</a>.</p>
<p>I&#8217;ll post some of the more important stuff we find on this post, so check back regularly.</p>
<ul>
<li>The update format has changed! No more signatures for each file in the update, the update itself is signed and will refuse to extract unless the signature check passes. That means no more easy way out. To get &#8220;kindle_update_tool.py&#8221; to recognize and extract the new update, remove the signature (first 0&#215;140 bytes) and change &#8220;FC04&#8243; to &#8220;FC02&#8243; (Bytes 0&#215;0 to 0&#215;4 after trimming the signature header). Now delete 4 bytes starting from 0&#215;8 and 6 bytes starting from 0&#215;10. (Offsets depend on the SP01 part removed). Now &#8220;kindle_update_tool.py&#8221; will recognize it.</li>
<li>Kindle 4.0 is codenamed &#8220;Yoshi&#8221; following &#8220;Luigi&#8221; (3.0) and &#8220;Mario&#8221; (2.0) (I can&#8217;t remember 1.0). It is built for the <strong><a href="http://www.freescale.com/webapp/sps/site/taxonomy.jsp?code=IMX50_FAMILY">iMX50</a></strong> (800MHz ARM Cortex A8) platform. The Kindle 3 is iMX35 (532MHz ARM) and the Kindle 2/DX is iMX3 (400MHz ARM).</li>
</ul>

<p><a href="http://feedads.g.doubleclick.net/~a/MH049qYLI8ekJ-61trgtAtVHs6I/0/da"><img src="http://feedads.g.doubleclick.net/~a/MH049qYLI8ekJ-61trgtAtVHs6I/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/MH049qYLI8ekJ-61trgtAtVHs6I/1/da"><img src="http://feedads.g.doubleclick.net/~a/MH049qYLI8ekJ-61trgtAtVHs6I/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/YifanLu?a=_jNSNFxOcpc:aHN7P1pF5ks:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/YifanLu?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=_jNSNFxOcpc:aHN7P1pF5ks:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=_jNSNFxOcpc:aHN7P1pF5ks:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=_jNSNFxOcpc:aHN7P1pF5ks:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/YifanLu?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=_jNSNFxOcpc:aHN7P1pF5ks:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=_jNSNFxOcpc:aHN7P1pF5ks:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=_jNSNFxOcpc:aHN7P1pF5ks:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=_jNSNFxOcpc:aHN7P1pF5ks:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=_jNSNFxOcpc:aHN7P1pF5ks:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=_jNSNFxOcpc:aHN7P1pF5ks:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/YifanLu/~4/_jNSNFxOcpc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://yifan.lu/2011/09/28/analyzing-kindle-4-0/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://yifan.lu/2011/09/28/analyzing-kindle-4-0/</feedburner:origLink></item>
		<item>
		<title>Installing Windows 8 Developer Preview (8102) on a USB Drive (Windows To Go/Portable Workspace)</title>
		<link>http://feedproxy.google.com/~r/YifanLu/~3/QQ_sJz2GyQI/</link>
		<comments>http://yifan.lu/2011/09/17/installing-windows-8-developer-preview-8102-on-a-usb-drive-windows-to-goportable-workspace/#comments</comments>
		<pubDate>Sat, 17 Sep 2011 21:20:57 +0000</pubDate>
		<dc:creator>Yifan Lu</dc:creator>
				<category><![CDATA[Guides]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[build 2011]]></category>
		<category><![CDATA[dvd]]></category>
		<category><![CDATA[hard drive]]></category>
		<category><![CDATA[portable workspace]]></category>
		<category><![CDATA[pwcreator]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[usb]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[windows 8]]></category>
		<category><![CDATA[windows to go]]></category>
		<guid isPermaLink="false">http://yifan.lu/?p=312</guid>
		<description><![CDATA[This really isn&#8217;t some technical or hard to do thing, but it&#8217;s a cool little trick I found that I haven&#8217;t seen mentioned before. If you don&#8217;t know what &#8220;Windows To Go&#8221; (previously &#8220;Portable Workspace&#8221;), watch this video from the Build 2011 conference. Basically, it allows you to install a full copy of Windows 8 [...]]]></description>
			<content:encoded><![CDATA[<p>This really isn&#8217;t some technical or hard to do thing, but it&#8217;s a cool little trick I found that I haven&#8217;t seen mentioned before. If you don&#8217;t know what &#8220;Windows To Go&#8221; (previously &#8220;Portable Workspace&#8221;), watch <a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/HW-245T">this video from the Build 2011 conference</a>. Basically, it allows you to install a full copy of Windows 8 onto a USB drive/external hard drive and use it on any computer that supports USB booting. Your settings, files, programs, etc go where-ever you go. The feature is in Windows 8 (and the developer preview), but the program to make the drive is not. Luckily, an old leaked build has the program, but you can&#8217;t just copy and paste it, it won&#8217;t run. Instead, follow the directions below to get Windows 8 installed to a USB drive. (I used a virtual machine to do the following, therefore I did not need to burn any DVDs. I will give the directions assuming you&#8217;re using a real computer though).</p>
<p><strong>Requirements:</strong></p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/windows/apps/br229516">Windows 8 Developer Preview</a> burned to a DVD (unless you&#8217;re using virtual machine)</li>
<li>Windows 8 M1 build 7850 burned to a DVD (unless you&#8217;re using virtual machine)</li>
<li>16GB flash drive or external hard drive (or larger)</li>
</ul>
<div><strong>Directions:</strong></div>
<div>
<ol>
<li>Install Windows 8 M1 build 7850. (I tried just copying pwcreator.exe and running it on a later build, but it didn&#8217;t work.)</li>
<li>Open the start menu and type in &#8220;pwcreator.exe&#8221; and press enter. Alternatively, find and open C:\Windows\System32\pwcreator.exe</li>
<li>Choose your USB drive and continue.</li>
<li>Insert the Windows 8 M1 build 7850 DVD again and continue.</li>
<li>Before starting the build process, take out the Windows 8 M1 build 7850 DVD and insert your Windows 8 Developer Preview build 8102 DVD.</li>
<li>Continue and allow the process to finish.</li>
</ol>
<div>I tested it with the x86 version of the Developer Preview, so I don&#8217;t know how well or if it will work with the x64 build. When you are asked to activate Windows, you can skip it or enter one of the keys found in the Developer Preview DVD under D:\Sources\product.ini (assuming D: is your DVD). I haven&#8217;t figured out which key to use yet.</div>
</div>
<div>Also, the requirements in pwcreator.exe states that you need a 16GB USB drive. However Windows only really need 12GB to install. I have a 16GB flash drive that shows up as 15GB and it wouldn&#8217;t work. I used GParted in Ubuntu to copy the partitions from a larger USB drive over after creating the image and it works fine. Just a tip.</div>

<p><a href="http://feedads.g.doubleclick.net/~a/8Kx7D-p_43PkWUw4rqRb_WPrsEI/0/da"><img src="http://feedads.g.doubleclick.net/~a/8Kx7D-p_43PkWUw4rqRb_WPrsEI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/8Kx7D-p_43PkWUw4rqRb_WPrsEI/1/da"><img src="http://feedads.g.doubleclick.net/~a/8Kx7D-p_43PkWUw4rqRb_WPrsEI/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/YifanLu?a=QQ_sJz2GyQI:Blmuv3uPqYQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/YifanLu?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=QQ_sJz2GyQI:Blmuv3uPqYQ:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=QQ_sJz2GyQI:Blmuv3uPqYQ:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=QQ_sJz2GyQI:Blmuv3uPqYQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/YifanLu?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=QQ_sJz2GyQI:Blmuv3uPqYQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=QQ_sJz2GyQI:Blmuv3uPqYQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=QQ_sJz2GyQI:Blmuv3uPqYQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=QQ_sJz2GyQI:Blmuv3uPqYQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=QQ_sJz2GyQI:Blmuv3uPqYQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=QQ_sJz2GyQI:Blmuv3uPqYQ:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/YifanLu/~4/QQ_sJz2GyQI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://yifan.lu/2011/09/17/installing-windows-8-developer-preview-8102-on-a-usb-drive-windows-to-goportable-workspace/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://yifan.lu/2011/09/17/installing-windows-8-developer-preview-8102-on-a-usb-drive-windows-to-goportable-workspace/</feedburner:origLink></item>
		<item>
		<title>Kindle 3.2.1 Jailbreak (Update)</title>
		<link>http://feedproxy.google.com/~r/YifanLu/~3/omkhJTy86DQ/</link>
		<comments>http://yifan.lu/2011/09/01/kindle-3-2-1-jailbreak-update/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 20:23:36 +0000</pubDate>
		<dc:creator>Yifan Lu</dc:creator>
				<category><![CDATA[Kindle]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[3.2.1]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[jailbreak]]></category>
		<category><![CDATA[kindle]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[update]]></category>
		<guid isPermaLink="false">http://yifan.lu/?p=303</guid>
		<description><![CDATA[When I first released the Kindle 3.2.1 jailbreak, I called it &#8220;temporary.&#8221; Although confusing to use and set up, it has gotten thousands of hits and reports of success. However, it was &#8220;temporary&#8221; because the method used depended on some precise timing and I had a better method that I was saving for Kindle 3.3. [...]]]></description>
			<content:encoded><![CDATA[<p>When I first released the Kindle 3.2.1 jailbreak, I called it &#8220;temporary.&#8221; Although confusing to use and set up, it has gotten thousands of hits and reports of success. However, it was &#8220;temporary&#8221; because the method used depended on some precise timing and I had a better method that I was saving for Kindle 3.3. Now, I realize that 3.3 will never come, but will instead be 4.0 that will come with Kindle 4, and with a new hardware, everything doesn&#8217;t matter. <a href="http://www.mobileread.com/forums/showpost.php?p=1725629&#038;postcount=151">Serge A. Levin</a> has independently discovered a similar bug for what I was going to use on the 3.3 jailbreak, and I&#8217;ve asked him to release it because he deserves the credit for the work. If we&#8217;re lucky, Amazon will fix the bug in a way that my similar plan for 3.3/4.0 will still work.</p>
<p>(If you are already jailbroken, regardless of what version you&#8217;re running, you don&#8217;t need to download this. The actual jailbreak hasn&#8217;t been updated, just the injection method.)</p>
<p>Also, if you think that the jailbreak didn&#8217;t work, try installing a custom package anyways. I have fixed many people&#8217;s &#8220;I can&#8217;t get it working&#8221; by telling them that it&#8217;s already jailbroken.</p>
<p><a href="http://yifan.lu/p/kindle-jailbreak">Link to jailbreak for all devices on all versions</a>.</p>
<p>EDIT: It seems like there is some confusion so I&#8217;ll clear this up. <strong>Jailbreaking does NOT remove ads.</strong></p>

<p><a href="http://feedads.g.doubleclick.net/~a/Sm5VmW-Pw6SzyVln03M6Z6_EiJg/0/da"><img src="http://feedads.g.doubleclick.net/~a/Sm5VmW-Pw6SzyVln03M6Z6_EiJg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Sm5VmW-Pw6SzyVln03M6Z6_EiJg/1/da"><img src="http://feedads.g.doubleclick.net/~a/Sm5VmW-Pw6SzyVln03M6Z6_EiJg/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/YifanLu?a=omkhJTy86DQ:wHmZoX-aRzw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/YifanLu?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=omkhJTy86DQ:wHmZoX-aRzw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=omkhJTy86DQ:wHmZoX-aRzw:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=omkhJTy86DQ:wHmZoX-aRzw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/YifanLu?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=omkhJTy86DQ:wHmZoX-aRzw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=omkhJTy86DQ:wHmZoX-aRzw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=omkhJTy86DQ:wHmZoX-aRzw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=omkhJTy86DQ:wHmZoX-aRzw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=omkhJTy86DQ:wHmZoX-aRzw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=omkhJTy86DQ:wHmZoX-aRzw:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/YifanLu/~4/omkhJTy86DQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://yifan.lu/2011/09/01/kindle-3-2-1-jailbreak-update/feed/</wfw:commentRss>
		<slash:comments>54</slash:comments>
		<feedburner:origLink>http://yifan.lu/2011/09/01/kindle-3-2-1-jailbreak-update/</feedburner:origLink></item>
		<item>
		<title>PSXperia: Converts any PSX game to work on Xperia Play</title>
		<link>http://feedproxy.google.com/~r/YifanLu/~3/JXSNCYjqLss/</link>
		<comments>http://yifan.lu/2011/08/11/psxperia-converts-any-psx-game-to-work-on-xperia-play/#comments</comments>
		<pubDate>Thu, 11 Aug 2011 22:28:13 +0000</pubDate>
		<dc:creator>Yifan Lu</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[Xperia Play]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[convert]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[psx]]></category>
		<category><![CDATA[psxperia]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[utility]]></category>
		<category><![CDATA[xperia play]]></category>
		<guid isPermaLink="false">http://yifan.lu/?p=295</guid>
		<description><![CDATA[After two hard weeks of decompiling, reverse engineering, graphing, and coding, I&#8217;m proud to announce PSXperia, a set of tools to extract, patch, and repack the Crash Bandicoot game that comes with all Xperia Play phones to use any PSX game (that you legally own). In addition to allowing you to play any property ripped PSX game, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://yifan.lu/p/kindle-touch-jailbreak/psxperia_screen/" rel="attachment wp-att-391"><img class="alignleft size-medium wp-image-391" title="psxperia_screen" src="http://yifan.lu/images/2012/01/psxperia_screen-300x202.png" alt="" width="300" height="202" /></a></p>
<p>After two hard weeks of <a title="Analyzing the PSX emulator on the Xperia Play" href="http://yifan.lu/2011/08/01/analyzing-the-psx-emulator-on-the-xperia-play/">decompiling</a>, <a title="Reverse engineering a dynamic library on the Xperia Play" href="http://yifan.lu/2011/08/07/reverse-engineering-a-dynamic-library-on-the-xperia-play/">reverse engineering</a>, graphing, and coding, I&#8217;m proud to announce PSXperia, a set of tools to extract, patch, and repack the Crash Bandicoot game that comes with all Xperia Play phones to use any PSX game (that you legally own). In addition to allowing you to play any property ripped PSX game, you can also set a custom icon and the game will show up in the phone&#8217;s Playstation Pocket app, so you can quickly access it when you flip the gamepad out. I&#8217;ve converted and tested 8 games with this tool and they all run flawlessly, but if things don&#8217;t work out so smoothly for you, submit your issues to <a href="https://github.com/yifanlu/PSXperia/issues">GitHub</a>.</p>
<p><a href="https://github.com/yifanlu/PSXperia/archives/master">Download the program here</a> and the <a href="https://github.com/yifanlu/PSXperia">source here</a><br />
<a href="https://github.com/yifanlu/PSXperia/wiki">Setup and usage guide here</a><br />
<a href="forum.xda-developers.com/showthread.php?t=1201532">Support here</a><br />
<a href="https://github.com/yifanlu/PSXperia/issues?sort=created&amp;direction=desc&amp;state=open">Bug reports here</a></p>

<p><a href="http://feedads.g.doubleclick.net/~a/kWB-PZQNS5EJ5S3As7v6kaiHnXQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/kWB-PZQNS5EJ5S3As7v6kaiHnXQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/kWB-PZQNS5EJ5S3As7v6kaiHnXQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/kWB-PZQNS5EJ5S3As7v6kaiHnXQ/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/YifanLu?a=JXSNCYjqLss:cstkuArHqAY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/YifanLu?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=JXSNCYjqLss:cstkuArHqAY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=JXSNCYjqLss:cstkuArHqAY:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=JXSNCYjqLss:cstkuArHqAY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/YifanLu?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=JXSNCYjqLss:cstkuArHqAY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=JXSNCYjqLss:cstkuArHqAY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=JXSNCYjqLss:cstkuArHqAY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=JXSNCYjqLss:cstkuArHqAY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=JXSNCYjqLss:cstkuArHqAY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=JXSNCYjqLss:cstkuArHqAY:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/YifanLu/~4/JXSNCYjqLss" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://yifan.lu/2011/08/11/psxperia-converts-any-psx-game-to-work-on-xperia-play/feed/</wfw:commentRss>
		<slash:comments>108</slash:comments>
		<feedburner:origLink>http://yifan.lu/2011/08/11/psxperia-converts-any-psx-game-to-work-on-xperia-play/</feedburner:origLink></item>
		<item>
		<title>Reverse engineering a dynamic library on the Xperia Play</title>
		<link>http://feedproxy.google.com/~r/YifanLu/~3/zbPSQUxUNf4/</link>
		<comments>http://yifan.lu/2011/08/07/reverse-engineering-a-dynamic-library-on-the-xperia-play/#comments</comments>
		<pubDate>Sun, 07 Aug 2011 23:33:08 +0000</pubDate>
		<dc:creator>Yifan Lu</dc:creator>
				<category><![CDATA[Assembly]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Xperia Play]]></category>
		<category><![CDATA[arm]]></category>
		<category><![CDATA[assembly]]></category>
		<category><![CDATA[bios]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[deflate]]></category>
		<category><![CDATA[gdb]]></category>
		<category><![CDATA[hex]]></category>
		<category><![CDATA[iso]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jni]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[playstation]]></category>
		<category><![CDATA[psx]]></category>
		<category><![CDATA[reverse engineering]]></category>
		<category><![CDATA[sony]]></category>
		<category><![CDATA[xperia]]></category>
		<category><![CDATA[xperia play]]></category>
		<category><![CDATA[zlib]]></category>
		<guid isPermaLink="false">http://yifan.lu/?p=292</guid>
		<description><![CDATA[Welcome to part two of my journey to completely reverse the PSX emulator on the Xperia Play. When we last left off, I managed to figure out the image.ps format and the basic order of execution of the emulator. It&#8217;s been a week now, and I have more stuff to reveal. Decrypting the data One of the [...]]]></description>
			<content:encoded><![CDATA[<p>Welcome to part two of my journey to completely reverse the PSX emulator on the Xperia Play. When we <a title="Analyzing the PSX emulator on the Xperia Play" href="http://yifan.lu/2011/08/01/analyzing-the-psx-emulator-on-the-xperia-play/">last</a> left off, I managed to figure out the image.ps format and the basic order of execution of the emulator. It&#8217;s been a week now, and I have more stuff to reveal.</p>
<p><strong>Decrypting the data</strong></p>
<p>One of the main problems was that most of the important files are encrypted. More specifically, these three files: ps1_rom.bin (BIOS), libdefault.so (the emulator), and image_ps_toc (then unknown data). As I mentioned before, Sony used what&#8217;s called white box cryptography, which means obfuscating the code to hide the decryption keys. But, we don&#8217;t need the keys, we just need the decrypted data. The obvious way of extracting the decrypted data is dumping it from the RAM. However, the Android kernel I&#8217;m using doesn&#8217;t support reading /dev/kmem and I don&#8217;t want to mess with recompiling the kernel. I&#8217;ve also tried dumping with GDB, and it did work, but the data isn&#8217;t complete and is messy. I used a more unorthodox method of obtaining the decrypted data. After hours of reading and mapping in IDA Pro, I figured out that everything that is decrypted goes through one public function, uncompress(), a part of zlib. This is important, because this means everything that is decrypted is sent to zlib and zlib is open source. That means, I just need to recompile zlib with some extra code in uncompress() that will dump the input and output data. A simple fwrite() will do, as the data is already in a clean, memcpy-able form. (I forgot about LD_PRELOAD at the time, but that might have worked easier). After some trouble getting NDK to compile zlib, I have dumps of both the compressed/decrypted and uncompressed forms of all encrypted content.</p>
<p><strong>Analyzing the dumps</strong></p>
<p>The next thing is to find out the meaning of the data that we worked so hard to get. ps1_rom.bin is easy. Surprisingly, it is NOT a PS1 BIOS file, but actually part of a PS2 BIOS dump (part, being only the PS1 part of the PS2 BIOS). Does this mean a PS2 emulator is coming for the Play? I don&#8217;t know. Next, we have libdefault.so. Plugging it into IDA Pro reveals the juicy details of the PS1 emulator. It&#8217;s really nothing interesting, but if we ever want multi-disk support or decrypting the manuals, this would be the place to look. Finally, we have image_ps_toc (as it is called in the symbols file). I am actually embarrassed to say it took almost a day for me to figure out that it&#8217;s a table of contents file. I did guess so at first, but I couldn&#8217;t see a pattern, but after a night&#8217;s sleep, I figured out the format of the uncompressed image_ps_toc file. (Offsets are in hex, data are little-endian)</p>
<blockquote><p>0&#215;4 byte header</p>
<p>0&#215;4 byte uncompressed image size</p>
<p>0&#215;12 byte constant (I&#8217;m guessing it may have something to do with number of disks and where to cut off)</p>
<p>0&#215;4 byte number of entries</p>
<p>Each entry:</p>
<p>0&#215;4 byte offset in image.ps, where the compressed image is split</p></blockquote>
<p><strong>Image.ps format</strong></p>
<p>I actually forgot to mention this in my last post. The &#8220;rom&#8221; that is loaded by the emulator is a file named image.ps. It is found on the SD card inside the ZPAK. It is unencrypted, and if you delete it, it will be downloaded again from Sony&#8217;s servers unencrypted. How it works is that an PSX ISO is taken and split into 0&#215;9300 (about 38kb) sections, and each section is compressed using deflate (zlib again) and placed inside image.ps (with a 0&#215;14 byte header). The offsets of each section is stored in the toc file (and encrypted) because although uncompressed, they&#8217;re perfect 38kb sections, compressed, they&#8217;re variable sized. I already wrote a tool to convert image.ps to an ISO and back again/</p>
<p><strong>Putting it all back together</strong></p>
<p>Now that we&#8217;ve tore apart, analyzed, and understood every element of the PSX emulator on the Xperia Play, what do we do? The ultimate goal is to convert any PSX game to run on the Xperia Play, but how do we do that. There are two main challenges. First of all, libjava-activity.so, which loads everything, expects data to be encrypted. Once again, we need keys. Also, I&#8217;m pretty sure it uses a custom encryption technique called &#8220;TFIT AES Cipher&#8221;, because I was not able to find information on it anywhere else. However, since we have the decrypted files, we can patch the library to load the decrypted files directly from memory, and I was halfway into doing that when I realized two more problems. Secondly, if I were to patch the library to load decrypted data, that means every user needs to decrypt the files themselves (because I won&#8217;t distribute copyrighted code). Third, image_ps_toc is variable sized, which means if the image is too big, it&#8217;ll break the offsets and refuse to load.</p>
<p>Currently, I&#8217;m trying to find the easiest and most legal way of allowing custom image_ps_toc files to work. (Bonus points if I can also load custom BIOS files). What I hope for is to write a wrapper library, libjava-activity-wrapper.so, which loads libjava-activity.so and patches GetImageTOC and GetImageTOCLength to load from a file instead of memory. This means I have to deal with Java and JNI again (ugh), and also do some weird stuff with pointers and memcpy (double ugh). The JNI methods in the library do not have their symbols exported, so I have to find a way of manually load them.</p>
<p><strong>Bonus: blind patching a binary</strong></p>
<p>When trying to patch a method for an ARM processor, it&#8217;s a bit of a pain and I&#8217;m too lazy to read about proper GDB debugging techniques. In additions, Sony wasn&#8217;t kind enough to compile everything with debugging symbols. However, I came up with a hacky-slashy way of changing instructions and seeing what happens. First, open up IDA Pro and find the function you want to modify. For example, I want decrypt_executable() to bypass decryption and just copy data plain. Find the instruction to change, and the opcode to change it to. For example, I want to change a BL instruction to NOP and CMP to CMN (don&#8217;t jump to decryption process and negate the &#8220;return == 0&#8243;). I have ARM&#8217;s NOP memorized by now 00 00 A0 E1. I don&#8217;t know what CMN&#8217;s opcode is, but if I look around I can find CMN somewhere and I see it&#8217;s just a change from a 7 to a 5. After everything&#8217;s done, copy it over to the phone and run it. If it crashes (and it should), look at the dump. The only important part is the beginning:</p>
<blockquote>
<pre>I/DEBUG   (  105): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000054
I/DEBUG   (  105):  r0 002d9508  r1 413c103c  r2 2afcc8d0  r3 002d93d8
I/DEBUG   (  105):  r4 00000004  r5 002d93e0  r6 6ca9dd68  r7 00000000
I/DEBUG   (  105):  r8 7e9dd478  r9 2cbffc70  10 0000aca0  fp 6caa4d48
I/DEBUG   (  105):  ip 002d93e8  sp 7e9dd0c0  lr 00000001  pc 4112d01c  cpsr 40000010</pre>
</blockquote>
<p>The error message doesn&#8217;t help at all &#8220;SIGSEGV,&#8221; but we have a dump of all the registers in the CPU. The important one is the PC (program counter), which shows what offset the last instruction was at offset 0x4112d01c in the memory. To get the program offset, just cat /proc/{pid}/maps to find where libjava-activity.so is loaded in memory. Subtract the offsets, and pop it into IDA pro. Now figure out why it crashed and try again. I need to learn proper debugging techniques one day.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/4fKOjgJ-0ydbNwr0drAGpZXnfN4/0/da"><img src="http://feedads.g.doubleclick.net/~a/4fKOjgJ-0ydbNwr0drAGpZXnfN4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/4fKOjgJ-0ydbNwr0drAGpZXnfN4/1/da"><img src="http://feedads.g.doubleclick.net/~a/4fKOjgJ-0ydbNwr0drAGpZXnfN4/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/YifanLu?a=zbPSQUxUNf4:q47qC15KeLg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/YifanLu?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=zbPSQUxUNf4:q47qC15KeLg:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=zbPSQUxUNf4:q47qC15KeLg:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=zbPSQUxUNf4:q47qC15KeLg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/YifanLu?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=zbPSQUxUNf4:q47qC15KeLg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=zbPSQUxUNf4:q47qC15KeLg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=zbPSQUxUNf4:q47qC15KeLg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=zbPSQUxUNf4:q47qC15KeLg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=zbPSQUxUNf4:q47qC15KeLg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=zbPSQUxUNf4:q47qC15KeLg:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/YifanLu/~4/zbPSQUxUNf4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://yifan.lu/2011/08/07/reverse-engineering-a-dynamic-library-on-the-xperia-play/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		<feedburner:origLink>http://yifan.lu/2011/08/07/reverse-engineering-a-dynamic-library-on-the-xperia-play/</feedburner:origLink></item>
		<item>
		<title>Analyzing the PSX emulator on the Xperia Play</title>
		<link>http://feedproxy.google.com/~r/YifanLu/~3/3CuYUol0lK8/</link>
		<comments>http://yifan.lu/2011/08/01/analyzing-the-psx-emulator-on-the-xperia-play/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 21:20:22 +0000</pubDate>
		<dc:creator>Yifan Lu</dc:creator>
				<category><![CDATA[Assembly]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Xperia Play]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[crash bandicoot]]></category>
		<category><![CDATA[decompilinh]]></category>
		<category><![CDATA[decryption]]></category>
		<category><![CDATA[disassembling]]></category>
		<category><![CDATA[encryption]]></category>
		<category><![CDATA[ida pro]]></category>
		<category><![CDATA[information]]></category>
		<category><![CDATA[ps1]]></category>
		<category><![CDATA[reverse engineering]]></category>
		<category><![CDATA[root]]></category>
		<category><![CDATA[sony]]></category>
		<category><![CDATA[xperia play]]></category>
		<category><![CDATA[zeus]]></category>
		<guid isPermaLink="false">http://yifan.lu/?p=289</guid>
		<description><![CDATA[I&#8217;ve been playing around with the new Xperia Play (well, with the speed of these Android phone releases, it&#8217;s already old). I&#8217;ve decided it would be a challenge to try to figure out how the PSOne emulator works and eventually be able to inject any ISO and play it with Sony superior PS1 emulator. Just [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been playing around with the new Xperia Play (well, with the speed of these Android phone releases, it&#8217;s already old). I&#8217;ve decided it would be a challenge to try to figure out how the PSOne emulator works and eventually be able to inject any ISO and play it with Sony superior PS1 emulator. Just to be clear, nothing is done yet, and this is just a technical post to aid whoever else is trying to do the same thing. Also, because information should be free.</p>
<p><strong>Decompiling and disassembling</strong></p>
<p>Before we can do any analyzing, we need to break everything open. I found a couple of useful tools to aid with reverse engineering Android applications. First up is <a href="http://code.google.com/p/android-apktool/">apktool</a>, which is like an all-in-one Android app decompression and decompilation tool. It uses various other tools to do stuff like decompress resources, convert the meta files to be readable, and use <a href="http://code.google.com/p/smali/">baksmali</a> to disassemble Dalvik bytecode to assembly code. Another useful tool is <a href="http://code.google.com/p/dex2jar/">dex2jar</a>, which converts Dalvik bytecode to regular Java bytecode and generates a jar that can be decompiled to Java code using a decompiler like, my favorite, <a href="http://java.decompiler.free.fr/">JD-GUI</a>. Last, but not least, we have the big guns: <a href="http://www.hex-rays.com/idapro/">IDA Pro</a>, which I&#8217;ve used religiously for many projects. If you don&#8217;t know, it can disassemble almost any binary, including native ARM libraries.</p>
<p><strong>Stepping through</strong></p>
<p>The first thing to do once we reversed all the code is to read it. A good way to start is to follow an application from start to finish through the code. Looking in the Android manifest file, we find the main activity that is started is com.sony.android.psone.BootActivity. We open that up, look at onCreate() and read what it does, follow whatever methods it calls and read through all those too. It may get a bit complicated, so I suggest thinking like a stack. From what I can understand, the first thing the app does is check if the data is downloaded. &#8220;Crash Bandicoot&#8221; is a 500MB game, so it would use up all the system space, so what Sony did is pack the binaries into the APK installed on the system, and the game data (textures, images, etc) is a ZPAK (renamed PKZIP) file that is downloaded from their servers if deleted. Once the data is verified to exist or downloaded from Sony&#8217;s servers, the baton is passed to a native JNI library to do the actual work.</p>
<p><strong>Native code</strong></p>
<p>Sony sees the Xperia Play not as just an Android phone, but a game platform. They call it &#8220;zplatform&#8221;, or as I guess: Zeus Platform (Zeus was the codename for the Xperia Play). The platform APIs is found on libzplatform.so, which is linked by all platform compliant (read: only on Play) games. It contains functions for extracting/creating ZPAK files as well as a lot of encryption/decryption commands and other stuff like networking. Another library is libjava-activity.so, which contains the actual emulator. Well, sort of. libjava-activity.so contains almost 2MB worth of crypto-security functions. It&#8217;s sole purpose is to decrypt and load into memory, three files (two of which are stored encrypted inside libjava-activity.so). They are: image_ps_toc (I can only guess it relates to the ROM file, image.ps), ps1_rom.bin (the PS1 BIOS, found in the data ZPAK), and libdefault.so (the main executable, aka: the emulator).</p>
<p><strong>ZPAK files</strong></p>
<p>The ZPAK file is basically a ZIP file that stores the game data. I only looked through &#8220;Bruce Lee&#8221; and &#8220;Crash Bandicoot&#8221;, but from what I can see there, all ZPAK files contain a metadata XML and one or more encrypted data files. For example, Crash Bandicoot&#8217;s ZPAK data contains image.ps, which I can guess from the size, is the ROM file for the game. I do not know if it&#8217;s an ISO or if it&#8217;s compressed, but that&#8217;s not important right now. There&#8217;s also ps1_rom.bin, which I can say for certain after reading the code to decrypt it, is the PS1 BIOS file, compressed using zlib. There&#8217;s also pages from the manual named for their page number and have no extensions. I can assume that they&#8217;re encrypted too because they contain no image header and the first two bytes are not the same throughout. The main thing I need to figure out is if the encryption key is common or not.</p>
<p><strong>The white box</strong></p>
<p>The main executable, libdefault.so, is completely encrypted and obfuscated by libjava-activity.so, which implements a white box security. If you read anything about white box cryptography (Google), you&#8217;ll see that it&#8217;s sole purpose in existence is to prevent itself from being reverse engineered. It hides the decryption key in a giant table or an even bigger finite-sized key. Nevertheless, it would take <del>someone</del>, a group of people smarter than me (not that that&#8217;s hard to find) to crack this file.</p>
<p><strong>What&#8217;s next</strong></p>
<p>Unfortunately, that&#8217;s all I know for now. Why? Because the CDMA version of the Xperia Play has not been rooted yet, and any farther analysis would require client access. I&#8217;m in the process to locating a R800i model of the Play to test with, but for now, I hope that someone who knows what they&#8217;re doing reads this and continue where I left off.</p>
<p>There are two giant problems that&#8217;s preventing us from injecting any PS1 image into the emulator. First of all, everything is encrypted. My hope is that it&#8217;s a single key used in zplatform (seeing that there&#8217;s functions such as zpCryptDecrypt and zpCryptEncrypt in the platform APIs) is used by Sony to encrypt image.ps and the manuals. Second of all, we need libdefault.so, the emulator. This may be easier then imagined. White box cryptography is used to hide the decryption key, not the decrypted content. My hope is that libdefault.so is loaded into RAM after libjava-activity.so decrypts it. There is a high chance of that because it would be hard to hide an executable and run it at the same time. If that is the case, disassembling the emulator will produce more results. If you have a rooted Xperia Play, set up USB debugging, and open up Crash Bandicoot. Connect the Play, and call &#8220;adb shell dd if=/dev/mem &gt; memdump.bin&#8221; and then &#8220;adb shell dd if=/dev/kmem &gt;&gt; memdump.bin&#8221; (I don&#8217;t know which one would work, so try both). That will (hopefully) produce a memory dump that will contain the emulator executable. Once we have this, even if we cannot decrypt image.ps, it may be possible to write an alternative wrapper application that will load ISOs or something.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/y8R5xdIxqrYxr3InGFWHQqOcnes/0/da"><img src="http://feedads.g.doubleclick.net/~a/y8R5xdIxqrYxr3InGFWHQqOcnes/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/y8R5xdIxqrYxr3InGFWHQqOcnes/1/da"><img src="http://feedads.g.doubleclick.net/~a/y8R5xdIxqrYxr3InGFWHQqOcnes/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/YifanLu?a=3CuYUol0lK8:IzdKvHQF2Ng:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/YifanLu?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=3CuYUol0lK8:IzdKvHQF2Ng:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=3CuYUol0lK8:IzdKvHQF2Ng:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=3CuYUol0lK8:IzdKvHQF2Ng:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/YifanLu?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=3CuYUol0lK8:IzdKvHQF2Ng:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=3CuYUol0lK8:IzdKvHQF2Ng:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=3CuYUol0lK8:IzdKvHQF2Ng:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=3CuYUol0lK8:IzdKvHQF2Ng:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=3CuYUol0lK8:IzdKvHQF2Ng:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=3CuYUol0lK8:IzdKvHQF2Ng:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/YifanLu/~4/3CuYUol0lK8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://yifan.lu/2011/08/01/analyzing-the-psx-emulator-on-the-xperia-play/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		<feedburner:origLink>http://yifan.lu/2011/08/01/analyzing-the-psx-emulator-on-the-xperia-play/</feedburner:origLink></item>
		<item>
		<title>One more thing: custom recovery kernel for Kindle 3</title>
		<link>http://feedproxy.google.com/~r/YifanLu/~3/mHsm9lG7Wes/</link>
		<comments>http://yifan.lu/2011/06/25/one-more-thing-custom-recovery-kernel-for-kindle-3/#comments</comments>
		<pubDate>Sun, 26 Jun 2011 04:19:26 +0000</pubDate>
		<dc:creator>Yifan Lu</dc:creator>
				<category><![CDATA[Kindle]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[custom]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[kindle]]></category>
		<category><![CDATA[linux]]></category>
		<guid isPermaLink="false">http://yifan.lu/2011/06/25/one-more-thing-custom-recovery-kernel-for-kindle-3/</guid>
		<description><![CDATA[I didn&#8217;t plan to do any more Kindle stuff for a while, but when I made a recovery kernel (prevents your Kindle from bricking) for the Kindle 2/DX as part of my 3.X installer, many asked for a similar protective thing on newer Kindles. Well, here it is. For now it&#8217;s just a kernel with [...]]]></description>
			<content:encoded><![CDATA[<p>I didn&#8217;t plan to do any more Kindle stuff for a while, but when I made a recovery kernel (prevents your Kindle from bricking) for the Kindle 2/DX as part of <a href="http://yifan.lu/p/kindleupdater">my 3.X installer</a>, many asked for a similar protective thing on newer Kindles. Well, <a href="http://yifan.lu/p/kindle-custom-kernel">here it is</a>.</p>
<p>For now it&#8217;s just a kernel with recovery features (export entire filesystem without password or serial port and install custom recovery packages), but maybe if I have the time, one day, I will make it a full custom kernel with additional features or something.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/3jqJFkKI0PPzALcC6mVg-cEZXZk/0/da"><img src="http://feedads.g.doubleclick.net/~a/3jqJFkKI0PPzALcC6mVg-cEZXZk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/3jqJFkKI0PPzALcC6mVg-cEZXZk/1/da"><img src="http://feedads.g.doubleclick.net/~a/3jqJFkKI0PPzALcC6mVg-cEZXZk/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/YifanLu?a=mHsm9lG7Wes:58i_qb9TEUE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/YifanLu?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=mHsm9lG7Wes:58i_qb9TEUE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=mHsm9lG7Wes:58i_qb9TEUE:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=mHsm9lG7Wes:58i_qb9TEUE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/YifanLu?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=mHsm9lG7Wes:58i_qb9TEUE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=mHsm9lG7Wes:58i_qb9TEUE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=mHsm9lG7Wes:58i_qb9TEUE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=mHsm9lG7Wes:58i_qb9TEUE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/YifanLu?a=mHsm9lG7Wes:58i_qb9TEUE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/YifanLu?i=mHsm9lG7Wes:58i_qb9TEUE:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/YifanLu/~4/mHsm9lG7Wes" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://yifan.lu/2011/06/25/one-more-thing-custom-recovery-kernel-for-kindle-3/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://yifan.lu/2011/06/25/one-more-thing-custom-recovery-kernel-for-kindle-3/</feedburner:origLink></item>
	</channel>
</rss>

