<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>toxicsoftware.com &#187; Software Licensing</title>
	<atom:link href="http://toxicsoftware.com/tag/software-licensing/feed/" rel="self" type="application/rss+xml" />
	<link>http://toxicsoftware.com</link>
	<description>RANDOMIZE USR 0</description>
	<lastBuildDate>Sun, 01 Aug 2010 17:49:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>AquaticPrime Warning</title>
		<link>http://toxicsoftware.com/aquaticprime-warning/</link>
		<comments>http://toxicsoftware.com/aquaticprime-warning/#comments</comments>
		<pubDate>Thu, 08 Jun 2006 02:24:55 +0000</pubDate>
		<dc:creator>schwa</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[AquaticPrime]]></category>
		<category><![CDATA[Cracks]]></category>
		<category><![CDATA[Cryptography]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software Licensing]]></category>
		<category><![CDATA[Software Registration]]></category>

		<guid isPermaLink="false">http://toxicsoftware.com/blog/aquaticprime-warning/</guid>
		<description><![CDATA[AquaticPrime is a &#8220;secure registration method for your shareware applications, released as free open-source software&#8221;. AquaticPrime uses &#8220;RSA encryption to provide excellent security &#8211; the same that is used to protect government documents&#8221;. This makes it sound like AquaticPrime is &#8230; <a href="http://toxicsoftware.com/aquaticprime-warning/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.aquaticmac.com/">AquaticPrime</a> is a &#8220;secure registration method for your shareware applications, released as free open-source software&#8221;.</p>

<p>AquaticPrime uses &#8220;RSA encryption to provide excellent security &#8211; the same that is used to protect government documents&#8221;. This makes it sound like AquaticPrime is a great solution for Software Developers wanting to prevent piracy by adopting a software licensing scheme. A lot of <a href="http://groups.yahoo.com/group/macsb/">Macintosh Small Business</a> developers are using or are considering using AquaticPrime.</p>

<p>Unfortunately for them, AquaticPrime is incredibly easy to crack. I am not a <a href="http://en.wikipedia.org/wiki/Computer_security">computer security</a> expert and I am definitely not a <a href="http://en.wikipedia.org/wiki/Cracker_%28computing%29">software cracker</a>, but I was able to crack an application that used AquaticPrime in less than thirty minutes with almost no preparation time. In fact, I am pretty sure that my crack will work with almost all applications that use AquaticPrime.</p>

<p>Aquatic Prime uses a technique similar to one discussed by Allan Odgaard on his <a href="http://macromates.com/sigpipe/archives/2004/09/05/using-openssl-for-license-keys/#comment-82">blog</a>. <a href="http://en.wikipedia.org/wiki/Public_key_cryptography">Public Key cryptography</a> techniques are used to generate linked public and a private keys. The private key is kept by the software developer and the public key is shipped inside the application&#8217;s binary. When a user buys a copy of the software, a license file is signed using the private key. The software can then use its public key to verify that the license key was signed by the public key. Someone trying to steal a copy of the software would be unable to forge their own license files because the public key works with one and only one private key.</p>

<p>The technique I used to defeat AquaticPrime involved creating my own private and public keys (using the AquaticPrime utility itself) and then generating a fake license  key (registered to a &#8220;John Doe&#8221;) using the new private key. The trick then was cracking the test application and convincing it to use my public key instead of the real key.</p>

<p>To track the application, I needed a way of writing code that could be executed by the targeted application. Fortunately, there are a plethora of methods to do that on Mac OS X: <a href="http://www.unsanity.com/haxies/ape">Application Enhancer</a>, <a href="http://rentzsch.com/mach_inject/">MachInject</a>, <a href="http://www.cocoadev.com/index.pl?InputManager">InputManagers</a>, and <a href="http://culater.net/software/SIMBL/SIMBL.php">SIMBL</a> plugins are just some of the many ways of forcing third-party applications to run foreign code. I chose to use a SIMBL plugin because I had never used SIMBL before and wanted to learn a little about it. Creating a SIMBL plug-in turned out to be incredibly easy and I had my code running inside the targeted application in just a few minutes. In a couple of minutes more, I had created an object that was masquerading as an <a href="http://aquaticmac.com/guide/validate.php">AquaticPrime</a> object. The final step was to make my masquerading object ignore the application&#8217;s public key and use my fake public key instead. Once this was achieved I loaded my (or rather John Doe&#8217;s) fake license key into the application and found that I had cracked the application.</p>

<p>It really was as simple as that. Of course there were a few WTF moments and application crashes, but nothing unusual during development (especially development of this kind). The code currently only works with AquaticPrime&#8217;s Objective-C interface, but the same principles can be used for the pure C interface too. I have tried this technique on two shareware applications and it worked fine with both. I am reasonably confident that it should work with most AquaticPrime using applications.</p>

<p>The method used to defeat AquaticPrime isn&#8217;t particularly obscure, and in fact is just one of many methods that could be used to defeat it. However this method is particularly nice in that you&#8217;re not really hacking the application using a more brute force method. You&#8217;re merely providing it with bad data, which it then uses to validate your bad license (kind of like Garbage In, Garbage out), in all other ways AquaticPrime is working as normal and is blissfully unaware that it has been cracked. This means that some of the techniques that developers can use to find out if their software has been cracked are impossible.</p>

<p>AquaticPrime is a well written, documented and marketed piece of software. But it suffers from this huge design flaw. AquaticPrime is exceptionally easy to crack, either with this method or with a variety of other, possibly cruder methods. Many of these methods are equally applicable to other registration schemes, so it is somewhat unfair to single AquaticPrime out. But because AquaticPrime provides all the source code and headers to anyone, it makes it really easy for anyone to crack. Although hiding the source code would have been a form of &#8220;<a href="http://en.wikipedia.org/wiki/Security_through_obscurity">security through obscurity</a>&#8220;, this would have at least slowed me down considerable. As it was, I was handed everything I needed to crack this software on a plate. And if I can crack this software in less than 30 minutes, I am sure crackers who do this thing professionally would have had even less trouble.</p>

<p>Even more worrying, this technique doesn&#8217;t just work on a single application, it will work on all applications that use AquaticPrime. I don&#8217;t know how many applications out there use AquaticPrime, but each is vulnerable to the same crack and all would be cracked essentially &#8220;for free&#8221;. There are some things a developer could do to shore up this vulnerability, but in reality most solutions are probably just as easily cracked.</p>
]]></content:encoded>
			<wfw:commentRss>http://toxicsoftware.com/aquaticprime-warning/feed/</wfw:commentRss>
		<slash:comments>39</slash:comments>
		</item>
	</channel>
</rss>
