<?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>All Things IT Blog &#187; Reverse Engineering</title>
	<atom:link href="http://www.enusbaum.com/blog/category/reverse-engineering/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.enusbaum.com/blog</link>
	<description>My little nerded out corner of the Internets!</description>
	<lastBuildDate>Thu, 02 Sep 2010 01:43:18 +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>Old School Game: Reuinion (and a Saved Game Editor)</title>
		<link>http://www.enusbaum.com/blog/2009/06/09/old-school-game-reuinion-and-a-saved-game-editor/</link>
		<comments>http://www.enusbaum.com/blog/2009/06/09/old-school-game-reuinion-and-a-saved-game-editor/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 01:00:46 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[Gaming]]></category>
		<category><![CDATA[General Software]]></category>
		<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Abandonware]]></category>
		<category><![CDATA[Cheater]]></category>
		<category><![CDATA[DOSBox]]></category>
		<category><![CDATA[Game Editor]]></category>
		<category><![CDATA[Reunion]]></category>
		<category><![CDATA[Trainer]]></category>

		<guid isPermaLink="false">http://www.enusbaum.com/blog/?p=309</guid>
		<description><![CDATA[Does anyone else remember playing Reunion back on their 386&#8242;s with a staggering 2MB of RAM? Lord knows I remember! Reunion came out over fifteen years ago and I still feel the urge to play it now and then even today. It&#8217;s a great game and can be downloaded from many abandonawre sites across the [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_310" class="wp-caption aligncenter" style="width: 648px"><img class="size-full wp-image-310" title="Reunion Title Screen" src="http://www.enusbaum.com/blog/wp-content/uploads/2009/06/reunion.png" alt="Reunion Title Screen" width="638" height="398" /><p class="wp-caption-text">Reunion Title Screen</p></div>
<p>Does anyone else remember playing <a title="Link -- Wikipedia Article: Reunion" href="http://en.wikipedia.org/wiki/Reunion_(video_game)" onclick="return TrackClick('http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FReunion_%28video_game%29','Link+--+Wikipedia+Article%3A+Reunion')" target="_blank">Reunion</a> back on their 386&#8242;s with a staggering 2MB of RAM? Lord knows I remember!</p>
<p>Reunion came out over fifteen years ago and I still feel the urge to play it now and then even today. It&#8217;s a great game and can be downloaded from many <a title="Abandonia -- Reunion (1994)" href="http://www.abandonia.com/en/games/150/Reunion.html" onclick="return TrackClick('http%3A%2F%2Fwww.abandonia.com%2Fen%2Fgames%2F150%2FReunion.html','Abandonia+--+Reunion+%281994%29')" target="_blank">abandonawre</a> sites across the internet.</p>
<p>I started playing again recently using <a title="Link -- DOSBox Homepage" href="http://www.dosbox.com/" onclick="return TrackClick('http%3A%2F%2Fwww.dosbox.com%2F','Link+--+DOSBox+Homepage')" target="_blank">DOSBox</a> and I was amazed, because I didn&#8217;t even know the game had sound! <img src='http://www.enusbaum.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  When I played &#8220;back in the day&#8221;, my system didn&#8217;t have a Sound Card (because I couldn&#8217;t afford a <a title="Link -- Wikipedia Article: AWE32" href="http://en.wikipedia.org/wiki/Sound_Blaster_AWE32" onclick="return TrackClick('http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FSound_Blaster_AWE32','Link+--+Wikipedia+Article%3A+AWE32')" target="_blank">Creative AWE32</a>), so needless to say it was a whole different experience. The game has a fantastic production value and even when modern development languages, I&#8217;m not sure that even I&#8217;d be able to create a game of such depth a complexity!</p>
<p>Anywho, I began to get frustrated because I knew there were parts of the game I was missing because I couldn&#8217;t meet certain goals or didn&#8217;t have enough resources. Granted, I should have spent the time perfecting the game and working towards those achievements&#8230;.. but it&#8217;s an old game and I don&#8217;t have as much free time as I did when I was thirteen years old <img src='http://www.enusbaum.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>To that end, I sat down and studied the Save Game format for a while and also the (paltry) Save Editor that was included in the Abandonware version. I knew I could come up with something better that gives me even more options in the game. It took me a couple hours but I was able to come up with a pretty functional Saved Game Editor for Reunion that works around a couple glitches the previous version had.</p>
<p>I know, I&#8217;m a total cheater but it was a fun little project and I figure perhaps ONE person on the entirety of the Internet must need something like this as well, so I figure I&#8217;d throw it out there for anyone who needs it <img src='http://www.enusbaum.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Reunion Saved Game Editor</strong> &#8211; <a href="http://www.enusbaum.com/blog/wp-content/uploads/2009/06/reunionsge.zip" onclick="return TrackClick('http%3A%2F%2Fwww.enusbaum.com%2Fblog%2Fwp-content%2Fuploads%2F2009%2F06%2Freunionsge.zip','Download')">Download</a> (92kb)</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.enusbaum.com%2Fblog%2F2009%2F06%2F09%2Fold-school-game-reuinion-and-a-saved-game-editor%2F&amp;title=Old+School+Game%3A+Reuinion+%28and+a+Saved+Game+Editor%29" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.enusbaum.com/blog/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.enusbaum.com%2Fblog%2F2009%2F06%2F09%2Fold-school-game-reuinion-and-a-saved-game-editor%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.enusbaum.com/blog/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.enusbaum.com%2Fblog%2F2009%2F06%2F09%2Fold-school-game-reuinion-and-a-saved-game-editor%2F&amp;title=Old+School+Game%3A+Reuinion+%28and+a+Saved+Game+Editor%29" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.enusbaum.com/blog/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Old+School+Game%3A+Reuinion+%28and+a+Saved+Game+Editor%29+@+http%3A%2F%2Fwww.enusbaum.com%2Fblog%2F2009%2F06%2F09%2Fold-school-game-reuinion-and-a-saved-game-editor%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.enusbaum.com/blog/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.enusbaum.com/blog/2009/06/09/old-school-game-reuinion-and-a-saved-game-editor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.NET StringBuilder &#8212; Fast, but not as fast as you think!</title>
		<link>http://www.enusbaum.com/blog/2009/05/28/net-stringbuilder-fast-but-not-as-fast-as-you-think/</link>
		<comments>http://www.enusbaum.com/blog/2009/05/28/net-stringbuilder-fast-but-not-as-fast-as-you-think/#comments</comments>
		<pubDate>Thu, 28 May 2009 20:18:47 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[C# Programming]]></category>
		<category><![CDATA[General Programming]]></category>
		<category><![CDATA[Microsoft .NET 3.0 / WinFX]]></category>
		<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[.NET Optimization]]></category>
		<category><![CDATA[.NET Profiler]]></category>
		<category><![CDATA[.NET Profiling]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[C# Optimization]]></category>
		<category><![CDATA[C# String Concatenation]]></category>
		<category><![CDATA[C# String Manipulation]]></category>
		<category><![CDATA[C# Strings]]></category>
		<category><![CDATA[StringBuilder]]></category>

		<guid isPermaLink="false">http://www.enusbaum.com/blog/?p=294</guid>
		<description><![CDATA[StringBuilder: Friend or Foe?]]></description>
			<content:encoded><![CDATA[<p>I recently ran into a situation where I was tasked to profile some .NET code and do some optimizations anywhere hot spots popped up. I was amazed to find out that one of the BIGGEST offenders in our code block was a simple call to <strong>StringBuilder.Append(char)</strong>. I had to take a step back and scratch my head and wonder if my profiler was confused.</p>
<p>I re-ran some tests using the <strong>StopWatch</strong> class to hard code some metrics into the application and they also confirmed the findings. What&#8217;s up? How could a class that everyone says you can use to your hearts content when it came to string concatenation was failing me?</p>
<p>Turns out, it was a mix of misuse and a common misconception about the <a title="MSDN Documentation -- StringBuilder Class" href="http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx" onclick="return TrackClick('http%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fsystem.text.stringbuilder.aspx','MSDN+Documentation+--+StringBuilder+Class')" onclick="return TrackClick('http%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fsystem.text.stringbuilder.aspx','MSDN+Documentation+--+StringBuilder+Class')" target="_blank">StringBuilder Class</a>.</p>
<p><span id="more-294"></span></p>
<p>One of the first things you learn while picking up .NET is that the <a title="MSDN Documentation -- StringBuilder Class" href="http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx" onclick="return TrackClick('http%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fsystem.text.stringbuilder.aspx','MSDN+Documentation+--+StringBuilder+Class')" onclick="return TrackClick('http%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fsystem.text.stringbuilder.aspx','MSDN+Documentation+--+StringBuilder+Class')" target="_blank">StringBuilder Class</a> is your friend when it comes to concatenating large strings in memory. It beats the pants off of <a title="MSDN Documentation -- String.Concat Method" href="http://msdn.microsoft.com/en-us/library/system.string.concat.aspx" onclick="return TrackClick('http%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fsystem.string.concat.aspx','MSDN+Documentation+--+String.Concat+Method')" target="_blank">String.Concat</a> and <a title="MSDN Documentation -- String.Format Method" href="http://msdn.microsoft.com/en-us/library/system.string.format.aspx" onclick="return TrackClick('http%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fsystem.string.format.aspx','MSDN+Documentation+--+String.Format+Method')" target="_blank">String.Format</a>, while also being a mutable object in the Framework utilizing an in-memory buffer.</p>
<p>I used <a title="Homepage -- JetBrains dotTrace Profiler" href="http://www.jetbrains.com/profiler/" onclick="return TrackClick('http%3A%2F%2Fwww.jetbrains.com%2Fprofiler%2F','Homepage+--+JetBrains+dotTrace+Profiler')" target="_blank">JetBrains dotTrace</a> to help profile the application and it was very evident from the get-go that StringBuilder was causing the whole process to slow down.</p>
<p>The nature of my application was basically reading in a text buffer 1 character as a time, and using the <strong>StringBuilder</strong> as an output buffer. So for a 1k file, The method <strong>Append(char)</strong> would be called 1024 times. A 600k file would call <strong>Append(char)</strong> 614,400 times.</p>
<p>So why was I getting burned in execution time? The issue turned out to be two fold.</p>
<p>First, there&#8217;s overhead cost to the call. I don&#8217;t care how lightweight your method is, if you&#8217;re calling it <span style="text-decoration: underline;"><strong>SIX HUNDRED THOUSAND TIMES</strong></span>, it&#8217;s going to take a bit. Let alone a method who handles a string buffer in memory and string manipulation. So basically, no matter how fast StringBuilder actually is, it&#8217;s not a free call and you should consider the fact that the call still has overhead when architecting your solution.</p>
<p>Architecture brings me to my second point. While writing each character individually made sense initally, it seems that it was just lazy <img src='http://www.enusbaum.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  The optimized route would have been calling Append with a SUBSTRING of the input buffer, this way we avoid the overhead of multiple calls by writing all the neccisary data in one big blob.</p>
<p>So 600,000 calls to <strong>StringBuilder.Append(char)</strong> becomes only a few hundred calls to <strong>StringBuilder.Append(string.Substring(start, count))</strong>. Sure, the Substring Virtual Method itself has overhead, but it&#8217;s still less than the thousands of calls to <strong>Append(char)</strong> that we&#8217;re saving ourself <img src='http://www.enusbaum.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Conclusion?</p>
<p>StringBuilder is fast, but it&#8217;s not free. Take this into consideration when utilizing it while appending large data sets in small chunks. <img src='http://www.enusbaum.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Cheers!</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.enusbaum.com%2Fblog%2F2009%2F05%2F28%2Fnet-stringbuilder-fast-but-not-as-fast-as-you-think%2F&amp;title=.NET+StringBuilder+%26%238212%3B+Fast%2C+but+not+as+fast+as+you+think%21" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.enusbaum.com/blog/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.enusbaum.com%2Fblog%2F2009%2F05%2F28%2Fnet-stringbuilder-fast-but-not-as-fast-as-you-think%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.enusbaum.com/blog/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.enusbaum.com%2Fblog%2F2009%2F05%2F28%2Fnet-stringbuilder-fast-but-not-as-fast-as-you-think%2F&amp;title=.NET+StringBuilder+%26%238212%3B+Fast%2C+but+not+as+fast+as+you+think%21" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.enusbaum.com/blog/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+.NET+StringBuilder+%26%238212%3B+Fast%2C+but+not+as+fast+as+you+think%21+@+http%3A%2F%2Fwww.enusbaum.com%2Fblog%2F2009%2F05%2F28%2Fnet-stringbuilder-fast-but-not-as-fast-as-you-think%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.enusbaum.com/blog/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.enusbaum.com/blog/2009/05/28/net-stringbuilder-fast-but-not-as-fast-as-you-think/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>To All BBS Software Authors &#8211; Please Donate Your Artwork To The People!</title>
		<link>http://www.enusbaum.com/blog/2008/01/29/to-all-bbs-software-authors-please-donate-your-artwork-to-the-people/</link>
		<comments>http://www.enusbaum.com/blog/2008/01/29/to-all-bbs-software-authors-please-donate-your-artwork-to-the-people/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 18:24:10 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[General Software]]></category>
		<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[Abandonware]]></category>
		<category><![CDATA[BBS]]></category>
		<category><![CDATA[MajorBBS]]></category>

		<guid isPermaLink="false">http://www.enusbaum.com/blog/2008/01/29/to-all-bbs-software-authors-please-donate-your-artwork-to-the-people/</guid>
		<description><![CDATA[I&#8217;m a child of the BBS generation. Well, to be fair to all the grey beards out there, I&#8217;m a child of the late BBS generation (1993-1998). I have many, many fond memories of my favorite door games, FidoNet threads and meet-ups. I frequented a local BBS here in San Diego, California called Dream Net. [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a child of the <a href="http://en.wikipedia.org/wiki/Bulletin_board_system" onclick="return TrackClick('http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FBulletin_board_system','Wikipedia+--+Bulliten+Board+System')" title="Wikipedia -- Bulliten Board System" target="_blank">BBS</a> generation. Well, to be fair to all the grey beards out there, I&#8217;m a child of the late BBS generation (1993-1998). I have many, many fond memories of my favorite door games, FidoNet threads and meet-ups.</p>
<p>I frequented a local BBS here in San Diego, California called Dream Net. Dream Net ran a multi-line BBS software called <a href="http://en.wikipedia.org/wiki/MajorBBS" onclick="return TrackClick('http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FMajorBBS','Wikipedia+--+The+MajorBBS+System')" title="Wikipedia -- The MajorBBS System" target="_blank">MajorBBS</a> and was sysoped by Blondie (Tara) and Reep (George). What made Dream Net so great is that being multi-lined allowed it to host some of the first great MUD&#8217;s such as <a href="http://en.wikipedia.org/wiki/MajorMUD" onclick="return TrackClick('http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FMajorMUD','Wikipedia+--+MajorMUD')" title="Wikipedia -- MajorMUD" target="_blank">MajorMUD</a> and my personal favorite, Tele-Arena. Other great multi-user games included <a href="http://en.wikipedia.org/wiki/TradeWars_2002" onclick="return TrackClick('http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FTradeWars_2002','Wikipedia+--+TradeWars+2002')" title="Wikipedia -- TradeWars 2002" target="_blank">TradeWars 2002</a>, Farwest Trivia and T-LORD (Tournament LORD, which was a version of <a href="http://en.wikipedia.org/wiki/Legend_of_the_Red_Dragon" onclick="return TrackClick('http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FLegend_of_the_Red_Dragon','Wikipedia+--+Legend+Of+The+Red+Dragon')" title="Wikipedia -- Legend Of The Red Dragon" target="_blank">Legend of the Red Dragon</a> for MajorBBS).</p>
<p>Now over fifteen years later, BBS&#8217;s are all but dead. Those of us who used them try and contact old friends using sites like <a href="http://www.bbsmates.com/" onclick="return TrackClick('http%3A%2F%2Fwww.bbsmates.com%2F','BBSMates+--+Website+Connecting+old+school+BBS+users%21')" title="BBSMates -- Website Connecting old school BBS users!" target="_blank">BBSMates.com</a>. People have put out <a href="http://www.bbsdocumentary.com/" onclick="return TrackClick('http%3A%2F%2Fwww.bbsdocumentary.com%2F','Homepage+--+BBS%3A+The+Documentary')" title="Homepage -- BBS: The Documentary" target="_blank">documentarties</a> and <a href="http://www.amazon.com/Commodork-Sordid-Tales-BBS-Junkie/dp/1847285821/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1201626811&amp;sr=1-1" onclick="return TrackClick('http%3A%2F%2Fwww.amazon.com%2FCommodork-Sordid-Tales-BBS-Junkie%2Fdp%2F1847285821%2Fref%3Dpd_bbs_sr_1%3Fie%3DUTF8%26amp%3Bs%3Dbooks%26amp%3Bqid%3D1201626811%26amp%3Bsr%3D1-1','Amazon.com+--+Commodork%3A+Sordid+Tales+from+a+BBS+Junkie')" title="Amazon.com -- Commodork: Sordid Tales from a BBS Junkie" target="_blank">books</a> on the BBS culture and lamenting of those days when carrier signals screamed from little boxes. I believe as a whole the remaining BBS community is very co-operative in trying to preserve their past and makes sure the software, which easily qualifies as <a href="http://en.wikipedia.org/wiki/Abandonware" onclick="return TrackClick('http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FAbandonware','Wikipedia+--+Abandonware')" title="Wikipedia -- Abandonware" target="_blank">abandonware</a>, doesn&#8217;t fall victim to the cyber ether to be lost forever on a floppy disk in a closet somewhere. A great example of this effort is <a href="http://www.themajorbbs.com/majorbbs/servlet/MBBSMain" onclick="return TrackClick('http%3A%2F%2Fwww.themajorbbs.com%2Fmajorbbs%2Fservlet%2FMBBSMain','Homepage+--+The+MajorBBS+Resotration+Project')" title="Homepage -- The MajorBBS Resotration Project" target="_blank">The MajorBBS Restoration Project</a>.</p>
<p>The MajorBS Restoration Project is a group of people ranging from hardcore software developers to enthusiasts looking to preserve and restore everything relating to the MajorBBS bulletin board software and related software. One thing people are running into is the legality and morality of using &#8216;pirated&#8217; copies of software that is no longer for sale or the parent companies no longer exist. I have found myself in the same situation and began to dabble in MajorBBS reverse engineering in order to make the modules I wished to use for my own private purposes, functional.</p>
<p>For the most part, previous license holders for MajorBBS software have come forward and donated their source code, which represents thousands of hours in hard work and labor, to the community for preservation and continued development by enthusiasts. An example of this would be M.B. Murdock &amp; Associates and their MajorBBS game Galactic Empire.  As a company, they closed their doors in 1996 due to the decline in BBS sales, but in 2002 Mike Murdock released the source code for the Galactic Empires MajorBBS module under the GPL license.</p>
<p>There have been a few software vendors who have been known to protect the MajorBBS modules they&#8217;ve developed either as a corporation, or as an individual developer who ran his own business during this period. Part of me, as a software developer myself, can understand that you might not want to just give out the source code to something you&#8217;ve worked so hard on. Lord knows I don&#8217;t go around handing out my own <img src='http://www.enusbaum.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />   But some of these people actually go as far to being legal action against individuals who are running &#8216;pirated&#8217; copies of their software, fifteen years after it was released.</p>
<p>I&#8217;m not saying that it justifies piracy, but I think legally if I can prove:</p>
<ul>
<li>The software is over a certain age (perhaps ten+ years)</li>
<li>The originating company no longer exists, or</li>
<li>The company does exist but will no longer sell copies of the software</li>
</ul>
<p>Then, aren&#8217;t they just using their old software as bait to perhaps lure users into a lawsuit for pirating software that was impossible to purchase by legal means.</p>
<p>What I would love to see is a movement to simply preserve the past. My past. Millions of people&#8217;s pasts. Let&#8217;s try to come together using projects like the MajorBBS Restoration Project or others of it&#8217;s type, and get those programs we all love and remember back in the open before they&#8217;re lost forever! Even a simple keygen that would take a software author a few hours to package and release could help many, many people.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.enusbaum.com%2Fblog%2F2008%2F01%2F29%2Fto-all-bbs-software-authors-please-donate-your-artwork-to-the-people%2F&amp;title=To+All+BBS+Software+Authors+%26%238211%3B+Please+Donate+Your+Artwork+To+The+People%21" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.enusbaum.com/blog/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.enusbaum.com%2Fblog%2F2008%2F01%2F29%2Fto-all-bbs-software-authors-please-donate-your-artwork-to-the-people%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.enusbaum.com/blog/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.enusbaum.com%2Fblog%2F2008%2F01%2F29%2Fto-all-bbs-software-authors-please-donate-your-artwork-to-the-people%2F&amp;title=To+All+BBS+Software+Authors+%26%238211%3B+Please+Donate+Your+Artwork+To+The+People%21" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.enusbaum.com/blog/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+To+All+BBS+Software+Authors+%26%238211%3B+Please+Donate+Your+Artwork+To+The+People%21+@+http%3A%2F%2Fwww.enusbaum.com%2Fblog%2F2008%2F01%2F29%2Fto-all-bbs-software-authors-please-donate-your-artwork-to-the-people%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.enusbaum.com/blog/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.enusbaum.com/blog/2008/01/29/to-all-bbs-software-authors-please-donate-your-artwork-to-the-people/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Semagic LiveJournal Client Password Decryption and Recovery</title>
		<link>http://www.enusbaum.com/blog/2007/02/15/semagic-livejournal-client-password-decryption-and-recovery/</link>
		<comments>http://www.enusbaum.com/blog/2007/02/15/semagic-livejournal-client-password-decryption-and-recovery/#comments</comments>
		<pubDate>Thu, 15 Feb 2007 18:09:07 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[C# Programming]]></category>
		<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[LiveJournal]]></category>
		<category><![CDATA[Password Decrypt]]></category>
		<category><![CDATA[Password Decrypter]]></category>
		<category><![CDATA[Semagic]]></category>

		<guid isPermaLink="false">http://www.enusbaum.com/blog/2007/02/15/semagic-livejournal-client-password-decryption-and-recovery/</guid>
		<description><![CDATA[Semagic (link) is a client application for LiveJournal (link). Recently I needed to recover a password that was 'remembered' by Semagic, but it was hidden in the password field. Simple password unmasking applications weren't helping me any as the field itself isn't a simple password box. After further investigation I was able to find where [...]]]></description>
			<content:encoded><![CDATA[<p>Semagic (<a href="http://semagic.sourceforge.net/" onclick="return TrackClick('http%3A%2F%2Fsemagic.sourceforge.net%2F','link')">link</a>) is a client application for LiveJournal (<a href="http://www.livejournal.com" onclick="return TrackClick('http%3A%2F%2Fwww.livejournal.com','link')">link</a>).</p>
<p>Recently I needed to recover a password that was 'remembered' by Semagic, but it was hidden in the password field. Simple password unmasking applications weren't helping me any as the field itself isn't a simple password box.</p>
<p>After further investigation I was able to find where Semagic stores the saved passwords in the Windows Registry. It was obvious that the password was encrypted and was stored in it's entire form. Since Semagic is open source, I was able to find the code block which served as its password decrypter:</p>
<div class="igBar"><span id="lcpp-3"><a href="#" onclick="javascript:showPlainTxt('cpp-3'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">C++:</span>
<div id="cpp-3">
<div class="cpp">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">m_password = m_app-&amp;gt;GetProfileString<span style="color: #000000;">&#40;</span>userkey, _T<span style="color: #000000;">&#40;</span><span style="color: #666666;">"password"</span><span style="color: #000000;">&#41;</span>, _T<span style="color: #000000;">&#40;</span><span style="color: #666666;">""</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;&nbsp; &nbsp; <span style="color: #ff0000;">//Gets Encrypted password from registry</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">enc = m_app-&amp;gt;GetProfileInt<span style="color: #000000;">&#40;</span>userkey, _T<span style="color: #000000;">&#40;</span><span style="color: #666666;">"obscure"</span><span style="color: #000000;">&#41;</span>, <span style="color: #0000dd;color:#800000;">0</span><span style="color: #000000;">&#41;</span>;&nbsp; &nbsp; <span style="color: #ff0000;">//Checks to see if the password is 'obscured'</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0000ff;">if</span> <span style="color: #000000;">&#40;</span>enc<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>&nbsp; &nbsp; <span style="color: #ff0000;">//If password is obscured</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">LPTSTR str = m_password.<span style="color: #00eeff;">GetBuffer</span><span style="color: #000000;">&#40;</span>m_password.<span style="color: #00eeff;">GetLength</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;&nbsp; &nbsp; <span style="color: #ff0000;">//Password</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">LPTSTR key = <span style="color: #0000dd;">new</span> TCHAR<span style="color: #000000;">&#91;</span>m_user.<span style="color: #00eeff;">GetLength</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>+<span style="color: #0000dd;color:#800000;">1</span><span style="color: #000000;">&#93;</span>;&nbsp; &nbsp; <span style="color: #ff0000;">//Sets Key Size (Username + 1)</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">_tcsncpy<span style="color: #000000;">&#40;</span>key, <span style="color: #000000;">&#40;</span>LPCTSTR<span style="color: #000000;">&#41;</span> m_user, m_user.<span style="color: #00eeff;">GetLength</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>+<span style="color: #0000dd;color:#800000;">1</span><span style="color: #000000;">&#41;</span>;&nbsp; &nbsp; <span style="color: #ff0000;">//Copies Username to Key</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">LPTSTR orig = key;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0000ff;">while</span> <span style="color: #000000;">&#40;</span>*str<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0000ff;">if</span> <span style="color: #000000;">&#40;</span>!*key<span style="color: #000000;">&#41;</span>&nbsp; &nbsp; <span style="color: #ff0000;">//If we're OOB on the key, reset it</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">key = orig;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">*<span style="color: #000000;">&#40;</span>str<span style="color: #000000;">&#41;</span> -= <span style="color: #666666;">'a'</span>;&nbsp; &nbsp; <span style="color: #ff0000;">//subtract the value of 'a', which is 97, from the encrypted value</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">*<span style="color: #000000;">&#40;</span>str++<span style="color: #000000;">&#41;</span> ^= *<span style="color: #000000;">&#40;</span>key++<span style="color: #000000;">&#41;</span>;&nbsp; &nbsp; <span style="color: #ff0000;">//XOR bitwise based on the key</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">key = orig;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">m_password.<span style="color: #00eeff;">ReleaseBuffer</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0000dd;">delete</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> key;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>So needless to say it was just a matter of debugging and some time before I was able to port the decryption routine over to a stand alone C# application.</p>
<div class="igBar"><span id="lcsharp-4"><a href="#" onclick="javascript:showPlainTxt('csharp-4'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">C#:</span>
<div id="csharp-4">
<div class="csharp">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> iLoop = <span style="color: #FF0000;color:#800000;">0</span>; iLoop &amp;lt;Convert.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span>sPassword<span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Length</span>; iLoop++<span style="color: #000000;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #FF0000;">int</span> iInputCharacter = <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span><span style="color: #000000;">&#41;</span>Convert.<span style="color: #0000FF;">ToChar</span><span style="color: #000000;">&#40;</span>sPassword.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Substring</span><span style="color: #000000;">&#40;</span>iLoop,<span style="color: #FF0000;color:#800000;">1</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0600FF;">if</span><span style="color: #000000;">&#40;</span>iXORCharacter&amp;gt;= sUserName.<span style="color: #0000FF;">Length</span><span style="color: #000000;">&#41;</span> iXORCharacter = <span style="color: #FF0000;color:#800000;">0</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">iInputCharacter -= <span style="color: #FF0000;color:#800000;">97</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">iInputCharacter ^= <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span><span style="color: #000000;">&#41;</span>Convert.<span style="color: #0000FF;">ToChar</span><span style="color: #000000;">&#40;</span>sUserName.<span style="color: #0000FF;">Substring</span><span style="color: #000000;">&#40;</span>iXORCharacter, <span style="color: #FF0000;color:#800000;">1</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">textBox1.<span style="color: #0000FF;">Text</span> += <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">char</span><span style="color: #000000;">&#41;</span>iInputCharacter;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">iXORCharacter++;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>I've compiled a quick little program that'll extract the usernames from the registry and display their passwords:</p>
<p><a id="p14" onmousedown="selectLink(14);" href="http://www.enusbaum.com/blog//wp-content/uploads/2007/02/semagicdecrypt.zip" onclick="return TrackClick('http%3A%2F%2Fwww.enusbaum.com%2Fblog%2F%2Fwp-content%2Fuploads%2F2007%2F02%2Fsemagicdecrypt.zip','Semagic+Password+Decrypter')">Semagic Password Decrypter</a></p>
<p>This program is 100% safe and won't e-mail your password to me or any other silly crap like that. I just figured someone out there would need it as well.</p>
<p>Cheers!</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.enusbaum.com%2Fblog%2F2007%2F02%2F15%2Fsemagic-livejournal-client-password-decryption-and-recovery%2F&amp;title=Semagic+LiveJournal+Client+Password+Decryption+and+Recovery" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.enusbaum.com/blog/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.enusbaum.com%2Fblog%2F2007%2F02%2F15%2Fsemagic-livejournal-client-password-decryption-and-recovery%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.enusbaum.com/blog/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fwww.enusbaum.com%2Fblog%2F2007%2F02%2F15%2Fsemagic-livejournal-client-password-decryption-and-recovery%2F&amp;title=Semagic+LiveJournal+Client+Password+Decryption+and+Recovery" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.enusbaum.com/blog/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Semagic+LiveJournal+Client+Password+Decryption+and+Recovery+@+http%3A%2F%2Fwww.enusbaum.com%2Fblog%2F2007%2F02%2F15%2Fsemagic-livejournal-client-password-decryption-and-recovery%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.enusbaum.com/blog/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.enusbaum.com/blog/2007/02/15/semagic-livejournal-client-password-decryption-and-recovery/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
