<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.3" -->
<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/"
	>

<channel>
	<title>Nektra Advanced Computing Blog</title>
	<link>http://blog.nektra.com/main</link>
	<description>Innovation Innovation Innovation</description>
	<pubDate>Fri, 20 Jun 2008 14:23:37 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
	<language>en</language>
			<item>
		<title>Cookiepie for Firefox 3 released</title>
		<link>http://blog.nektra.com/main/2008/06/19/cookiepie-for-firefox-3-released/</link>
		<comments>http://blog.nektra.com/main/2008/06/19/cookiepie-for-firefox-3-released/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 21:00:58 +0000</pubDate>
		<dc:creator>swain</dc:creator>
		
		<category><![CDATA[extensions]]></category>

		<category><![CDATA[firefox]]></category>

		<category><![CDATA[releases]]></category>

		<guid isPermaLink="false">http://blog.nektra.com/main/2008/06/19/cookiepie-for-firefox-3-released/</guid>
		<description><![CDATA[This week Mozilla launched Firefox 3 officially. It was covered in a couple of sites like:

It&#8217;s Firefox 3 world record download day (techcrunch)
A Few Firefox 3 Followups (slashdot)

We have released a new version of Cookiepie firefox extension available for download, and we have a number of features and a long wish list from users that [...]]]></description>
			<content:encoded><![CDATA[<p>This week Mozilla launched Firefox 3 officially. It was covered in a couple of sites like:</p>
<ul>
<li><a href="http://www.techcrunch.com/2008/06/17/its-firefox-3-world-record-download-day-but-im-still-waiting/">It&#8217;s Firefox 3 world record download day</a> (techcrunch)</li>
<li><a href="http://tech.slashdot.org/article.pl?sid=08/06/18/217205&amp;from=rss">A Few Firefox 3 Followups</a> (slashdot)</li>
</ul>
<p>We have released a new version of <a href="http://www.nektra.com/oss/firefox/extensions/cookiepie/">Cookiepie</a> firefox extension <a href="http://www.nektra.com/oss/firefox/extensions/cookiepie/">available for download</a>, and we have a number of features and a long wish list from users that we hope can be introduced in next months. Also we are designing some T-Shirts for our Cookiepie fans! More updates will be notified in the <a href="http://groups.google.com/group/Nektra-CookiePie">Cookiepie mailing list</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nektra.com/main/2008/06/19/cookiepie-for-firefox-3-released/feed/</wfw:commentRss>
		</item>
		<item>
		<title>GoogleToolbar PageRank requests</title>
		<link>http://blog.nektra.com/main/2008/06/17/googletoolbar-pagerank-requests/</link>
		<comments>http://blog.nektra.com/main/2008/06/17/googletoolbar-pagerank-requests/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 16:32:57 +0000</pubDate>
		<dc:creator>pipaman</dc:creator>
		
		<category><![CDATA[examples]]></category>

		<category><![CDATA[products]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://blog.nektra.com/main/2008/06/17/googletoolbar-pagerank-requests/</guid>
		<description><![CDATA[Using our API hooker SpyStudio I wrote a script to intercept http requests done using wininet.dll API coming from a specific module of a process. The script keeps request information (server and url) to display in next calls and let filter requests to a specific server. Its name is httpReport.py and can found in SpyStudio [...]]]></description>
			<content:encoded><![CDATA[<p>Using our API hooker <a href="http://www.nektra.com/products/spystudio/">SpyStudio</a> I wrote a script to intercept http requests done using wininet.dll API coming from a specific module of a process. The script keeps request information (server and url) to display in next calls and let filter requests to a specific server. Its name is httpReport.py and can found in <a href="http://www.nektra.com/products/spystudio/">SpyStudio</a> v1.0.1 distribution.</p>
<p>httpReport navigates the stack in each call to wininet.dll functions to see what module called the hooked function, filtering all modules except the specified. This feature and server name filtering, allow a fine interception.</p>
<p>To use the script keep only one instance of iexplore.exe (the script will only hook the first instance if there are more than one) and type these lines in <a href="http://www.nektra.com/products/spystudio/">SpyStudio</a> python console:</p>
<p>import httpReport<br />
httpReport.startIe(&#8217;toolbarqueries&#8217;, [&#8217;googletoolbar2.dll&#8217;])</p>
<p>The script will display queries done to a server that contains the string &#8216;toolbarqueries&#8217; coming from module &#8216;googletoolbar2.dll&#8217;.</p>
<p>For example, if <a href="http://www.techcrunch.com/">TechCrunch</a> page is inserted in the address bar we get a wininet.dll!InternetConnectA call to &#8216;toolbarqueries.google.co.uk&#8217; server and then a GET request to this url:</p>
<p>/search?client=navclient-auto&amp;googleip=O;64.233.169.147;266&amp;iqrn=ZjbD&amp;orig=0PnmJ&amp;ie=UTF-8&amp;oe=UTF-8&amp;features=Rank:&amp;q=info:http%3a%2f%2fwww%2etechcrunch%2ecom%2f&amp;ch=751153802320</p>
<p>There are some parameters that need more research to be understood but there are some others we can tell something:</p>
<p>googleip: indicates <a href="http://www.google.com/">Google</a> server used for the query</p>
<p>ie: iexplore encoding?</p>
<p>oe: maybe Outlook Express encoding?, only a bad guess</p>
<p>features: what we are asking to the server (here &#8216;Rank&#8217;)</p>
<p>q: encoded url (http%3a%2f%2fwww%2etechcrunch%2ecom%2f = <a href="http://www.techcrunch.com/">http://www.techcrunch.com/</a>)</p>
<p>ch: it looks as a function to the url to prevent other client to do the same requests</p>
<p>Then, wininet.dll!InternetReadFile return the http response:</p>
<p>&#8216;Rank_1:1:8\n&#8217;</p>
<p>that indicates that the page visiting has PageRank 8.</p>
<p>This process is repeated for every page you visit so <a href="http://www.google.com/">Google</a> can collect all the pages browsed by all the users using GoogleToolbar. That&#8217;s why it may be considered as a spyware.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nektra.com/main/2008/06/17/googletoolbar-pagerank-requests/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google Treasure Hunt puzzles are too easy?</title>
		<link>http://blog.nektra.com/main/2008/05/23/google-treasure-hunt-puzzles-are-too-easy/</link>
		<comments>http://blog.nektra.com/main/2008/05/23/google-treasure-hunt-puzzles-are-too-easy/#comments</comments>
		<pubDate>Fri, 23 May 2008 13:10:51 +0000</pubDate>
		<dc:creator>brutuscat</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[opinion]]></category>

		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://blog.nektra.com/main/2008/05/23/google-treasure-hunt-puzzles-are-too-easy/</guid>
		<description><![CDATA[Seems that the Google guys are getting softy. The last two questions of the Google Treasure Hunt 2008 were easily solved.
The Question #1 is about paths. We have a robot that can move down or right, in a n x m grid. So how many possible paths exists, from the top left to the top right?
It [...]]]></description>
			<content:encoded><![CDATA[<p>Seems that the Google guys are getting softy. The last two questions of the <a href="http://treasurehunt.appspot.com/" title="google treasure hunt 2008">Google Treasure Hunt 2008</a> were easily solved.</p>
<p>The Question #1 is about paths. We have a robot that can move down or right, in a n x m grid. So how many possible paths exists, from the top left to the top right?</p>
<p>It gets solved just searching in Google for <a href="http://www.google.com/search?q=grid+path+right+down">&#8220;grid path right down&#8221;</a> from there you will get <a href="http://www.joaoff.com/2008/01/20/a-square-grid-path-problem/" title="square grid path problem">the equation </a>that you must run on any language that has Big Integer implementations, since involves the calculations factorial.</p>
<p>Example of our solution for the first puzzle in Java:</p>
<pre class="syntax-highlight:java">
BigInteger dividend = factorial( (rows-1)+(columns-1) );
BigInteger divisor = factorial(rows-1).multiply(factorial(columns -1));
System.out.println(dividend.divide(divisor));
</pre>
<p>The Question #2 seems to be even easier. It involves to transverse a directory tree, filtering the files that verifies 2 conditions based on the path string and the extension string (like .txt or .xml). Then reading some specific line. All files are text files this simplifies then things even more. Nothing hard to any programmer.</p>
<p>Snippet of our solution for the second puzzle in PHP:</p>
<pre class="syntax-highlight:php">
// Setting where's the Google Treasure Hunt Directory
$dirbase = 'GoogleTreasureHunt08_11336769377172459175';

// Creating and loading the directory Tree
$tree = new Mytree($dirbase);
$tree-&gt;load();

// Getting the leaf Files
$leafs = $tree-&gt;get_leafs();

// Filtering to files that satisfies the conditions
$cond1 = array_filter ($leafs, filter_bycond1);
$cond2 = array_filter ($leafs, filter_bycond2);

// Doing the sums at the right line number
$sum1 = array_reduce($cond1, create_function('$v, $node',
             '$v = ($v == null) ? 0 : $v;'.
             '$v += (int)read_line($node-&gt;data, 5);'.
            'return $v;'));
$sum2 = array_reduce($cond2, create_function('$v, $node',
            '$v = ($v == null) ? 0 : $v;'.
            '$v += (int)read_line($node-&gt;data, 5);'.
            'return $v;'));

echo $sum1, '&lt;br&gt;';
echo $sum2, '&lt;br&gt;';

// Obtaining result
echo $sum1 * $sum2;
</pre>
<p>So as you see, there&#8217;s no complication at all. I would expect some challenge when Google uses the &#8220;<a href="http://en.wikipedia.org/wiki/Puzzle" title="Puzzle">Puzzle</a>&#8221; word. Maybe they aren&#8217;t what they were? I don&#8217;t know, but I will be expecting some real challenge to solve :).</p>
<p>Robot solution:  <a href="http://blog.nektra.com/main/wp-content/uploads/2008/05/question1.java" title="GTH Q1 Java solution">GTH Q1 Java solution</a></p>
<p>File transeversing solutino: <a href="http://blog.nektra.com/main/wp-content/uploads/2008/05/question2.php" title="GTH Q2 PHP solution">GTH Q2 PHP solution</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nektra.com/main/2008/05/23/google-treasure-hunt-puzzles-are-too-easy/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Data portability is good, but Late 2.0</title>
		<link>http://blog.nektra.com/main/2008/05/09/data-portability-is-good-but-late-20/</link>
		<comments>http://blog.nektra.com/main/2008/05/09/data-portability-is-good-but-late-20/#comments</comments>
		<pubDate>Fri, 09 May 2008 16:53:14 +0000</pubDate>
		<dc:creator>swain</dc:creator>
		
		<category><![CDATA[opinion]]></category>

		<guid isPermaLink="false">http://blog.nektra.com/main/2008/05/09/data-portability-is-good-but-late-20/</guid>
		<description><![CDATA[Back in 2001 we wrote an arcane simple perl script just for fun. The script gave you the freedom to export IMDB movies from your ranking to your web page. Now in 2008 and with business goals in mind, we need to export/interact with information from sites like LinkedIn and add it to our handcrafted [...]]]></description>
			<content:encoded><![CDATA[<p>Back in 2001 we wrote an arcane simple perl script just for fun. The script gave you the freedom to export <a href="http://www.imdb.com">IMDB</a> movies from your ranking to your web page. Now in 2008 and with business goals in mind, we need to export/interact with information from sites like <a href="http://www.linkedin.com">LinkedIn</a> and add it to our handcrafted <a href="http://en.wikipedia.org/wiki/Mashup_(web_application_hybrid)">mashup</a> pipeline or our <a href="http://www.vtiger.com/">CRM</a>, but it&#8217;s not possible without being blocked, see <a href="http://simile.mit.edu/wiki/LinkedIn_Scraper">LinkedIn Scraper</a> for more information.</p>
<p>Data portability is a must (sometimes an API is enough) but the &quot;official&quot; <a href="http://www.techcrunch.com/tag/dataportability/">data portability</a> innitiative came very late:</p>
<blockquote><p>&gt; whois dataportability.org</p>
<p>&#8230;</p>
<p>Domain ID:D149678191-LROR     <br /><strong>Domain Name:DATAPORTABILITY.ORG       <br /><u>Created On:07-Nov-2007 04:21:39 UTC</u></strong>      <br />Last Updated On:07-Jan-2008 03:49:01 UTC      <br />Expiration Date:07-Nov-2008 04:21:39 UTC</p>
<p>&#8230;</p>
</blockquote>
<p><font face="Verdana" color="#444444">On the other side, sites like LinkedIn increase their business risks if they share too much data and become easily replaceable. So the question is how to deal with this conflict of interest? An obvious business model&#160; is what SalesForce does with <a href="http://www.salesforce.com/appexchange/">AppExchange</a> and Facebook does with <a href="http://www.facebook.com/apps/">Facebook applications</a>: Run your applications within their [eco]system.</font></p>
<p><font face="Verdana" color="#444444">So now in 2008 <a href="http://blog.linkedin.com/blog/api/">LinkedIn has been lazy</a> to balance between being open or not (even putting a public price to their data sharing policies), but the data portability &quot;lobby&quot; woke up too late, or Late 2.0.</font></p>
<p><font face="Verdana" color="#444444">&#160;</font></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nektra.com/main/2008/05/09/data-portability-is-good-but-late-20/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to customize the WebBrowser context menu in C#</title>
		<link>http://blog.nektra.com/main/2008/04/24/how-to-customize-the-webbrowser-context-menu-in-c/</link>
		<comments>http://blog.nektra.com/main/2008/04/24/how-to-customize-the-webbrowser-context-menu-in-c/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 14:16:28 +0000</pubDate>
		<dc:creator>lsanjurjo</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://blog.nektra.com/main/2008/04/24/how-to-customize-the-webbrowser-context-menu-in-c/</guid>
		<description><![CDATA[It is hard to find on the internet a detailed and complete solution for modifying the contextual menu due to several reasons.
One of these reasons is that many of the implementations found use the System.Windows.Forms.ContextMenu; you can see one of them here:
Component-Based Development with Visual C#
In these kinds of examples the system menu is not [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">It is hard to find on the internet a detailed and complete solution for modifying the contextual menu due to several reasons.</p>
<p align="justify">One of these reasons is that many of the implementations found use the System.Windows.Forms.ContextMenu; you can see one of them here:</p>
<p><a href="http://www.codeproject.com/KB/books/0764549146_8.aspx" target="_blank">Component-Based Development with Visual C#</a></p>
<p align="justify">In these kinds of examples the system menu is not invoked from the ShowContextMenu, instead a user customized menu is. This menu does not allow modifying it as we need.</p>
<p align="justify">Another reason is due to the programming language. In the MSDN website a C++ implementation of the ShowContextMenu can be found:</p>
<p><a href="http://msdn2.microsoft.com/en-us/library/aa770042(VS.85).aspx" target="_blank">WebBrowser Customization (Part 2)</a></p>
<p align="justify">The problem is that when we want to implement it in C# difficulties such as not being able to call system functions, use the same data types, and many others arise.</p>
<p align="justify">Maybe the biggest difficulty can be found when trying to marshall the <strong>CComVariant</strong> class. A huge variety of solutions can be found on the internet, but they usually do not work (at least in the case mentioned above). Here are some examples of them:</p>
<p><a href="http://www.dotnet247.com/247reference/msgs/1/7607.aspx" target="_blank">VB Variant Equivalent in C#</a></p>
<p><a href="http://bytes.com/forum/thread214087.html" target="_blank">Object To Variant</a></p>
<p><a href="http://www.c-sharpcorner.com/Forums/ShowMessages.aspx?ThreadID=32531" target="_blank">What is the equivalent of Variant data type in C#.NET?</a></p>
<p>Using the int[] type with size 3 or bigger is one of the ways of solving this.</p>
<div class="csharpcode">
<pre class="alt"><span class="lnum">   1:  </span><span class="kwrd">int</span>[] variantVar = <span class="kwrd">new</span> <span class="kwrd">int</span>[3];</pre>
</div>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>The <strong>VARIANT</strong> type can be seen in this <strong>MSDN</strong> webpage:</p>
<p><a href="http://msdn2.microsoft.com/en-us/library/ms221627(VS.71).aspx" target="_blank">VARIANT and VARIANTARG</a></p>
<p>Once we solved this problem, we can use the IOleCommandTarget function Exec:</p>
<div class="csharpcode">
<pre class="alt"><span class="lnum">   1:  </span>[PreserveSig]</pre>
<pre><span class="lnum">   2:  </span><span class="kwrd">int</span> Exec(</pre>
<pre class="alt"><span class="lnum">   3:  </span>    <span class="kwrd">ref</span> Guid pguidCmdGroup,</pre>
<pre><span class="lnum">   4:  </span>    <span class="kwrd">int</span> nCmdID,</pre>
<pre class="alt"><span class="lnum">   5:  </span>    <span class="kwrd">int</span> nCmdExecOpt,</pre>
<pre><span class="lnum">   6:  </span>    <span class="rem">// we need to have this an array because callers </span></pre>
<pre class="alt"><span class="lnum">   7:  </span>    <span class="rem">// need to be able to specify NULL or VT_NULL</span></pre>
<pre><span class="lnum">   8:  </span>    [In, MarshalAs(UnmanagedType.LPArray)] <span class="kwrd">int</span>[] pvaIn,</pre>
<pre class="alt"><span class="lnum">   9:  </span>    [Out, MarshalAs(UnmanagedType.LPArray)] <span class="kwrd">int</span>[] pvaOut</pre>
<pre><span class="lnum">  10:  </span>    );</pre>
</div>
<p>When calling Exec for the first time, we get the handle for the language submenu. We obtain it in <strong>variantVar</strong> variable:</p>
<div class="csharpcode">
<pre class="alt"><span class="lnum">   1:  </span><span class="kwrd">int</span>[] nullVariantVar = <span class="kwrd">null</span>;</pre>
<pre><span class="lnum">   2:  </span><span class="kwrd">int</span>[] variantVar = <span class="kwrd">new</span> <span class="kwrd">int</span>[3];</pre>
<pre class="alt"><span class="lnum">   3:  </span>&#160;</pre>
<pre><span class="lnum">   4:  </span>spCT.Exec(</pre>
<pre class="alt"><span class="lnum">   5:  </span>            <span class="kwrd">ref</span> CGID_ShellDocView, </pre>
<pre><span class="lnum">   6:  </span>            SHDVID_GETMIMECSETMENU, </pre>
<pre class="alt"><span class="lnum">   7:  </span>            0, </pre>
<pre><span class="lnum">   8:  </span>            nullVariantVar, </pre>
<pre class="alt"><span class="lnum">   9:  </span>            variantVar</pre>
<pre><span class="lnum">  10:  </span>            );</pre>
</div>
<p align="justify">Now we must parse <strong>variantVar</strong> in order to get the result (the handle for the language submenu). The first value that we get is a <strong>VARTYPE</strong> type, which indicates the kind of variable that we will find next. Then there is a reserved spot of three <strong>WORD</strong> long, followed by the value we are looking for. So the handle for the submenu is on the second place of the array: </p>
<div class="csharpcode">
<pre class="alt"><span class="lnum">   1:  </span>IntPtr handleSubMenu = <span class="kwrd">new</span> IntPtr(variantVar[2]);</pre>
</div>
<p align="justify">We can replace passing the <strong>CComVariant</strong> argument to the function by creating a new variable shown in the code below and then call again Exec:</p>
<div class="csharpcode">
<pre class="alt"><span class="lnum">   1:  </span>variantVarIn[0] = VT_INT_PTR;</pre>
<pre><span class="lnum">   2:  </span><span class="rem">// Remember that variantVarIn[1] is reserved</span></pre>
<pre class="alt"><span class="lnum">   3:  </span>variantVarIn[2] = handleMenu.ToInt32();</pre>
<pre><span class="lnum">   4:  </span>&#160;</pre>
<pre class="alt"><span class="lnum">   5:  </span>variantVarOut[0] = VT_I4;</pre>
<pre><span class="lnum">   6:  </span><span class="rem">// Remember that variantVarOut[1] is reserved</span></pre>
<pre class="alt"><span class="lnum">   7:  </span>variantVarOut[2] = dwID;</pre>
<pre><span class="lnum">   8:  </span>&#160;</pre>
<pre class="alt"><span class="lnum">   9:  </span><span class="rem">// Insert Shortcut Menu Extensions from registry.</span></pre>
<pre><span class="lnum">  10:  </span>spCT.Exec(</pre>
<pre class="alt"><span class="lnum">  11:  </span>            <span class="kwrd">ref</span> CGID_ShellDocView, </pre>
<pre><span class="lnum">  12:  </span>            SHDVID_ADDMENUEXTENSIONS, </pre>
<pre class="alt"><span class="lnum">  13:  </span>            0, </pre>
<pre><span class="lnum">  14:  </span>            variantVarIn, </pre>
<pre class="alt"><span class="lnum">  15:  </span>            variantVarOut</pre>
<pre><span class="lnum">  16:  </span>            );</pre>
</div>
<p align="justify">We obtain the complete context menu as a result of the instructions shown above. This menu can be modified as much as we desire. Using this, you can add or remove menu items and also their functionality. For example you can call methods implemented in your project from the desired menu item.</p>
<p align="justify">Now you can build a customized browser using C# !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nektra.com/main/2008/04/24/how-to-customize-the-webbrowser-context-menu-in-c/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SpyStudio 1.0.0b released!</title>
		<link>http://blog.nektra.com/main/2008/02/27/spystudio-100b-released/</link>
		<comments>http://blog.nektra.com/main/2008/02/27/spystudio-100b-released/#comments</comments>
		<pubDate>Wed, 27 Feb 2008 17:09:50 +0000</pubDate>
		<dc:creator>Fede</dc:creator>
		
		<category><![CDATA[products]]></category>

		<category><![CDATA[releases]]></category>

		<guid isPermaLink="false">http://blog.nektra.com/main/2008/02/27/spystudio-100b-released/</guid>
		<description><![CDATA[Introduction to SpyStudio:
SpyStudio is a powerful application that simplifies the code execution interception operations, also called &#8220;hooking&#8221;. Users can now easily monitor and gain control over processes in their systems, to really know what is happening in the Operating System and it&#8217;s applications.
With SpyStudio you can monitor and intercept API calls at any time, change its parameters, [...]]]></description>
			<content:encoded><![CDATA[<h3>Introduction to SpyStudio:</h3>
<blockquote><p>SpyStudio is a powerful application that simplifies the code execution interception operations, also called &#8220;hooking&#8221;. Users can now easily monitor and gain control over processes in their systems, to really know what is happening in the Operating System and it&#8217;s applications.</p>
<p>With SpyStudio you can monitor and intercept API calls at any time, change its parameters, and resume execution.</p>
<p>SpyStudio uses the Deviare API technology to intercept functions&#8217; calls, this allows the user to monitor and hook applications in real time.<br />
Deviare is a very complex technology, that can be used through the most simple interfaces.</p>
<p>This useful application provides the ability to break process execution and inspect the function&#8217;s parameters at any level, and even change its values.</p></blockquote>
<h4>Here is a screenshot of the main window of SpyStudio v1.0.0b, with the new Python console:</h4>
<p><a HREF="http://nektra.com/i/spystudio_main_800.png" TARGET="_blank" TITLE="SpyStudio v1.0.0b Main Window"><img ALIGN="middle" HEIGHT="338" WIDTH="450" BORDER="0" ALT="SpyStudio v1.0.0b Main Window" SRC="http://nektra.com/i/spystudio_main_450.png" /></a></p>
<h4>Latest improvements on the 1.0.0b version:</h4>
<ul>
<li>New Python tabbed console allows to handle hooks!</li>
<li>	Python scripts can be loaded from files.</li>
<li>	An initial Python script can be executed on every tab opened.</li>
<li>	New Deviare Database Editor allows to expand the modules and functions database!</li>
<li>	Breakpoint params browser: The return value and the error code are now editable</li>
<li>	Now SpyStudio can run with SeDebugPrivilege enabled or disabled.</li>
<li>	Processes monitoring options are now combinable.</li>
<li>	Select all (Ctrl + A) and Copy (Ctrl + C) options are now available for the output window.</li>
<li>	&#8216;Filters&#8217; concept changed to &#8216;Actions&#8217;.</li>
<li>	Database expanded: wininet.dll added and winternl.h functions of ntdll.dll added.</li>
<li>	Fixed: Changing a parameter on the params browser made SpyStudio to crash.</li>
<li>	Fixed: Trying to hook a function that was not in the database made SpyStudio to crash when closing.</li>
<li>	Fixed: Changing the &#8216;Default hook mode&#8217; option was not reflected on the output.</li>
</ul>
<p>We are glad about how SpyStudio is evolving and we expect users&#8217; reports, comments and suggestions to keep  it growing!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nektra.com/main/2008/02/27/spystudio-100b-released/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Windows Live Messenger Addons Internals</title>
		<link>http://blog.nektra.com/main/2008/02/12/windows-live-messenger-internals/</link>
		<comments>http://blog.nektra.com/main/2008/02/12/windows-live-messenger-internals/#comments</comments>
		<pubDate>Tue, 12 Feb 2008 20:30:00 +0000</pubDate>
		<dc:creator>Ismael</dc:creator>
		
		<category><![CDATA[programming]]></category>

		<category><![CDATA[deviare]]></category>

		<category><![CDATA[hooks]]></category>

		<category><![CDATA[messenger]]></category>

		<category><![CDATA[msn]]></category>

		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://blog.nektra.com/main/2008/02/12/windows-live-messenger-internals/</guid>
		<description><![CDATA[Introduction
In this article we analyze Windows Live Messenger 8.5, that is the last version of MSN Messenger.Windows Live Messenger does provide a plugin api (Messenger, Add-ins, and more&#8230;) but the features exposed are a very limited subset. Also, this plugin support is not enabled by default and requires the user intervention.Moreover, as of January 3rd [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>In this article we analyze Windows Live Messenger 8.5, that is the last version of MSN Messenger.Windows Live Messenger does provide a plugin api (<a href="http://blogs.msdn.com/katieblanch/archive/2006/05/11/595765.aspx" title="Messenger, Add-ins, and more..." target="_blank">Messenger, Add-ins, and more&#8230;</a>) but the features exposed are a very limited subset. Also, this plugin support is not enabled by default and requires the user intervention.Moreover, as of January 3rd 2008 <a href="http://msdn2.microsoft.com/en-us/library/aa905655.aspx" title="Messenger Add-In API is no longer supported" target="_blank">Windows Live Messenger Add-In API</a> this interface is no longer supported.</p>
<p><a href="http://blog.nektra.com/main/wp-content/uploads/2008/02/messenger-addin-unsupported.png" title="Unsupported Addin API"><img src="http://blog.nektra.com/main/wp-content/uploads/2008/02/messenger-addin-unsupported.png" alt="Unsupported Addin API" width="600" /></a></p>
<h2>Hooking</h2>
<p>As messenger lacks of a public api we need a way to inject our code in it. There several way to do this, we will be reviewing only two of them.</p>
<h3>System wide Hook</h3>
<p>We need a hook dll injected in every process of the system. This can be achieved using a CBTProc that creates a system wide window hook. This proc has to check if we are inside Messenger and if it is true, load our dll that contains the code that we want to inject. The advantages of this method are that we are not modifying the installation of Messenger and we are using documented functions, so this approach is likely to work on every version of Windows. On the other hand, our hook dll will be injected in every process and updating requires a reboot that may look suspicious to Anti-Virus software.</p>
<h3>Proxy DLL</h3>
<p>The idea is to create a proxy dll that will have the same name that other dll used by Messenger. This proxy dll will load our dll when is loaded and will forward all the calls to the original one. In order to avoid renaming or moving system dlls, we can use the trick of placing our dll in the folder where msnmsgr.exe is located so according to <a href="http://msdn2.microsoft.com/en-us/library/ms682586.aspx" target="_blank" title="Dynamic-Link Library Search Order">Dynamic-Link Library Search Order</a> it will be loaded before the original one placed in system32 folder. The advantage of this method is that affects only Messenger and does not requires to load a dll in every process. The disvantage is that it is associated to a specific version of Messenger.This trick is used by MsgPlus and its dll name is msimg32.dll <a href="http://www.msghelp.net/showthread.php?tid=71839&amp;page=1" target="_blank" title="How was Plus! done?">How was Plus! done?</a>.</p>
<p><a href="http://blog.nektra.com/main/wp-content/uploads/2008/02/messenger-msimg32-dependencies.png" title="MSIMG32.dll under Dependency Walker"><img src="http://blog.nektra.com/main/wp-content/uploads/2008/02/messenger-msimg32-dependencies.png" alt="MSIMG32.dll under Dependency Walker" width="600" /></a></p>
<h2>Inside MSN Messenger</h2>
<h3>UI Controls</h3>
<p>Previous version of Messenger used standard windows controls to display its UI, but in the latest versions they are using custom controls. Using Spy++ we can see that there is only one window with class name &#8220;DirectUIHWND&#8221;.</p>
<p><a href="http://blog.nektra.com/main/wp-content/uploads/2008/02/messenger-directuihwnd.png" title="Messenger’s DirectUIHWND under Spy++"><img src="http://blog.nektra.com/main/wp-content/uploads/2008/02/messenger-directuihwnd.png" alt="Messenger’s DirectUIHWND under Spy++" width="600" /></a><a href="http://blog.nektra.com/main/wp-content/uploads/2008/02/messenger-directuihwnd.png" title="Messenger’s DirectUIHWND under Spy++"></a></p>
<p>We can see in the picture that this windows lacks of any child window. There was some speculation about they were using <a href="http://msdn2.microsoft.com/en-us/library/aa751970.aspx#OC96_and_Windowless_" target="_blank" title="Windowless Controls">windowless controls</a>. These type of controls implement <a href="http://msdn2.microsoft.com/en-us/library/ms696165(VS.85).aspx" target="_blank" title="IAccessible Interface">IAccessible interface</a> so if we can obtain such interface we can query the object to look for other interfaces implemented. Unfortunately, most of the interfaces required by the windowless controls are not implemented here. The only interesting interface exported is IOleWindow, but instances of this interface return always the same DirectUIHWND window that is useless.Using Dependency Walker we can check what dlls are used and what is used of each one. One of them is msncore.dll that exports a bunch of C++ functions like DirectUI::NativeHWNDHost::NativeHWNDHost(void). This seems to be the dll used by messenger to display its UI. Further inspection of this dll reveals that it exports DllRegisterServer function. It looks as a COM server, but luckless executing &#8216;regsvr32 msncore.dll&#8217; from the command line throws an error. After verifying in its resources, we did not find any TLB, so it will require much more research to see if we can get any useful interface from this &#8217;server&#8217;.</p>
<h3>Resources</h3>
<p>The only known way to customize messenger UI is modifying the resources that it uses. These resources are placed in msgsres.dll, that is located in messenger folder. There are lots of sources of information about this type of solution such as <a href="http://www.another-site.net/adam/MySkin/Tutorial.php" target="_blank" title="How to skin WLM 8.1">How to skin WLM 8.1</a>.This approach can be implemented in two ways: modifing the original file or changing the resource in memory. The first method is easier but has some problems: if the file is updated our changes are lost and antivirus software may warm the user about this modified file. The other method is more complex but lacks of these problems. Resources are usually loaded using LoadResource, LoadImage, etc.; if we can make Messenger get our modified resources instead of the original ones we have reached our goal.</p>
<h2>Messenger Plugin Demo</h2>
<h3>Hooking with Deviare</h3>
<p>In order to make Messenger load our modified resources we need to hook the following functions calls: FindResource, LoadResource, LockResource, SizeofResource. We are going to use <a href="http://www.nektra.com/products/deviare/" title="Deviare API" target="_blank">Deviare API</a> to easily install our hooks.We must know that UI resources are loaded the first time Messenger is loaded. So we need Deviare to notify whenever a new program is started. After creating our SpyManager instance, we can specify that we want to be notified of process creation in this way:</p>
<pre class="syntax-highlight:c++">

_spyManager-&gt;PutReportProcessCreation(_create_process_hook_and_polling, 0)
</pre>
<p>When OnProcessStarted event is triggered we check if msnmgr.exe was started. If the new process is messenger, we initialize our ResourceManager that installs our hooks. The code that install our hooks is in FunctionHook::Init in the file FunctionHook.h. Only function&#8217;s name and function&#8217;s module are needed (these are customized using template parameters, in our demo look at DECLARE_FUNCTION_HOOKED).</p>
<h3>Managing Resources</h3>
<p>ResourceManager receives the events of the hooked functions and modifies the resources we want to customize. It is very simple, it keeps a state of each resource we have to modify, and when requested we return our modified copy.The following call order FindResource → LoadResource → LockResource → SizeofResource is expected for each customized resource.</p>
<h4>Adding a Button</h4>
<p>We need to add our button to resource 4004:923 (resource type:resource id). This is done when we insert our string.</p>
<pre class="syntax-highlight:xml">

&lt;Button cmdid=123 id=atom(nktbtn) AccRole=57 Class=&quot;TransparentButton&quot; Layout=flowlayout(0,2,0,2)
Active=MouseandKeyboard|NoSyncFocus Padding=rect(5,4,5,4)&gt;
&lt;element class=&quot;ToolbarIcon&quot; ID=Atom(ai402)/&gt;
&lt;/Button&gt;
</pre>
<p>To customize the aspect of our button we need to modify resource 4005:923.</p>
<pre class="syntax-highlight:c++">

Button[id=atom(nktbtn)]
{
accdesc:rcstr(3488);
ShortcutString:rcstr(3489);
AccName:rcstr(3490);
}
element[ID=Atom(ai402)]
{
content:rcimg(3000);
}
</pre>
<p><strong>Customizing Resources</strong></p>
<p>While customizing resources 4004:923 and 4005:923 is simple because they already exists, returning resources that do not exist is much trickier. Also, strings resources are grouped in 16 strings, check <a href="http://blogs.msdn.com/oldnewthing/archive/2004/01/30/65013.aspx" target="_blank" title="The format of string resources">The format of string resources</a> for more info.We customize these resources allocating memory inside Messenger using VirtualAllocEx and returning this address whenever our custom resources are requested. Our hook handler is called after the function fails trying to get invalid resource ids (that are the customized resource addresses). A more robust implementation should place the hook handler before the original function and skip calls when we detect our custom resources are requested.</p>
<h3>Enhancements</h3>
<ul>
<li>Resources are initialized multiple times, when only once will be enough.</li>
</ul>
<h3>Final Result</h3>
<p><a href="http://blog.nektra.com/main/wp-content/uploads/2008/02/messenger-button-vista2.png" title="Adding a custom button with MessengerButton"><img src="http://blog.nektra.com/main/wp-content/uploads/2008/02/messenger-button-vista2.png" alt="Adding a custom button with MessengerButton" width="600" /></a></p>
<h3>Demo source code</h3>
<h4>Requirements</h4>
<ul>
<li>Visual Studio 2005.</li>
<li>Windows Live Messenger 8.5.</li>
</ul>
<h4>Source code</h4>
<p><a href="http://blog.nektra.com/main/wp-content/uploads/2008/02/messengerbutton.zip" title="Plugin demo">Download plugin demo</a></p>
<h4>Services</h4>
<p>Nektra offers development services focused in <a href="http://www.nektra.com/services/addon/msn.php" title="Windows MSN Messenger add-on development">Windows MSN Messenger add-on development</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nektra.com/main/2008/02/12/windows-live-messenger-internals/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cookiepie 1.0.0: Open many Gmail, Yahoo, Hotmail accounts on Firefox</title>
		<link>http://blog.nektra.com/main/2007/12/05/cookiepie-100-open-many-gmail-yahoo-hotmail-accounts-on-firefox/</link>
		<comments>http://blog.nektra.com/main/2007/12/05/cookiepie-100-open-many-gmail-yahoo-hotmail-accounts-on-firefox/#comments</comments>
		<pubDate>Wed, 05 Dec 2007 20:32:00 +0000</pubDate>
		<dc:creator>swain</dc:creator>
		
		<category><![CDATA[extensions]]></category>

		<category><![CDATA[firefox]]></category>

		<category><![CDATA[opensource]]></category>

		<category><![CDATA[products]]></category>

		<category><![CDATA[releases]]></category>

		<category><![CDATA[videos]]></category>

		<category><![CDATA[addon]]></category>

		<category><![CDATA[chocotorta]]></category>

		<category><![CDATA[cookiepie]]></category>

		<category><![CDATA[cookies]]></category>

		<category><![CDATA[extension]]></category>

		<category><![CDATA[facebook]]></category>

		<category><![CDATA[gmail]]></category>

		<category><![CDATA[google]]></category>

		<category><![CDATA[hotmail]]></category>

		<category><![CDATA[mail]]></category>

		<category><![CDATA[mantis]]></category>

		<category><![CDATA[mozilla]]></category>

		<category><![CDATA[nektra]]></category>

		<category><![CDATA[profiles]]></category>

		<category><![CDATA[tab]]></category>

		<category><![CDATA[tabs]]></category>

		<category><![CDATA[webmail]]></category>

		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://blog.nektra.com/main/2007/12/05/cookiepie-100-open-many-gmail-yahoo-hotmail-accounts-on-firefox/</guid>
		<description><![CDATA[Cookiepie is one of the favorite Firefox extensions for web developers and users of webmail services like Google Gmail, Yahoo and Hotmail.Web developers use cookiepie to test their sites.In the past, if a site (e.g. home banking, community site) required extensive testing simulating many different users, the developer needed to open different browsers. Currently all [...]]]></description>
			<content:encoded><![CDATA[<p>Cookiepie is one of the favorite Firefox extensions for web developers and users of webmail services like Google Gmail, Yahoo and Hotmail.Web developers use cookiepie to test their sites.In the past, if a site (e.g. home banking, community site) required extensive testing simulating many different users, the developer needed to open different browsers. Currently all browsers, including Firefox, have just one place to store cookies.Some users of webmail services have more than one web account to log into. People are using each web account for different purposes but they can&#8217;t login to the same site at the same time in the same browser.The Cookiepie Firefox Extension is a solution to this problem, as it allows users to log into different webmail accounts on separate tabs. Try it with two or more of your Gmail, Yahoo or Hotmail accounts.This new release fixes problems experienced in Gmail 2.0, and supports many complex sites like the new Yahoo mail. Even webmail embedded chat is working now!We have made a short video so you can see it in action:<br />
<object height="350" width="425" data="http://www.youtube.com/v/1EBkB-Yp-zM" type="application/x-shockwave-flash">
<param value="http://www.youtube.com/v/1EBkB-Yp-zM" name="movie"></param></object><br />
Cookiepie is Free Open Source Software under the GPLv2 license. You can install it now from <a href="http://www.nektra.com/oss/firefox/extensions/cookiepie/">Nektra Cookiepie site</a>.Please, if you have comments leave them in our group <a href="http://groups.google.com/group/Nektra-CookiePie">here</a>. We would particularly like to hear about your experience with other sites, such as Facebook. We are making a <a href="http://www.nektra.com/oss/firefox/extensions/cookiepie/help.php">list</a> of supported websites.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nektra.com/main/2007/12/05/cookiepie-100-open-many-gmail-yahoo-hotmail-accounts-on-firefox/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Deviare hook component released</title>
		<link>http://blog.nektra.com/main/2007/07/31/deviare-hook-component-released/</link>
		<comments>http://blog.nektra.com/main/2007/07/31/deviare-hook-component-released/#comments</comments>
		<pubDate>Tue, 31 Jul 2007 17:40:00 +0000</pubDate>
		<dc:creator>swain</dc:creator>
		
		<category><![CDATA[examples]]></category>

		<category><![CDATA[products]]></category>

		<category><![CDATA[releases]]></category>

		<category><![CDATA[.net]]></category>

		<category><![CDATA[activex]]></category>

		<category><![CDATA[api]]></category>

		<category><![CDATA[c#]]></category>

		<category><![CDATA[com]]></category>

		<category><![CDATA[csharp]]></category>

		<category><![CDATA[detours]]></category>

		<category><![CDATA[deviare]]></category>

		<category><![CDATA[hook]]></category>

		<category><![CDATA[hooks]]></category>

		<category><![CDATA[instrumentation]]></category>

		<category><![CDATA[library]]></category>

		<category><![CDATA[object]]></category>

		<category><![CDATA[perl]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[vb]]></category>

		<category><![CDATA[vb.net]]></category>

		<category><![CDATA[win32]]></category>

		<category><![CDATA[windows]]></category>

		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://blog.nektra.com/main/2007/07/31/deviare-hook-component-released/</guid>
		<description><![CDATA[We have released the first version of Deviare. A free trial is available for download.Deviare is a component for &#8216;easy hooking&#8217; of Windows DLLs. Now you don&#8217;t need to be an expert to incercept operating system functions because you use a COM object abstracting many of the complexities.To show the power look at the following [...]]]></description>
			<content:encoded><![CDATA[<p>We have released the first version of <a href="http://www.nektra.com/products/deviare/">Deviare</a>. A free trial is available for <a href="http://www.nektra.com/products/deviare/">download</a>.Deviare is a component for &#8216;easy hooking&#8217; of Windows DLLs. Now you don&#8217;t need to be an expert to incercept operating system functions because you use a COM object abstracting many of the complexities.To show the power look at the following code snippet in CSharp (.NET):</p>
<pre class="syntax-highlight:c++">
DeviareTools.IProcesses procs = _mgr.get_Processes(0);
DeviareTools.IProcess proc = procs.get_Item(&quot;msnmsgr.exe&quot;);
DeviareTools.IPEModuleInfo mod = proc.Modules.get_ModuleByName(&quot;ws2_32.dll&quot;);
DeviareTools.IExportedFunction fnc = mod.Functions.get_ItemByName(&quot;send&quot;);
hook = mgr.CreateHook(fnc);
hook.Attach(proc);
hook.OnFunctionCalled += new Deviare.DHookEvents_OnFunctionCalledEventHandler(hook_OnFunctionCalled);
hook.Properties = (int)DeviareCommonLib.HookFlags._call_before;
hook.Hook();
void hook_OnFunctionCalled(DeviareTools.Process proc,DeviareParams.ICallInfo callInfo, Deviare.IRemoteCall rCall)
{
    DeviareParams.IParams pms = callInfo.Params;
    DeviareParams.IEnumParams enm = pms.Enumerator;
    DeviareParams.IParam pm = enm.First;
    pm = enm.Next;
    object[] args = new object[1];
    string msg = &quot;Transmition -&gt; &quot;;
    msg += pm.Value;
    msg += &quot;\r\n&quot;;
    args[0] = msg;
    txtOutput.Invoke(new AppendHandler(Append), args);
}
</pre>
<p>With this simple code you hook the send function in the WinSock dll for the Messenger process and our own function hook_OnFunctionCalled is called before the &#8216;real send&#8217;The code can be written in any COM friendly programming language like: C++, C#, VB, Java, Python, Perl, Ruby and many others. <a href="http://www.nektra.com/products/deviare/download.php">API Hook examples in C++, C#, VB</a>.Many applications can now be built on Deviare Technology like <a href="http://www.nektra.com/products/spystudio/">Spy Studio</a> a tool to monitor Windows API and available for free.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nektra.com/main/2007/07/31/deviare-hook-component-released/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Next moves: Spy Studio, Deviare, OEAPI for Vista, NKT WAB LGPL</title>
		<link>http://blog.nektra.com/main/2007/05/16/next-moves-spy-studio-deviare-oeapi-for-vista-nkt-wab-lgpl/</link>
		<comments>http://blog.nektra.com/main/2007/05/16/next-moves-spy-studio-deviare-oeapi-for-vista-nkt-wab-lgpl/#comments</comments>
		<pubDate>Wed, 16 May 2007 19:42:00 +0000</pubDate>
		<dc:creator>swain</dc:creator>
		
		<category><![CDATA[opinion]]></category>

		<category><![CDATA[products]]></category>

		<category><![CDATA[api monitor]]></category>

		<category><![CDATA[api spy]]></category>

		<category><![CDATA[deviare]]></category>

		<category><![CDATA[hook]]></category>

		<category><![CDATA[lgpl]]></category>

		<category><![CDATA[nektra]]></category>

		<category><![CDATA[nktwab]]></category>

		<category><![CDATA[oeapi]]></category>

		<category><![CDATA[outlook express api]]></category>

		<category><![CDATA[reverse engineering]]></category>

		<category><![CDATA[spy studio]]></category>

		<category><![CDATA[system internals]]></category>

		<category><![CDATA[vista]]></category>

		<category><![CDATA[wab]]></category>

		<category><![CDATA[windows address book]]></category>

		<guid isPermaLink="false">http://blog.nektra.com/main/2007/05/16/next-moves-spy-studio-deviare-oeapi-for-vista-nkt-wab-lgpl/</guid>
		<description><![CDATA[As you may already know, Nektra core skills &#38; knowledge can be briefly summarized in system internals &#38; problem solving, innovation and creativity. We were working hard to introduce new products in the market and it&#8217;s very stimulating when you receive &#8220;Wows!&#8221; from people who can appreciate the complex stuff we have made.
Our next play [...]]]></description>
			<content:encoded><![CDATA[<p>As you may already know, <a HREF="http://www.nektra.com/">Nektra</a> core skills &amp; knowledge can be briefly summarized in system internals &amp; problem solving, innovation and creativity. We were working hard to introduce new products in the market and it&#8217;s very stimulating when you receive &#8220;Wows!&#8221; from people who can appreciate the complex stuff we have made.</p>
<p>Our next play is Spy Studio, Deviare, OEAPI for Vista &amp; NKTWAB license change to LGPL:</p>
<p><a HREF="http://www.nektra.com/products/spystudio/">Spy Studio</a> is a new tool for hooking microsoft windows applications, it has an intuitive interface and you don&#8217;t need to be an expert in assembler or reverse engineering to insert hooks into different API&#8217;s or DLL&#8217;s. It has many interesting applications like seeing what your software is doing internally, and from the business perspective it&#8217;s very useful for monitoring, isolating processes access to some API or DLL, debugging, litigation &amp; software forensics, support, software engineering blackbox testing, etc. You can download it now from <a HREF="http://www.nektra.com/products/spystudio/download.php">here</a>. We would be very glad to receive you comments in <a HREF="http://forum.nektra.com/">our forums</a></p>
<p><a HREF="http://www.nektra.com/products/deviare/">Deviare</a> is the component to do your own applications and the framework used to develop Spy Studio. You can do your own hooking application with it, and extends Spy Studio&#8217;s possibilities to your own requirements, for example your own api monitors, administration tools, themes/skins/gui (i.e: scrollbar issues), posture agents, intrusion detection at the application level, etc.</p>
<p><a HREF="http://www.nektra.com/products/oeapi/">OEAPI </a>has been growing and now supports Vista&#8217;s Windows Mail in addition to Outlook Express. We are currently at the version 3.1.2 and 3.2.0 will be released very soon. OEAPI has really improved in demos, documentation, performance and capabilities. There is an updated list at <a HREF="http://www.nektra.com/products/oeapi/whatsnew.php">What&#8217;s new section</a>.</p>
<p><a HREF="http://www.nektra.com/products/wab/index.php">NKT WAB</a> is now LGPL and it shows how to implement features not available or documented in the microsoft windows api. This component is useful for accessing the WAB (Windows Address Book), creating groups &amp; folders and now supports Vista&#8217;s contacts too.</p>
<p>There is new stuff coming, but the most important thing is that our customers continue expressing their Wows!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nektra.com/main/2007/05/16/next-moves-spy-studio-deviare-oeapi-for-vista-nkt-wab-lgpl/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
