<?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>..spOOx?!</title>
	<atom:link href="http://spoox.org/wp/feed/" rel="self" type="application/rss+xml" />
	<link>http://spoox.org/wp</link>
	<description>One Small Mouseover Hint for [a] Man, One Giant Doubleclick for Mankind</description>
	<lastBuildDate>Mon, 10 Nov 2008 16:39:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Silverlight and socket support &#8211; what were they thinking?</title>
		<link>http://spoox.org/wp/2008/11/07/silverlight-and-socket-support-what-were-they-thinking/</link>
		<comments>http://spoox.org/wp/2008/11/07/silverlight-and-socket-support-what-were-they-thinking/#comments</comments>
		<pubDate>Fri, 07 Nov 2008 17:22:09 +0000</pubDate>
		<dc:creator>Rune Bjerke</dc:creator>
				<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://spoox.org/wp/2008/11/07/silverlight-and-socket-support-what-were-they-thinking/</guid>
		<description><![CDATA[With beta 2 release of Silverlight 2 (SL2-B2), Microsoft decided to change the socket implementation to require a socket policy server, which basically is a TCP server responding with an XML document if you send it a certain string.

Prior to SL2-B2, the only restriction for socket connections was that the connection had to be done [...]]]></description>
			<content:encoded><![CDATA[<p>With beta 2 release of <a href="http://www.microsoft.com/silverlight">Silverlight</a> 2 (SL2-B2), Microsoft decided to change the <a href="http://msdn.microsoft.com/en-us/library/cc296248(VS.95).aspx">socket implementation</a> to require a <a href="http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx#sectionToggle4">socket policy server</a>, which basically is a TCP server responding with an XML document if you send it a certain string.</p>
<p><span id="more-49"></span></p>
<p>Prior to SL2-B2, the only <a href="http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx">restriction</a> for socket connections was that the connection had to be done against the same hostname/IP-address that served the Silverlight application, and that the TCP port needed to be in the range 4502-4534.</p>
<p>Release candidate 0 (SL2-RC0) and the final &#8220;Release-To-Web&#8221; release (SL2-RTW) didn&#8217;t introduce any new changes.</p>
<p>So, the restrictions are now:</p>
<ol>
<li>Connections can only be made to TCP ports in the range 4502-4534</li>
<li>A socket policy server must be running on port 943 on the same server</li>
<li>The policy returned by the policy server must match with the application performing the request</li>
</ol>
<p>The arguments for introducing the policy server seems to be:</p>
<ol>
<li>Added security</li>
<li>A server hosting a socket server is not likely to also run a web server</li>
</ol>
<p>Some related links:</p>
<ol>
<li><a href="http://timheuer.com/blog/archive/2008/06/06/silverlight-sockets-requires-policy-server-beta-2.aspx">http://timheuer.com/blog/archive/2008/06/06/silverlight-sockets-requires-policy-server-beta-2.aspx</a></li>
<li><a href="http://silverlight.net/blogs/msnow/archive/2008/06/26/full-implementation-of-a-silverlight-policy-server.aspx">http://silverlight.net/blogs/msnow/archive/2008/06/26/full-implementation-of-a-silverlight-policy-server.aspx</a></li>
</ol>
<h3>Added security?</h3>
<p>The first point is of course a partially valid one. If you have a socket service, you might want to limit who has access to the service in order to prevent unauthorized use of it, or prevent so-called <a href="http://en.wikipedia.org/wiki/Cross-site_request_forgery">Cross-Site Request Forgery (XSRF)</a> attacks.</p>
<p>Basically this is what&#8217;s going on:</p>
<ol>
<li>The user goes to <b>http://server1.example.org/foo.html</b> and is served a HTML page with an embedded Silverlight application</li>
<li>The Silverlight app tries to do a connection against <b>server2.example.org:4502</b></li>
<li>Silverlight intercepts the request and does a connection against <b>server2.silverlight.example.org:943</b> and requests the policy XML</li>
<li>Silverlight checks if the policy file accepts connections to server2.example.org:4502 from server1.example.org/foo.html or server1.example.org or *.example.org or some kind of match</li>
<li>The socket request is then either allowed or disallowed, based on the outcome of if a policy server answered, and gave an XML allowing the request</li>
</ol>
<p>This also is more or less the same process with web service calls or web requests (http/https) from within a Silverlight application, with the change being that the access policy file is then read from <b>http://&lt;same-server-and-port-as-the-app-was-served-from&gt;/ClientAccessPolicy.xml</b> (or the Flash <b>crossdomain.xml</b> file).</p>
<p><em>However</em>, the limitation of what services Silverlight applications are able to call is implemented in the Silverlight plugin itself! If you make an external application (i.e. not in Silverlight) in &lt;your favorite programming language&gt; that does socket, http/https or web service calls against these services, these are of course not checked against the access policy files first.</p>
<p>In other words: <b>It leaves these services wide open to any other non-restricted applications doing calls against them. This only protects against XSRF attacks, and nothing else.</b></p>
<p>For the services to be really secure and limit requests, these access checks need to be implemented in the socket services or in the web services etc themselves. You simply cannot rely on that some policy file has been checked in advance. Of course, in a socket server you can&#8217;t figure out which web page the application originated from* &#8211; only what remote IP and port the caller has &#8211; so the policy files do still make a little bit of sense there. (* You could maybe record the IP address in an ASPX page serving the Silverlight app and do something smart there and check this again in the socket)</p>
<h3>&#8220;A server hosting a socket server is not likely to also run a web server&#8221;</h3>
<p>Now, I don&#8217;t know where this idea came from, or what the reasoning behind it was. My reactions are:</p>
<ol>
<li>Why not also do a request against and HTTP service on the same server, <i>in case</i> there is a web server running there already?</li>
<li>Why not allow the policy server port to be configurable? If someone is already running a socket server there in the 4502-4534 range, surely they will be able to set up a service running on port 943 also. (Yes, some OSes limit listening sockets below port 1024 or 4096 to the root/administrator user, but how likely is that?). Also, it&#8217;s not like this will be directly insecure either, as the requesting client can&#8217;t affect which socket servers are running on the remote server anyhow, AND the policy file needs to be checked. I guess one argument could be that this allows for an administrator to manage what goes on, instead of permitting the individual socket server developers to do that.</li>
<li>The policy file is a standard XML file. It is served by a client connecting to a service, issuing a request, and getting the file back. Does this sound <em>vaguely familiar</em> with another, very common protocol? Why insist on creating a new, custom protocol for this, instead of just basing this on HTTP?</b> (see #1)</li>
</ol>
<p>(Regarding #1, this makes me think of another weird decision: leaving out double-click mouse events or mouse-wheel support just because some interfaces might not have anything equivalent. It’s like limiting the screen resolution to 640×480 just in case some users don’t have a monitor capable of a higher resolution, or leaving out mouse support all-together in case some devices might only have keyboard, and no joystick/mouse/touch screen etc. I don&#8217;t get it &#8212; it reduces the user experience at the cost of a hypothetical uncommon scenario)</p>
<h3>Firewalls</h3>
<p>Most non-standard ports will normally be blocked by most &#8220;secure&#8221; firewall settings, and if you&#8217;re behind a corporate firewall, chances are you&#8217;ll experience even more restrictive policies with only a very few ports being open, e.g. port 80 and 443 for http/https.</p>
<p>Adding both a limit of a policy server running on port 943, AND the request being limited to ports 4502-4534 will make this virtually impossible to get to work in most corporate settings, and also other restrictive firewall setups.</p>
<p>It can be argued in reverse also; enforcing this range makes it easier to standardize the port range for access lists. Yes, but; from my experience with firewall administrators and IT departments, they are pretty sensitive about what they will put into their rules. They will most likely only open up the range to a select destination IP or range, and then they could just as well have done that for another port range. Opening up 4502-4534 to <i>all</i> target destinations is not likely to happen.</p>
<p>The common work-around for this problem, is for people to just set up e.g. a non-HTTP service on a the common HTTP port, or something similar. As long as the firewall isn&#8217;t inspecting the traffic and doing protocol analysis, this usually works fine. If you have packet inspection, you&#8217;ll probably be screwed anyhow.</p>
<p>Secondly, it limits calls against standard services, such as chat servers, web servers, ftp servers, etc since these do not typically run in the 4502-4534 range, but usually have their own defined ports. If you want to be able to connect to such services, you now need to either reconfigure them to use this port range, or write a proxy server that proxies/tunnels connections and traffic to the correct ports.</p>
<h3>My conclusion</h3>
<p>My conclusion to this, is that Microsoft weighed the security aspects of this to be much more imporant that offering developers flexibility and possibilities, a choice I can clearly understand and respect. However, in that case I think they really outdid themselves in adding obstacles.</p>
<p>Or; they just didn&#8217;t carefully think this through before rushing out SL2-RTW.. (because let&#8217;s admit it; one RC, ~2 weeks, hardly any changes?)</p>
<p>What I feel would have sufficed:</p>
<ol>
<li>Access policy file must be present either on either a provided port (default 943 if they insist), or on http/https on the same server.</li>
<li>Use something equivalent to HTTP instead of that custom protocol. It could perfectly well be VERY limited (&#8220;GET /ClientAccessPolicy.xml\n\n&#8221; + dummy headers + XML response).</li>
<li>No port range restriction, other than what is enforced through the access policy file. (Or at least offer the possibility of requesting &#8220;elevated privileges&#8221; from the user in form of a dialog or something for using non-SL-range ports, e.g. like Java does).</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://spoox.org/wp/2008/11/07/silverlight-and-socket-support-what-were-they-thinking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Session ShortCuts 1.0.1 Released</title>
		<link>http://spoox.org/wp/2008/06/19/session-shortcuts-101-released/</link>
		<comments>http://spoox.org/wp/2008/06/19/session-shortcuts-101-released/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 12:49:50 +0000</pubDate>
		<dc:creator>Rune Bjerke</dc:creator>
				<category><![CDATA[SSC]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://spoox.org/wp/2008/06/19/session-shortcuts-101-released/</guid>
		<description><![CDATA[Session ShortCuts 1.0.1 (SSC) is now available for download. If anyone wonders what happened with 1.0.0, I thought I had announced that, but apparently I didn&#8217;t. Oh well.. This release should be of particular interest for those running Vista.
1.0.1 &#8211; 2008-06-11

Fixed: Vista bugfix: Menu items would be missing for other than the first application in [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://spoox.org/ssc">Session ShortCuts</a> 1.0.1 (SSC) is now available for <a href="http://spoox.org/ssc#dl">download</a>. If anyone wonders what happened with 1.0.0, I thought I had announced that, but apparently I didn&#8217;t. Oh well.. This release should be of particular interest for those running Vista.</p>
<p><strong>1.0.1 &#8211; 2008-06-11</strong></p>
<ol>
<li>Fixed: Vista bugfix: Menu items would be missing for other than the first application in the list. Should now be fixed.
<li>Changed: Internet Explorer: Apparently this works for more than 6.x, so the &#8220;6.x&#8221; suffix text was removed.
</ol>
<p><strong>1.0.0 &#8211; 2008-03-27</strong></p>
<ol>
<li>Added: Support for WinSCP4.1 session folder structure
<li>Fixed: FlashFXP: Now correctly restores regular minimized (not to tray) windows
<li>Fixed: FlashFXP: Understands how to figure out where data is stored in v3.4 and v3.6
<li>Fixed: FlashFXP: Recognizes v3.6 windows correctly
<li>Virtually the same as RC2, which proved stable (no complaints so far)
</ol>
<p><strong>Update</strong> DOH! If you already downloaded 1.0.1 prior to 2008/06/19 16:30 CET, please get it again. I included a build of the debuglogger.dll file that writes a whole lot of debug text to disk. Sorry!</p>
]]></content:encoded>
			<wfw:commentRss>http://spoox.org/wp/2008/06/19/session-shortcuts-101-released/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>New version on Unpacker</title>
		<link>http://spoox.org/wp/2007/11/22/new-version-on-unpacker/</link>
		<comments>http://spoox.org/wp/2007/11/22/new-version-on-unpacker/#comments</comments>
		<pubDate>Thu, 22 Nov 2007 22:45:42 +0000</pubDate>
		<dc:creator>Rune Bjerke</dc:creator>
				<category><![CDATA[Unpacker]]></category>

		<guid isPermaLink="false">http://spoox.org/wp/2007/11/22/new-version-on-unpacker/</guid>
		<description><![CDATA[New version of Unpacker with a few changes/fixes/additions:

&#62;4gb files now show more correct progress bar and estimated time
Strips readonly file attributes before moving files
Ability to add archives found during unpacking to job queue
Option of using ctrl+drag (copy) to add directories recursively
&#8220;Extract all&#8221; menu command / toolbar button
Ability to reorder jobs list

Update 2007-11-26:
Some more features:

Added ability [...]]]></description>
			<content:encoded><![CDATA[<p>New version of <a href="/wp/software/unpacker/">Unpacker</a> with a few changes/fixes/additions:</p>
<ol>
<li>&gt;4gb files now show more correct progress bar and estimated time</li>
<li>Strips readonly file attributes before moving files</li>
<li>Ability to add archives found during unpacking to job queue</li>
<li>Option of using ctrl+drag (copy) to add directories recursively</li>
<li>&#8220;Extract all&#8221; menu command / toolbar button</li>
<li>Ability to reorder jobs list</li>
</ol>
<p><strong>Update 2007-11-26:</strong><br />
Some more features:</p>
<ol>
<li>Added ability to store a list of favorite folders</li>
<li>Added option for saving window size</li>
<li>Prevents files already in queue from being added</li>
</ol>
<p><strong>Update 2007-12-05:</strong><br />
More features!</p>
<ol>
<li>Added &#8220;Explore Selected Folders&#8221; to favorite folders context menu</li>
<li>Added &#8220;Open in Explorer&#8221; and &#8220;Shell Open&#8221; options to archives context menu</li>
<li>Bugfix: The first folder of the favorite folders was not being added</li>
<li>Bugfix: &#8220;Remove&#8221; button was broken in 1.2.0.17</li>
<li>Bugfix: Does not assume *.001 file as a RAR archive (checks header)</li>
<li>Added: Optional PAR2 verification and repair, using <a href="http://www.jongma.org/par2lib/">PAR2Lib</a></li>
<li>Updated to 0.7 version of <a href="http://www.jongma.org/par2lib/">PAR2Lib</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://spoox.org/wp/2007/11/22/new-version-on-unpacker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Projects</title>
		<link>http://spoox.org/wp/2007/09/10/new-projects/</link>
		<comments>http://spoox.org/wp/2007/09/10/new-projects/#comments</comments>
		<pubDate>Mon, 10 Sep 2007 19:20:31 +0000</pubDate>
		<dc:creator>Rune Bjerke</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://spoox.org/wp/2007/09/10/new-projects/</guid>
		<description><![CDATA[Added some information on a couple of new projects I&#8217;ve been playing around with:

Cropper.WordPress
An extension for the screen capture utility Cropper that lets you publish captured images to WordPress blogs.&#160;
Removable Media Batch Copier
A simple application to ease the process of copying large amounts of removable media (CDs, DVDs) onto e.g. a harddrive.

Not much information on [...]]]></description>
			<content:encoded><![CDATA[<p>Added some information on a couple of new projects I&#8217;ve been playing around with:</p>
<dl>
<dt><a href="http://spoox.org/wp/software/cropperwordpress/">Cropper.WordPress</a></dt>
<dd>An extension for the screen capture utility <a href="http://blogs.geekdojo.net/brian/articles/Cropper.aspx">Cropper</a> that lets you publish captured images to WordPress blogs.<br />&nbsp;</dd>
<dt><a href="http://spoox.org/wp/software/removable-media-batch-copier/">Removable Media Batch Copier</a></dt>
<dd>A simple application to ease the process of copying large amounts of removable media (CDs, DVDs) onto e.g. a harddrive.</dd>
</dl>
<p>Not much information on them published at the moment &#8211; neither are downloads available &#8211; but.. Coming soon!</p>
]]></content:encoded>
			<wfw:commentRss>http://spoox.org/wp/2007/09/10/new-projects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Session ShortCuts 1.0 RC2</title>
		<link>http://spoox.org/wp/2007/06/20/session-shortcuts-10-rc2/</link>
		<comments>http://spoox.org/wp/2007/06/20/session-shortcuts-10-rc2/#comments</comments>
		<pubDate>Wed, 20 Jun 2007 13:32:45 +0000</pubDate>
		<dc:creator>Rune Bjerke</dc:creator>
				<category><![CDATA[SSC]]></category>

		<guid isPermaLink="false">http://spoox.org/wp/2007/06/20/session-shortcuts-10-rc2/</guid>
		<description><![CDATA[Session ShortCuts 1.0 RC2 is now available for download.
It&#8217;s a small update which fixes the long over-due missing buttons in the configuration dialog when Windows is set in &#8220;Large fonts&#8221; mode, along with a couple of bugfixes in the Remote Desktop functionality. Additionally, support for Windows console windows (cmd.exe / command line) has been added.
Update: [...]]]></description>
			<content:encoded><![CDATA[<p>Session ShortCuts 1.0 RC2 is <a href="http://spoox.org/wp/software/ssc/">now available for download</a>.</p>
<p>It&#8217;s a small update which fixes the long over-due missing buttons in the configuration dialog when Windows is set in &#8220;Large fonts&#8221; mode, along with a couple of bugfixes in the Remote Desktop functionality. Additionally, support for Windows console windows (cmd.exe / command line) has been added.</p>
<p>Update: apparently the Microsoft Windows Explorer and Visual Studio plugins made their way into this release also.. Wasn&#8217;t the meaning, but they should work, however any bug reports etc are more than welcome <img src='http://spoox.org/wp/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://spoox.org/wp/2007/06/20/session-shortcuts-10-rc2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>A few ways of &#8220;watermarking&#8221; mp3 files</title>
		<link>http://spoox.org/wp/2007/02/12/a-few-ways-of-watermarking-mp3-files/</link>
		<comments>http://spoox.org/wp/2007/02/12/a-few-ways-of-watermarking-mp3-files/#comments</comments>
		<pubDate>Mon, 12 Feb 2007 05:55:48 +0000</pubDate>
		<dc:creator>Rune Bjerke</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://spoox.org/wp/?p=32</guid>
		<description><![CDATA[Recently there has been talk by some music labels that they will be releasing non-DRMed mp3 files, followed by updates that they are going to &#8220;watermark&#8221; these files.
I choose to write &#8220;watermark&#8221; quoted, as this is really more tagging than watermarking, because I doubt they will be applying on-the-fly digital audio processing to watermark, followed [...]]]></description>
			<content:encoded><![CDATA[<p>Recently there has been talk by some music labels that they will be releasing non-DRMed mp3 files, followed by updates that they are going to &#8220;watermark&#8221; these files.</p>
<p>I choose to write &#8220;watermark&#8221; quoted, as this is really more tagging than watermarking, because I doubt they will be applying on-the-fly digital audio processing to watermark, followed by encoding each mp3 specifically for each customer. Let&#8217;s assume they&#8217;re going to just modify stocks of ready-encoded mp3s.</p>
<p><span id="more-32"></span></p>
<p><strong>MP3 file format layout</strong></p>
<p>Before continuing it&#8217;s important to understand how MP3 files are stored, so let&#8217;s take a closer look at how they are structured internally:</p>
<p>ID3v2 tag  (optional)<br />
LAME header  (optional)<br />
MPEG frame 1<br />
MPEG frame 2<br />
..<br />
MPEG frame N<br />
ID3v1/ID3v1.1 tag  (optional)</p>
<p><strong>ID3 tags</strong></p>
<p>The <em>ID3 tags</em> contain various metadata about the file, which is normally either entered automatically by the encoder or edited manually by the person encoding the files. Two standards exist:</p>
<p><a href="http://www.id3.org/ID3v1">ID3v1</a> &#8211; which later got a slight modification and became ID3v1.1 &#8211; is a 128-byte fixed length structure located at the end of files.</p>
<p><a href="http://www.id3.org">ID3v2</a> which is a more dynamic structure, typically located at the beginning of the file. This allows for a plethoria of different information to be stored, with several extensions being made all the time. (e.g. Lyrics3 which allows the lyrics transcript of a song to be embedded into the file)</p>
<p><strong>MPEG frames</strong></p>
<p><em>MPEG frames</em> are small chunks of audio data. The size of these frames will depend on the bitrate used in encoding the file, but each header will be prefixed with a 4 byte <em>frame header</em>.</p>
<p>These headers contain information needed to interpret and make use of the encoded data (e.g. which MPEG encoding method is used, which bitrate the frame is encoded at, the sampling frequency etc) but also non-functional data such as a &#8220;protection bit&#8221;, &#8220;private bit&#8221;, &#8220;copyright bit&#8221;, &#8220;original bit&#8221; etc.</p>
<p>For a full description of the MPEG headers see e.g. this article at <a href="http://www.mp3-tech.org/programmer/frame_header.html">mp3-tech.org</a> or search the web.<a href="http://www.mp3-tech.org/programmer/frame_header.html"><br />
</a></p>
<p><strong>LAME header</strong></p>
<p>Some encoders, such as <a href="http://lame.sourceforge.net/index.php">LAME</a> (and Xing), add frames that appear as regular MPEG frames, but that actually contain additional meta data about the encoding parameters used etc.</p>
<p><strong>SO WHERE DOES THIS LEAD US? </strong></p>
<p>So where does this lead us? Let&#8217;s have a look at a few (but probably not all) ways of tagging mp3 files with some kind of watermarks. (with a varying depth of detail)</p>
<p><strong>1. Adding out-of-stream data to the MPEG stream</strong></p>
<p>Because MPEG frame headers contain a sync marker so that a player can check if the next location it is about to read is a valid MPEG frame, this means that you can place out-of-stream data in between frames.</p>
<p>This will just make players skip a few bytes until it finds a valid MPEG frame header sync marker, but other applications can choose to store custom data in here.</p>
<p><strong>2. Using the unused MPEG frame header bits</strong></p>
<p>As mentioned above, MPEG frame headers Bits like the &#8220;original bit&#8221;, &#8220;private bit&#8221; etc are not of much use to players, so for each frame of the MP3 file you can store up to several bits of information.</p>
<p>Spread across the entire file, depending on the length of the song, this would allow for quite a lot of data which can be used as tracking markers once read by a special program.</p>
<p><strong>3. Using the IDv1 tag</strong></p>
<p>I find this not very likely, but as a method you could choose to utilize the &#8220;comment&#8221; field of the ID3v1 header to add some sort of numeric ID etc.</p>
<p><strong>4. Using the ID3v2 tag</strong></p>
<p>There&#8217;s primarily two methods here:</p>
<p>a) Using an unused or little-used, or even creating a custom ID3v2 block</p>
<p>b) Using the unused padding space of the ID3v2 tag</p>
<p><strong>5. Constructing special MPEG frames like the LAME header</strong></p>
<p>You could divide this into two methods also:</p>
<p>a) Frames using one of the undefined or unallowed bit combinations of a frame header to mark it as invalid, so that the player will skip it. Then custom data can be stored in the actual data portion of the frame. (I <em>think</em> this is what LAME does)</p>
<p>b) Special valid encoded frames consising of an audio watermark (e.g. some audio wave) could be added. This would probably play back as a short click or noise, though, so it might not end up sounding too good.</p>
<p><strong>6. Using the MPEG frame header CRC</strong></p>
<p>The encoder can optionally add checksums to each MPEG frame, so the validity of the file can be tested for corrupted frames etc.</p>
<p>Seeing that not many players actually test for this even if it is present, this could be used to insert 2 bytes of data per frame header.</p>
<p>It could be a bit risky doing this, though, should any players actually choose to test the validity of frames against the CRC.</p>
<p><strong>7. Using variations of volume in each MPEG frame</strong></p>
<p>Quite honestly this is beyond what I know too much about, but I know certain tools (e.g. <a href="http://mp3gain.sourceforge.net/">mp3gain</a>) can normalize or change the volume of an mp3 without transcoding (re-encoding), and thus offers a non-destructive way of doing this.</p>
<p>This is based on the fact that data is (I think) stored as floating point values. These values again are stored using a &#8220;sign * mantissa * radix ^ exponent&#8221; format, which means that you can increment or modify these by fixed values back and forth and introduce gradual change with the option of still getting back to the original values (up to a certain level I guess).</p>
<p>Utilizing this, I guess you could somehow introduce short changes in volume from frame to frame that would go by unnoticed by the listener, but through analysis could be detected. E.g. think morse code.</p>
<p>I don&#8217;t know if this would work. Maybe. It&#8217;s just an idea..</p>
<p><strong>CONCLUSION</strong></p>
<p>There&#8217;s a lot of places you can hide information in an MP3 file. However, it does not take more than having 2 different watermarked copies of the same file to figure out where data is being stored.</p>
<p>Of course, one could combine all the methods described above, or even additional ones, but in the end all of this information could be stripped away leaving only the MP3 audio data left.</p>
<p>We&#8217;ll find out soon enough as these files hit the streets..</p>
<p><b>Update</b><br />
Someone pointed out the fact that on-the-fly watermarking and transcoding would be perfectly well possible on smaller ranges of the files, an option I never considered&#8230;..</p>
]]></content:encoded>
			<wfw:commentRss>http://spoox.org/wp/2007/02/12/a-few-ways-of-watermarking-mp3-files/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Session ShortCuts 1.0 RC1</title>
		<link>http://spoox.org/wp/2006/12/28/session-shortcuts-rc1/</link>
		<comments>http://spoox.org/wp/2006/12/28/session-shortcuts-rc1/#comments</comments>
		<pubDate>Thu, 28 Dec 2006 01:40:59 +0000</pubDate>
		<dc:creator>Rune Bjerke</dc:creator>
				<category><![CDATA[SSC]]></category>

		<guid isPermaLink="false">http://spoox.org/wp/?p=30</guid>
		<description><![CDATA[I&#8217;ve finally decided to make a publically available release candidate 1 (RC1) of Session ShortCuts (SSC) 1.0 ! There might be a few quirks still, but I&#8217;ve been using this version myself for quite some time now and it has worked without any noticeable problems.
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve finally decided to make a publically available <a href="http://spoox.org/wp/?page_id=5">release candidate 1 (RC1) of Session ShortCuts (SSC) 1.0</a> ! There might be a few quirks still, but I&#8217;ve been using this version myself for quite some time now and it has worked without any noticeable problems.</p>
]]></content:encoded>
			<wfw:commentRss>http://spoox.org/wp/2006/12/28/session-shortcuts-rc1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
