<?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>Stealthcopter.com &#187; md5</title>
	<atom:link href="http://www.stealthcopter.com/blog/tag/md5/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.stealthcopter.com/blog</link>
	<description>Android, Linux, Python and stealthcopters</description>
	<lastBuildDate>Fri, 13 Jan 2012 16:29:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Cracking MD5 hashes (or passwords) ultra-fast with GPU acceleration</title>
		<link>http://www.stealthcopter.com/blog/2010/06/cracking-md5-hashes-or-passwords-ultra-fast-with-gpu-acceleration/</link>
		<comments>http://www.stealthcopter.com/blog/2010/06/cracking-md5-hashes-or-passwords-ultra-fast-with-gpu-acceleration/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 18:17:14 +0000</pubDate>
		<dc:creator>mat</dc:creator>
				<category><![CDATA[cryptography]]></category>
		<category><![CDATA[computational]]></category>
		<category><![CDATA[cracking]]></category>
		<category><![CDATA[CUDA]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[md5]]></category>

		<guid isPermaLink="false">http://www.stealthcopter.com/blog/?p=914</guid>
		<description><![CDATA[Do you want to crack MD5 hashes in at a rate of ~300MHash/s without a massive rainbow table? Do you have a CUDA enabled GFX card? If you said yes or maybe to these questions then read on for a brief introduction on how to compile and run a CUDA accelerated MD5 cracker (coded by [...]]]></description>
			<content:encoded><![CDATA[<p>Do you want to crack MD5 hashes in at a rate of ~300MHash/s without a massive rainbow table? Do you have a CUDA enabled GFX card? If you said yes or maybe to these questions then read on for a brief introduction on how to compile and run a CUDA accelerated MD5 cracker (coded by Benjamin <em>&#8220;Titan&#8221;</em> Vernoux ).</p>
<p><strong>Pre-Requisites and Downloading</strong></p>
<ul>
<li>Own a <a href="http://www.nvidia.com/object/cuda_learn_products.html">CUDA enabled GFX card</a>, if you have a NVIDIA graphics card from the past year or so this is most likely the case.</li>
<li>Download and Install the <a href="http://www.nvidia.com/object/cuda_get.html">CUDA toolkit</a></li>
<li>Download MD5 GPU crack from <a href="http://bvernoux.free.fr/md5/index.php">http://bvernoux.free.fr</a> (windows and Linux)</li>
</ul>
<p><strong>Building in Ubuntu 10.04</strong></p>
<p>Extract the archive and do a make on the source code. When doing this I came across two problems that can be fixed by modifying the common.mk file.</p>
<p><em><strong>Problem 1: (cannot be declared weak)</strong></em></p>
<blockquote><p>
$ make<br />
/usr/include/string.h:43: error: inline function ‘void* memcpy(void*, const void*, size_t)’ cannot be declared weak<br />
/usr/include/string.h:64: error: inline function ‘void* memset(void*, int, size_t)’ cannot be declared weak<br />
/usr/include/bits/string3.h:49: error: inline function ‘void* memcpy(void*, const void*, size_t)’ cannot be declared weak<br />
/usr/include/bits/string3.h:78: error: inline function ‘void* memset(void*, int, size_t)’ cannot be declared weak<br />
/opt/cuda/bin/../include/common_functions.h:59: error: inline function ‘void* memset(void*, int, size_t)’ cannot be declared weak<br />
/opt/cuda/bin/../include/common_functions.h:62: error: inline function ‘void* memcpy(void*, const void*, size_t)’ cannot be declared weak<br />
/opt/cuda/bin/../include/math_functions.h:422: error: inline function ‘int __signbit(double)’ cannot be declared weak<br />
/opt/cuda/bin/../include/math_functions.h:427: error: inline function ‘int __signbitf(float)’ cannot be declared weak<br />
/opt/cuda/bin/../include/math_functions.h:440: error: inline function ‘int __signbitl(long double)’ cannot be declared weak<br />
/usr/include/bits/mathcalls.h:350: error: inline function ‘int __signbit(double)’ cannot be declared weak<br />
/usr/include/bits/mathcalls.h:350: error: inline function ‘int __signbitf(float)’ cannot be declared weak<br />
/usr/include/bits/mathcalls.h:350: error: inline function ‘int __signbitl(long double)’ cannot be declared weak<br />
/usr/include/bits/mathinline.h:36: error: inline function ‘int __signbitf(float)’ cannot be declared weak<br />
/usr/include/bits/mathinline.h:42: error: inline function ‘int __signbit(double)’ cannot be declared weak<br />
/usr/include/bits/mathinline.h:48: error: inline function ‘int __signbitl(long double)’ cannot be declared weak</p>
</blockquote>
<p><em><strong>Solution 1</strong></em></p>
<blockquote><p>
# Debug/release configuration<br />
ifeq ($(dbg),1)<br />
	COMMONFLAGS += -g<br />
	NVCCFLAGS   += -D_DEBUG<br />
	BINSUBDIR   := debug<br />
	LIBSUFFIX   := D<br />
else<br />
	##############Change the following line to have -O0 instead of -O2<br />
	COMMONFLAGS += -O0<br />
	BINSUBDIR   := release<br />
	LIBSUFFIX   :=<br />
	NVCCFLAGS   += &#8211;compiler-options -fno-strict-aliasing<br />
	CXXFLAGS    += -fno-strict-aliasing<br />
	CFLAGS      += -fno-strict-aliasing<br />
endif
</p>
</blockquote>
<p><em><strong>Problem 2: (lcudart)</strong></em></p>
<blockquote><p>
$ make<br />
/usr/bin/ld: skipping incompatible /opt/cuda/lib/libcudart.so when searching for -lcudart<br />
/usr/bin/ld: skipping incompatible /opt/cuda/lib/libcudart.so when searching for -lcudart<br />
/usr/bin/ld: cannot find -lcudart<br />
collect2: ld returned 1 exit status<br />
make: *** [bin/linux/release/gpu_md5_crack_0.2.3] Error 1
</p>
</blockquote>
<p><em><strong>Solution 2</strong></em></p>
<blockquote><p>
############## Change lib to lib64 if using a 64 bit operating system<br />
LIB       := -L$(CUDA_INSTALL_PATH)/lib64 -L$(LIBDIR) -L$(COMMONDIR)/lib64/$(OSLOWER) -L$(NVIDIA_SDK_PATH)/lib
</p>
</blockquote>
<p>Remember that you should &#8220;make clean&#8221; in-between each attempt to compile.</p>
<p><strong>Benchmarking</strong></p>
<p>Once it has compiled nicely you can give it a testdrive with its build in benchmark (with an NVIDIA 260 GFX card). Just run with the -b option:</p>
<blockquote><p>
./gpu_md5_crack_0.2.3 -b<br />
GPU_MD5_Crack v0.2.3 09 July 2009 LGPL for BackTrack 4.<br />
Copyright (C) 2009 TitanMKD (titanmkd@gmail.com).                                    </p>
<p>Benchmark Start<br />
Using default CUDA GPU device:0<br />
Cuda device ID:0, Device name:GeForce GTX 260, supporting CUDA:1.3,<br />
multiProcessorCount:27, clockRate:1466.00 MHz, TotalMem:895.31 MB<br />
******* Test 0 Start *******<br />
Expected Password: 1234567890<br />
MD5 Hash:e807f1fcf82d132f9bb018ca6738a19f, Start Password:1200000000, Total pwd to check:1000000000<br />
Charset used 0:0123456789<br />
MD5 brute force started                                                                            </p>
<p>MD5 Cracked pwd=1234567890 hash=e807f1fcf82d132f9bb018ca6738a19f<br />
Instant 200.02 Mhash/s(40.00 ms)<br />
Average 190.49 Mhash/s, Total Time:0.21s(210.00 ms)<br />
MD5 brute force finished<br />
******* Test 0 End *******                                      </p>
<p>******* Test 1 Start *******<br />
Expected Password: azerty<br />
MD5 Hash:ab4f63f9ac65152575886860dde480a1, Start Password:, Total pwd to check:1000000000<br />
Charset used 1:abcdefghijklmnopqrstuvwxyz<br />
MD5 brute force started                                                                  </p>
<p>MD5 Cracked pwd=azerty hash=ab4f63f9ac65152575886860dde480a1<br />
Instant 200.02 Mhash/s(40.00 ms)<br />
Average 240.02 Mhash/s, Total Time:0.10s(100.00 ms)<br />
MD5 brute force finished<br />
******* Test 1 End *******                                  </p>
<p>******* Test 2 Start *******<br />
Expected Password: azer09<br />
MD5 Hash:41b9cabe6033932eb3037fc933060adc, Start Password:, Total pwd to check:1000000000<br />
Charset used 2:abcdefghijklmnopqrstuvwxyz0123456789<br />
MD5 brute force started<br />
Progress 5%, Pwd:6lmea, Instant 280.02 Mhash/s(28.57 ms)<br />
MD5 Cracked pwd=azer09 hash=41b9cabe6033932eb3037fc933060adc<br />
Instant 266.69 Mhash/s(30.00 ms)<br />
Average 287.20 Mhash/s, Total Time:0.39s(390.00 ms)<br />
MD5 brute force finished<br />
******* Test 2 End *******                                                               </p>
<p>******* Test 3 Start *******<br />
Expected Password: AZBVSD<br />
MD5 Hash:fd049008572788d60140aaead79336cc, Start Password:, Total pwd to check:1000000000<br />
Charset used 3:ABCDEFGHIJKLMNOPQRSTUVWXYZ<br />
MD5 brute force started                                                                  </p>
<p>MD5 Cracked pwd=AZBVSD hash=fd049008572788d60140aaead79336cc<br />
Instant 266.69 Mhash/s(30.00 ms)<br />
Average 240.02 Mhash/s, Total Time:0.10s(100.00 ms)<br />
MD5 brute force finished<br />
******* Test 3 End *******</p>
<p>******* Test 4 Start *******<br />
Expected Password: AZ09AA<br />
MD5 Hash:7a552dd9cdd49acc5320bad9c29c9722, Start Password:, Total pwd to check:1000000000<br />
Charset used 4:ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789<br />
MD5 brute force started<br />
Progress 5%, Pwd:6LMEA, Instant 266.69 Mhash/s(30.00 ms)<br />
MD5 Cracked pwd=AZ09AA hash=7a552dd9cdd49acc5320bad9c29c9722<br />
Instant 266.69 Mhash/s(30.00 ms)<br />
Average 280.02 Mhash/s, Total Time:0.40s(400.00 ms)<br />
MD5 brute force finished<br />
******* Test 4 End *******</p>
<p>******* Test 5 Start *******<br />
Expected Password: zaZAab<br />
MD5 Hash:aef49f70bb7b923b8bc0a018f916ef64, Start Password:zCAAAA, Total pwd to check:1000000000<br />
Charset used 5:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz<br />
MD5 brute force started<br />
Progress 17%, Pwd:zaDpoA, Instant 280.02 Mhash/s(28.57 ms)<br />
MD5 Cracked pwd=zaZAab hash=aef49f70bb7b923b8bc0a018f916ef64<br />
Instant 266.69 Mhash/s(30.00 ms)<br />
Average 283.10 Mhash/s, Total Time:0.65s(650.00 ms)<br />
MD5 brute force finished<br />
******* Test 5 End *******</p>
<p>******* Test 6 Start *******<br />
Expected Password: za0ZA9<br />
MD5 Hash:062cc3b1302759722f48ac0b95b75803, Start Password:zaAAAA, Total pwd to check:1000000000<br />
Charset used 6:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789<br />
MD5 brute force started</p>
<p>MD5 Cracked pwd=za0ZA9 hash=062cc3b1302759722f48ac0b95b75803<br />
Instant 266.69 Mhash/s(30.00 ms)<br />
Average 266.69 Mhash/s, Total Time:0.06s(60.00 ms)<br />
MD5 brute force finished<br />
******* Test 6 End *******</p>
<p>******* Test 7 Start *******<br />
Expected Password: a^-*|<br />
MD5 Hash:cf7dcf4c3eeb6255668393242fcce273, Start Password:a0000, Total pwd to check:1000000000<br />
Charset used 7: !&#8221;#$%&#038;&#8217;()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<br />
MD5 brute force started</p>
<p>MD5 Cracked pwd=a^-*| hash=cf7dcf4c3eeb6255668393242fcce273<br />
Instant 266.69 Mhash/s(30.00 ms)<br />
Average 266.69 Mhash/s, Total Time:0.15s(150.00 ms)<br />
MD5 brute force finished<br />
******* Test 7 End *******</p>
<p>Benchmark End
</p>
</blockquote>
<p>So from the benchmark you can see that we are getting between 200 and 300 Mhash/s, that is about 250,000,000 hash attempts per second! AMAZING!!!</p>
<p><strong>Number of combinations for different alphabets</strong></p>
<table>
<tr>
<th>Length</th>
<th>0-9</th>
<th>a-z</th>
<th>a-z0-9</th>
<th>a-zA-Z</th>
<th>a-zA-Z0-9</th>
</tr>
<tr>
<td>1</td>
<td>10</td>
<td>26</td>
<td>36</td>
<td>52</td>
<td>62</td>
</tr>
<tr>
<td>2</td>
<td>100</td>
<td>676</td>
<td>1,296</td>
<td>2,704</td>
<td>3,844</td>
</tr>
<tr>
<td>3</td>
<td>1,000</td>
<td>17,576</td>
<td>46,656</td>
<td>140,608</td>
<td>238,328</td>
</tr>
<tr>
<td>4</td>
<td>10,000</td>
<td>456,976</td>
<td>1,679,616</td>
<td>7,311,616</td>
<td>14,776,336</td>
</tr>
<tr>
<td>5</td>
<td>100,000</td>
<td>11,881,376</td>
<td>60,466,176</td>
<td>380,204,032</td>
<td>916,132,832</td>
</tr>
<tr>
<td>6</td>
<td>1,000,000</td>
<td>308,915,776</td>
<td>2,176,782,336</td>
<td>19,770,609,664</td>
<td>56,800,235,584</td>
</tr>
<tr>
<td>7</td>
<td>10,000,000</td>
<td>8,031,810,176</td>
<td>78,364,164,096</td>
<td>1,028,071,702,528</td>
<td>3,521,614,606,208</td>
</tr>
<tr>
<td>8</td>
<td>100,000,000</td>
<td>208,827,064,576</td>
<td>2,821,109,907,456</td>
<td>53,459,728,531,456</td>
<td>218,340,105,584,896</td>
</tr>
<tr>
<td>9</td>
<td>1,000,000,000</td>
<td>5,429,503,678,976</td>
<td>101,559,956,668,416</td>
<td>2,779,905,883,635,710</td>
<td>13,537,086,546,263,600</td>
</tr>
<tr>
<td>10</td>
<td>10,000,000,000</td>
<td>141,167,095,653,376</td>
<td>3,656,158,440,062,980</td>
<td>144,555,105,949,057,000</td>
<td>839,299,365,868,340,000</td>
</tr>
</table>
<p><strong>Estimated time (in seconds) to crack (at 250MHash/s)</strong></p>
<table>
<tr>
<th>Length</th>
<th>0-9</th>
<th>a-z</th>
<th>a-z0-9</th>
<th>a-zA-Z</th>
<th>a-zA-Z0-9</th>
</tr>
<tr>
<td>1</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
</tr>
<tr>
<td>2</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
</tr>
<tr>
<td>3</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
</tr>
<tr>
<td>4</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.01</td>
<td>0.03</td>
</tr>
<tr>
<td>5</td>
<td>0.00</td>
<td>0.02</td>
<td>0.12</td>
<td>0.76</td>
<td>1.83</td>
</tr>
<tr>
<td>6</td>
<td>0.00</td>
<td>0.62</td>
<td>4.35</td>
<td>39.54</td>
<td>113.60</td>
</tr>
<tr>
<td>7</td>
<td>0.02</td>
<td>16.06</td>
<td>156.73</td>
<td>2,056.14</td>
<td>7,043.23</td>
</tr>
<tr>
<td>8</td>
<td>0.20</td>
<td>417.65</td>
<td>5,642.22</td>
<td>106,919.46</td>
<td>436,680.21</td>
</tr>
<tr>
<td>9</td>
<td>2.00</td>
<td>10,859.01</td>
<td>203,119.91</td>
<td>5,559,811.77</td>
<td>27,074,173.09</td>
</tr>
<tr>
<td>10</td>
<td>20.00</td>
<td>282,334.19</td>
<td>7,312,316.88</td>
<td>289,110,211.90</td>
<td>1,678,598,731.74</td>
</tr>
</table>
<p>Full calculations avaliable here: <a href='http://www.stealthcopter.com/blog/2010/06/cracking-md5-hashes-or-passwords-ultra-fast-with-gpu-acceleration/hashes/' rel='attachment wp-att-915'>MD5 hash cracking time using GPU accelerated brute forcing</a></p>
<p><strong>What now?</strong><br />
Well you can crack MD5&#8242;s at an extremely accelerated rate, so enjoy doing so responsibly (let your morals guide you <img src='http://www.stealthcopter.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ). You could also explore the source code and make additions as you see fit, I am planning on modifying it to allow an extra parameter so that prefixes can be added if you already know how the password starts. This can be the case when someone has prefixed the password with a known salt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stealthcopter.com/blog/2010/06/cracking-md5-hashes-or-passwords-ultra-fast-with-gpu-acceleration/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

