<?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>Matthieu Suiche&#039;s blog &#187; Reverse Engineering</title>
	<atom:link href="http://www.msuiche.net/category/reverse-engineering/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.msuiche.net</link>
	<description>Happiness only real when shared.</description>
	<lastBuildDate>Sat, 24 Apr 2010 09:10:12 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.3</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Undocumented Windows Vista and later registry secrets</title>
		<link>http://www.msuiche.net/2009/06/07/windows-vista-and-later-registry-secrets/</link>
		<comments>http://www.msuiche.net/2009/06/07/windows-vista-and-later-registry-secrets/#comments</comments>
		<pubDate>Sun, 07 Jun 2009 18:28:58 +0000</pubDate>
		<dc:creator>Matthieu Suiche</dc:creator>
				<category><![CDATA[Forensics]]></category>
		<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.msuiche.net/?p=218</guid>
		<description><![CDATA[In fact, this new key category appearred for the first time in Windows XP, formely called Whistler, in early 2001. Yes, almost 9 years ago. But its structure CM_BIG_DATA had been removed from Microsoft Windows XP public symbols but not from Windows Vista and later symbols.
Basicaly, this &#8220;secret&#8221; registry key had been briefly introduced in [...]]]></description>
			<content:encoded><![CDATA[<p>In fact, this new key category appearred for the first time in Windows XP, formely called Whistler, in early 2001. Yes, almost 9 years ago. But its structure <em>CM_BIG_DATA</em> had been removed from Microsoft Windows XP public symbols but not from<a href="http://www.nirsoft.net/kernel_struct/vista/CM_BIG_DATA.html"> Windows Vista</a> and later symbols.</p>
<p>Basicaly, this &#8220;secret&#8221; registry key had been briefly introduced in <a href="http://www.microsoft.com/whdc/archive/XP_kernel.mspx#ELC">Windows XP Kernel Enhancements changelog </a>as the following:</p>
<blockquote><p>Windows XP improves the way the registry handles big data. In versions before Windows XP, if an inefficient application constantly increased a value with a small increment, it created a sparse and wasteful registry file. Windows XP solves this problem with a big cell implementation where cells larger than 16K are split into increments of 16K chunks. This reduces fragmentation when the data length of a value is increased within a certain threshold.</p></blockquote>
<p>If we take a closer look to <em>CmpGetBootValueData()</em> or <em>CmpGetValueData()</em> functions which handles big data keys we can notice <em>CMHIVE.Version</em> must greater or equal to 4. I guess, this is the Whistler registry version.</p>
<p>To be validated as big data key pointer, <em>CM_KEY_VALUE</em> cell must respect the following conditions:<br />
- CM_KEY_VALUE.DataLength must be greater than 0&#215;3fd8 and smaller than 0&#215;80000000</p>
<p>Then <em>CM_BIG_DATA</em> key first chunk is retrieved using <em>CM_KEY_VALUE.Data</em> as cell offset.</p>
<p>To be validated as big data key, the <em>CM_BIG_DATA</em> cell must respect the following conditions:<br />
- <em>CM_BIG_DATA.Signature</em> must be equal to 0&#215;6264 (&#8221;bd&#8221;)<br />
- <em>CM_BIG_DATA.Count</em> must be greater than 0<br />
- <em>CM_BIG_DATA.List</em> must be different from 0</p>
<p>According to these information Windows do assinity check to avoid buffer overflow and re-compute CM_KEY_VALUE.DataLength for assinity check like the following:<br />
<em>ASSERT(CM_KEY_VALUE.DataLength < = (CM_BIG_DATA.Count * 0x3fd8))</em></p>
<p>Then, each </em><em>CM_BIG_DATA.List</em> entry are read <em>CM_BIG_DATA.Count</em> times as cell index, and 0&#215;3fd8 bytes maximum are copied each time into the output buffer. </p>
<p>It means data chunk are not exactly 16K bytes (0&#215;4000) but 0&#215;3fd8. The difference of 0&#215;28 bytes is in fact the cell header.</p>
<p>If you want to read further information about Windows Registry format, I suggest you to refer to <a href="http://www.sentinelchicken.com/research/">Tim Morgan</a>, <a href="http://amnesia.gtisc.gatech.edu/~moyix/suzibandit.ltd.uk/MSc/">Peter Norris</a> documents and <a href="http://moyix.blogspot.com/">moyix blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.msuiche.net/2009/06/07/windows-vista-and-later-registry-secrets/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Low Priority I/O Count Information &#8211; SystemLowPriorityInformation</title>
		<link>http://www.msuiche.net/2009/04/01/low-priority-io-count-information-systemlowpriorityinformation/</link>
		<comments>http://www.msuiche.net/2009/04/01/low-priority-io-count-information-systemlowpriorityinformation/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 21:24:13 +0000</pubDate>
		<dc:creator>Matthieu Suiche</dc:creator>
				<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.msuiche.net/?p=205</guid>
		<description><![CDATA[Based on Windows Vista I/O priorities manager, Windows 7 provides a new class to retrieve information/statistics about about Low I/O priority counts.
Function: NtQuerySystemInformation
Class: SystemLowPriorityInformation
Privilege: None
Output size: 0&#215;24 bytes
The output structure is the following.
typedef struct _LOW_PRIORITY_INFORMATION
{
    ULONG IoLowPriorityReadOperationCount;
    ULONG IoLowPriorityWriteOperationCount;
    ULONG IoKernelIssuedIoBoostedCount;
    ULONG IoPagingReadLowPriorityCount;
 [...]]]></description>
			<content:encoded><![CDATA[<p>Based on <a href="http://technet.microsoft.com/en-gb/magazine/2007.02.vistakernel.aspx">Windows Vista I/O priorities manager</a>, Windows 7 provides a new class to retrieve information/statistics about about Low I/O priority counts.</p>
<p><strong>Function:</strong> NtQuerySystemInformation<br />
<strong>Class:</strong> SystemLowPriorityInformation<br />
<strong>Privilege:</strong> None<br />
<strong>Output size:</strong> 0&#215;24 bytes</p>
<p>The output structure is the following.</p>
<blockquote><p>typedef struct _LOW_PRIORITY_INFORMATION<br />
{<br />
    ULONG IoLowPriorityReadOperationCount;<br />
    ULONG IoLowPriorityWriteOperationCount;<br />
    ULONG IoKernelIssuedIoBoostedCount;<br />
    ULONG IoPagingReadLowPriorityCount;<br />
    ULONG IoPagingReadLowPriorityBumpedCount;<br />
    ULONG IoPagingWriteLowPriorityCount;<br />
    ULONG IoPagingWriteLowPriorityBumpedCount;<br />
    ULONG IoBoostedThreadedIrpCount;<br />
    ULONG IoBoostedPagingIrpCount;<br />
    ULONG IoBlanketBoostCount; // Added in RC1 (build 7100)<br />
} LOW_PRIORITY_INFORMATION, *PLOW_PRIORITY_INFORMATION;</p></blockquote>
<p><center><a href="http://www.msuiche.net/wp-content/uploads/2009/04/systemlowiopriorityinfo.png"><img src="http://www.msuiche.net/wp-content/uploads/2009/04/systemlowiopriorityinfo.png" alt="systemlowiopriorityinfo" title="systemlowiopriorityinfo" width="537" height="184" class="alignnone size-full wp-image-206" /></a></center></p>
<p><a href="http://www.msuiche.net/tools/Win7/SystemLowPriorityInformation.zip">Source + Executable are available here.</a></p>
<p><b>Edit:</b> LOW_PRIORITY_INFORMATION structure updated in build 7100.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.msuiche.net/2009/04/01/low-priority-io-count-information-systemlowpriorityinformation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Demystifying new Windows 7 System Information Classes</title>
		<link>http://www.msuiche.net/2009/03/31/demystifying-new-windows-7-system-information-classes/</link>
		<comments>http://www.msuiche.net/2009/03/31/demystifying-new-windows-7-system-information-classes/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 21:09:32 +0000</pubDate>
		<dc:creator>Matthieu Suiche</dc:creator>
				<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[SandMan]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.msuiche.net/?p=193</guid>
		<description><![CDATA[This post is the first of a serie of articles/blogposts about new System Information Class under Windows 7 (32bits ATM) used by both NtQuerySystemInformation and extended version of this API called NtQuerySystemInformationEx introduced in Windows 7 and Windows 2008 R2.
First of all, here is the prototype of these functions.

NTSTATUS (WINAPI *NtQuerySystemInformationEx)(SYSTEM_INFORMATION_CLASS SystemInformationClass,
    [...]]]></description>
			<content:encoded><![CDATA[<p>This post is the first of a serie of articles/blogposts about new System Information Class under Windows 7 (32bits ATM) used by both <em><a href="http://msdn.microsoft.com/en-us/library/ms724509(VS.85).aspx">NtQuerySystemInformation</a></em> and extended version of this API called <em>NtQuerySystemInformationEx</em> introduced in Windows 7 and Windows 2008 R2.</p>
<p>First of all, here is the prototype of these functions.</p>
<blockquote><p>
NTSTATUS (WINAPI *NtQuerySystemInformationEx)(SYSTEM_INFORMATION_CLASS SystemInformationClass,<br />
                                              PULONG QueryType,<br />
                                              ULONG Alignment,<br />
                                              PVOID SystemInformation,<br />
                                              ULONG SystemInformationLength,<br />
                                              PULONG ReturnLength);</p>
<p>NTSTATUS (WINAPI *NtQuerySystemInformation)(SYSTEM_INFORMATION_CLASS SystemInformationClass,<br />
                                            PVOID SystemInformation,<br />
                                            ULONG SystemInformationLength,<br />
                                            PULONG ReturnLength);</p></blockquote>
<p>As you can see there is two further arguments in NtQuerySystemInformationEx: QueryType and Alignment.</p>
<p>And here are new  (and undocumented) system information classes added to Windows 7 that will be discussed in next blogposts.</p>
<blockquote><p>typedef enum _SYSTEM_INFORMATION_CLASS<br />
{<br />
    // NtQueryEx<br />
    <a href="http://code.msdn.microsoft.com/64plusLP/">SystemLogicalProcessorAndGroupInformation</a> = 107,<br />
    SystemLogicalGroupInformation = 108,</p>
<p>    SystemStoreInformation = 109,<br />
    SystemVhdBootInformation = 112,<br />
    SystemCpuQuotaInformation = 113, </p>
<p>    // Removed in build 7100<br />
    SystemHardwareCountersInformation = 115, // uses <a href="http://msdn.microsoft.com/en-us/library/dd835193.aspx">KeQueryHardwareCounterConfiguration</a>() instead</p>
<p>    <a href="http://www.msuiche.net/2009/04/01/low-priority-io-count-information-systemlowpriorityinformation/">SystemLowPriorityInformation</a> = 116,<br />
    SystemTpmBootEntropyInformation = 117,<br />
    SystemVerifierInformation = 118, </p>
<p>    // NtQueryEx<br />
    SystemNumaNodesInformation = 121,<br />
    //<br />
    // Added in build 7100<br />
    //<br />
    SystemHalInformation = 122, // 8 bytes size<br />
    SystemCommittedMemoryInformation = 123,<br />
    MaxSystemInfoClass = 124<br />
} SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;</p></blockquote>
<p>PS. For interested people the first issue of the Debugged! MZ/PE: MagaZine is available on <a href="http://www.amazon.com/Debugged-MZ-PE-Practicing-Engineers/dp/1906717389/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1236600409&#038;sr=8-1"> Amazon.</a></p>
<p><a href="http://twitter.com/home?status=@msuiche Reading Demystifying new Windows 7 System Information Classes http://tinyurl.com/cl9ywm">Twitt This!</a></p>
<p><b>Edit:</b> SYSTEM_INFORMATION_CLASS structure updated in build 7100.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.msuiche.net/2009/03/31/demystifying-new-windows-7-system-information-classes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Few words about Microsoft interoperability initiative.</title>
		<link>http://www.msuiche.net/2008/04/06/few-words-about-microsoft-interoperability-initiative/</link>
		<comments>http://www.msuiche.net/2008/04/06/few-words-about-microsoft-interoperability-initiative/#comments</comments>
		<pubDate>Sun, 06 Apr 2008 21:23:05 +0000</pubDate>
		<dc:creator>Matthieu Suiche</dc:creator>
				<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[SandMan]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.msuiche.net/?p=42</guid>
		<description><![CDATA[As you probably know, Microsoft released last month several thousands pages of documentation about  office file format and Windows protocols.  
It means numerous hundreds(thousands?) of functions/algorithms documentation and pseudo-code. But, are these pseudo-function right? It looks not. 
While I was reading [MS-DRSR]: Directory Replication Service (DRS) Remote Protocol Specification, I was a bit [...]]]></description>
			<content:encoded><![CDATA[<p>As you probably know, Microsoft released last month several thousands pages of documentation about  <a href="http://www.microsoft.com/interop/docs/OfficeBinaryFormats.mspx">office file format</a> and <a href="http://msdn2.microsoft.com/en-us/library/cc216517.aspx">Windows protocols</a>.  </p>
<p>It means numerous hundreds(thousands?) of functions/algorithms documentation and pseudo-code. But, are these pseudo-function right? It looks not. </p>
<p>While I was reading <a href="http://download.microsoft.com/download/a/e/6/ae6e4142-aa58-45c6-8dcf-a657e5900cd3/%5BMS-DRSR%5D.pdf">[MS-DRSR]: Directory Replication Service (DRS) Remote Protocol Specification</a>, I was a bit curious to see the DecompressWin2k3() function (Thanks <a href="http://volatilesystems.blogspot.com/">Aaron</a>, <a href="http://samba.org">Stefan</a> , and <a href="http://moyix.blogspot.com">Brendan</a>).</p>
<p>This function is in fact the decompression algorithm called Xpress implemented for the first time in Windows XP and not Windows 2003 as say the name. Xpress algorithm works on 64kb chunks and is used in <a href="http://sandman.msuiche.net">Windows hibernation file format</a>, <a href="http://technet.microsoft.com/en-us/magazine/cc160878.aspx">Windows Imaging Format (WIM) </a>, Outlook, Exchange, and&#8230; <a href="http://fr.wikipedia.org/wiki/LDAP">LDAP</a> replication service of Active Directory.</p>
<p>I&#8217;m quoting below, errors I found in the pseudo-code of DecompressWin2k3(). <a href="http://www.msuiche.net/codes/xpress.c.txt">Here is the C implementation.</a></p>
<pre>
<font color="red"><strong>while (outputIndex < = outputSize) </strong></strong></font>
<font color="orange"><em>should be:</em></font>
<font color="green"><strong>while (outputIndex < outputSize) </strong></strong></font>
    if (indicatorBit = 0) then
        <font color="red"><strong>indicatorBit := copy inputBuffer[inputIndex] as 32-bit integer in
        little-endian format </strong></font>
        <font color="orange"><em>should be:</em></font>
        <font color="green"><strong>indicator := copy inputBuffer[inputIndex] as 32-bit integer in
        little-endian format </strong></font>
        inputIndex := inputIndex + 4
        indicatorBit := 32
    endif 

    indicatorBit := indicatorBit - 1 

//* check whether the bit specified by indicatorBit is set or not
//* set in indicator. For example, if indicatorBit has value 4
//* check whether the 4th bit of the value in indicator is set  

    if indicatorBit bit in indicator is not set then
        <font color="red"><strong>inputBuffer[inputIndex] := outputBuffer[outputIndex]</strong></font>
        <font color="orange"><em>should be:</em></font>
        <font color="green"><strong>outputBuffer[outputIndex] := inputBuffer[inputIndex] </strong></font>
        inputIndex := inputIndex + 1
        outputIndex := outputIndex + 1
    else
        length := copy inputBuffer[inputIndex] as 16-bit integer in
        little-endian format
        inputIndex := inputIndex + 2
        offset := length /8
        length := length mod 8 

        if (length = 7) then 

            if (nibbleIndex = 0) then
                nibbleIndex := inputIndex
                length := inputBuffer[inputIndex] mod 16
                inputIndex := inputIndex + 1
            else
                <font color="red"><strong>length := inputBuffer[inputIndex] / 16</strong> </font>
                <font color="orange"><em>should be:</em></font>
                <font color="green"><strong>length := inputBuffer[nibbleIndex ] / 16</strong> </font>
                nibbleIndex := 0
            endif 

            if (length = 15) then 

                length := inputBuffer[inputIndex]
                inputIndex := inputIndex + 1 

                    if (length = 255) then
                        length := copy inputBuffer[inputIndex] as 16-bit integer in little-endian format
                        inputIndex := inputIndex + 2
                        length := length - (15 + 7)
                    endif
                length := length + 15
            endif 

            length := length + 7 

        endif 

    length := length + 3 

        <font color="red"><strong>while (not length = 0)</strong> </font>
        <font color="orange"><em>should be:</em></font>
        <font color="green"><strong>while (length != 0)</strong> </font>
            outputBuffer[outputIndex] := outputBuffer[outputIndex - offset - 1]
            outputIndex := outputIndex + 1
            length := length - 1
        endwhile
    endif 

endwhile 

return </pre>
]]></content:encoded>
			<wfw:commentRss>http://www.msuiche.net/2008/04/06/few-words-about-microsoft-interoperability-initiative/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>SandMan 1.0.080226 is out!</title>
		<link>http://www.msuiche.net/2008/02/26/sandman-10080226-is-out/</link>
		<comments>http://www.msuiche.net/2008/02/26/sandman-10080226-is-out/#comments</comments>
		<pubDate>Tue, 26 Feb 2008 19:31:18 +0000</pubDate>
		<dc:creator>Matthieu Suiche</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.msuiche.net/2008/02/26/sandman-10080226-is-out/</guid>
		<description><![CDATA[Since Windows 2000, Microsoft provides a feature called Hibernation also know as suspend to disk that aims to save the system state into an undocumented file called hiberfil.sys. This file contains all the physical memory saved by the Operating System and aims to be restored by the user the next time the computer is powered [...]]]></description>
			<content:encoded><![CDATA[<p>Since Windows 2000, Microsoft provides a feature called <strong>Hibernation</strong> also know as suspend to disk that aims to save the system state into an <strong>undocumented file</strong> called <strong>hiberfil.sys</strong>. This file contains all the physical memory saved by the Operating System and aims to be restored by the user the next time the computer is powered on. Live forensics analysis is used to use <strong>physical memory dump</strong> to recover information on the targeted machine. One of the main problems is to obtain a readable physical memory dump, <strong>hibernation is an efficient way to save and load physical memory. </strong>Hibernation analysis has notable advantages. System activity is totally frozen, therefore coherent data is acquired and no software tool is able to block the analysis. The system is left perfectly functional after analysis, with no side effects.</p>
<p><strong>The hibernation file opens two valuable doors</strong>: The first one is <em>(live?)</em> <strong>forensics analysis</strong> for defensive computing. Hibernation is an efficient and easy way to get a physical memory dump. But the main issue about it was: How to read the <strong>hiberfil.sys</strong>? That’s how the idea of SandMan born. The second one is a new (<em>ou pas</em>) concept we will be introduced and called “<strong>offensics</strong>” which is a portmanteau from “offensive” and “forensics”. If we can read <strong>hiberfil.sys</strong>, can we rewrite it? The answer is: <em><strong>Yes, with SandMan you can.</strong></em></p>
<p><a href='http://www.msuiche.net/wp-content/uploads/2008/02/sandman_sample1.png' title='sample 2'><img src='http://www.msuiche.net/wp-content/uploads/2008/02/sandman_sample1.png' alt='sample 2' /></a></p>
<p>SandMan was firstly introduced at <strong>PacSec, Japan in November 2007</strong>, slides are available in the SandMan section. </p>
<p><strong>* SandMan</strong> provides a <strong>C Library</strong> and a <strong>Python portage</strong>.<br />
<font size="1"><br />
Here is a sample of implementation in Python.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">#!/usr/bin/python</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#Module Name:</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1"># </span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp;sample1.py</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># </span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#Abstract:</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># </span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1"># &nbsp; &nbsp;- Display target version.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp;- Build a physical memory dump from a hibernation file.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># </span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#Environment:</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># </span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1"># &nbsp; &nbsp;- Python</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># </span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#Revision History:</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># </span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp;- Matthieu Suiche</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1"># </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">sys</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> sandman</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">if</span> <span class="kw2">len</span><span class="br0">&#40;</span><span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#41;</span> != <span class="nu0">3</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">print</span> <span class="st0">&quot;Matthieu Suiche &#8211; http://sandman.msuiche.net/&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">print</span> <span class="st0">&quot;Usage: sample.py hiberfil.sys physical_dump.vmem&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">sys</span>.<span class="me1">exit</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">s = sandman.<span class="me1">hiber_open</span><span class="br0">&#40;</span><span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">ver = sandman.<span class="me1">hiber_get_version</span><span class="br0">&#40;</span>s<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> <span class="st0">&quot;Windows version %d.%d.%d<span class="es0">\n</span>&quot;</span> % <span class="br0">&#40;</span>ver &amp; 0xFF, <span class="br0">&#40;</span>ver &amp; 0xFF00<span class="br0">&#41;</span> &gt;&gt; <span class="nu0">8</span>, ver &gt;&gt; <span class="nu0">16</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> <span class="st0">&quot;Generate physical memory dump&#8230;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">sandman.<span class="me1">hiber_dump</span><span class="br0">&#40;</span>s, <span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">print</span> <span class="st0">&quot;Done.&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">sandman.<span class="me1">hiber_close</span><span class="br0">&#40;</span>s<span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p></font><br />
<strong>*</strong> Furthermore, SandMan is <strong>open-source</strong> and released under <i>GNU General Public License v3</i>, you can have further information on the <i>Google SVN</i> at the following link: <br /><a href="http://code.google.com/p/sandmanlib/">http://code.google.com/p/sandmanlib/</a>.</p>
<p><strong>*</strong> Actually, SandMan supports 32bits version of the hibernation file from <strong>Windows XP to Windows 2008 Server</strong></p>
<p><strong>To download SandMan, go to the section dedicaced to SandMan here:<br /> <a href="http://sandman.msuiche.net/">http://sandman.msuiche.net/</a>.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.msuiche.net/2008/02/26/sandman-10080226-is-out/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Enter sandman&#8230; :)</title>
		<link>http://www.msuiche.net/2007/10/22/enter-sandman/</link>
		<comments>http://www.msuiche.net/2007/10/22/enter-sandman/#comments</comments>
		<pubDate>Mon, 22 Oct 2007 19:08:04 +0000</pubDate>
		<dc:creator>Matthieu Suiche</dc:creator>
				<category><![CDATA[Presentations]]></category>
		<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.msuiche.net/2007/10/22/enter-sandman/</guid>
		<description><![CDATA[Everyone knows that Dumbledore is homosexual but there is a most important thing you have to know!
The PacSec Agenda had been released! http://www.securityfocus.com/archive/1/482602/30/0/threaded
Speaker list: 
http://www.pacsec.jp/speakers.html
Talk selections for PacSec 2007 - November 29 and 30 - Aoyama Diamond Hall
-------
- Programmed I/O accesses: a threat to virtual machine monitors? -
 Loic Duflot,
- Developing Fuzzers with Peach -
Michael [...]]]></description>
			<content:encoded><![CDATA[<p>Everyone knows that <a href="http://theknightshift.blogspot.com/2007/10/jk-rowling-says-albus-dumbledore-is.html">Dumbledore is homosexual</a> but there is a most important thing you have to know!</p>
<p>The PacSec Agenda had been released! <a href="http://www.securityfocus.com/archive/1/482602/30/0/threaded">http://www.securityfocus.com/archive/1/482602/30/0/threaded</a><br />
Speaker list: <a href="http://www.pacsec.jp/speakers.html"><br />
http://www.pacsec.jp/speakers.html</a></p>
<p><code>Talk selections for <a href="http://www.pacsec.jp">PacSec</a> 2007 - November 29 and 30 - Aoyama Diamond Hall</p>
<p>-------<br />
- Programmed I/O accesses: a threat to virtual machine monitors? -<br />
<i> Loic Duflot,</i></p>
<p>- Developing Fuzzers with Peach -<br />
<i>Michael Eddington, Leviathan Security</i></p>
<p>- Cyber Attacks Against Japan -<br />
<i> Hiroshi Kawaguchi, LAC</i></p>
<p>- Windows Localization: Owning Asian Windows Versions -<br />
<i> Kostya Kortchinsky, Immunity</i></p>
<p>- TOMOYO Linux -<br />
<i>Toshiharu Harada, NTT Data </i></p>
<p>- IPV6 Demystified -<br />
<i>Jun-ichiro itojun Hagino , IPv6Samurais</i></p>
<p>- Automated JavaScript Deobfuscation -<br />
<i>Alex Rice, Websense Security Labs</i></p>
<p><strong>- Enter Sandman (why you should never go to sleep) -<br />
<i> Nicolas Ruff &#038; Matthieu Suiche, EADS</i></strong></p>
<p>- Agent-oriented SQL Abuse -<br />
<i> Fernando Russ &#038; Diego Tiscornia, Core</i></p>
<p>- Bad Ideas: Using a JVM/CLR for Intellectual Property Protection<br />
<i> Marc Schoenefeld, University of Bamberg</i></p>
<p>- Heap exploits are dead. Heap exploits remain dead. And we have killed them.<br />
<i>Nicolas Waisman, Immunity</i></p>
<p>- Deploying and operating a Global Distributed Honeynet<br />
<i>David Watson, Honeynet Project</i></p>
<p>- Office 0days and the people who love them<br />
<i>TBA, Microsoft</i><br />
.<br />
(I would also like to thank Colin Delaney and Stephen Ridley as standby<br />
presenters)</p>
<p>------</code></p>
<p>The topic is talking about forensic/hiberation under Windows. More information will be available in November&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.msuiche.net/2007/10/22/enter-sandman/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interrupt Debug Service (0&#215;2D), Boot loader, Vista 64bits (On the fly)</title>
		<link>http://www.msuiche.net/2007/03/10/interrupt-debug-service-0x2d-boot-loader-vista-64bits-on-the-fly/</link>
		<comments>http://www.msuiche.net/2007/03/10/interrupt-debug-service-0x2d-boot-loader-vista-64bits-on-the-fly/#comments</comments>
		<pubDate>Sat, 10 Mar 2007 17:32:24 +0000</pubDate>
		<dc:creator>Matthieu Suiche</dc:creator>
				<category><![CDATA[On the fly]]></category>
		<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.msuiche.net/2007/03/10/interrupt-debug-service-0x2d-boot-loader-vista-64bits-on-the-fly/</guid>
		<description><![CDATA[

 DebugPrint      proc near
                 mov     r9d, r8d
                 mov     r8d, edx
 [...]]]></description>
			<content:encoded><![CDATA[<p><code>
<pre>
 DebugPrint      proc near
                 mov     r9d, r8d
                 mov     r8d, edx
                 mov     dx, [rcx]
                 mov     rcx, [rcx+8]
                 mov     eax, 1
                 int     2Dh             ; Internal routine for MSDOS (IRET)
                 int     3               ; Trap to Debugger
                 retn
 DebugPrint      endp

 DebugPrompt     proc near
                 mov     r9w, [rdx+2]
                 mov     r8, [rdx+8]
                 mov     dx, [rcx]
                 mov     rcx, [rcx+8]
                 mov     eax, 2
                 int     2Dh             ; Internal routine for MSDOS (IRET)
                 int     3               ; Trap to Debugger
                 retn
 DebugPrompt     endp

 DebugService2   proc near
                 mov     eax, r8d
                 int     2Dh             ; Internal routine for MSDOS (IRET)
                 int     3               ; Trap to Debugger
                 retn
 DebugService2   endp

 BlBdStart+11C:
                 lea     rdx, [rsp+78h+var_28]
                 lea     rcx, [rsp+78h+var_58]
                 mov     r8d, 3
                 call    DebugService2

BlBdStop        proc near
                 lea     rdx, [rax-28h]
                 mov     r8d, 4
                 xor     ecx, ecx
		[...]
                 call    DebugService2

typedef enum _STATUS_DEBUG_SERVICE {
STATUS_PRINT = 1,
STATUS_PROMPT = 2,
STATUS_START = 3,
STATUS_STOP = 4
} STATUS_DEBUG_SERVICE;
</pre>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.msuiche.net/2007/03/10/interrupt-debug-service-0x2d-boot-loader-vista-64bits-on-the-fly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interrupts, Boot Loader, Vista 64bits (On the fly)</title>
		<link>http://www.msuiche.net/2007/03/10/interrupts-boot-loader-vista-64bits-on-the-fly/</link>
		<comments>http://www.msuiche.net/2007/03/10/interrupts-boot-loader-vista-64bits-on-the-fly/#comments</comments>
		<pubDate>Sat, 10 Mar 2007 16:21:49 +0000</pubDate>
		<dc:creator>Matthieu Suiche</dc:creator>
				<category><![CDATA[On the fly]]></category>
		<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.msuiche.net/2007/03/10/interrupts-boot-loader-vista-64bits-on-the-fly/</guid>
		<description><![CDATA[I&#8217;ve to do something to save me from idling while a software is rescuing my HDD.
That&#8217;s why I&#8217;m gonna write short post about the boot loader and the interrupts initialization.
By the way, I add a new category called &#8220;On the fly&#8221; for post like that which are more or less RCE Memento (interessting or not [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve to do something to save me from idling while a software is rescuing my HDD.</p>
<p>That&#8217;s why I&#8217;m gonna write short post about the boot loader and the interrupts initialization.<br />
By the way, I add a new category called &#8220;On the fly&#8221; for post like that which are more or less RCE Memento (interessting or not ::)).<br />
If I had to explain it I&#8217;d answer &#8220;no blabla just code. don&#8217;t read but analyse.&#8221;</p>
<p>This article covers where the interrupts 0&#215;1, 0&#215;3, 0&#215;6, 0xD, 0xE, 0&#215;2C, 0&#215;2D are initialized inside the bootloader.</p>
<p>For reminding, I&#8217;ve rewritten some things :</p>
<p><code></p>
<pre>
//
// 63                             32            16               0
// +------------------------------+------------------------------+
// +           OffsetLow          +   HighLow    +   HighHigh    +
// +------------------------------+------------------------------+
//

typedef struct _KIDT_ENTRY {     // (sizeof=0x10)
	unsigned short wOffsetHighHigh;  // +0x00
	unsigned short Reserved02;       // +0x02
	unsigned short Reserved04;       // +0x04
	unsigned short wOffsetHighLow;   // +0x06
	unsigned long dwOffsetLow;       // +0x08
	unsigned long Reserved0C;        // +0x0C
} KIDT_ENTRY;

typedef enum _INTERRUPT_ID{
    NONE=-1,
   DIVIDE_ERROR=0,			// 0x00
   SINGLE_STEP,				// 0x01
   NMI_INTERRUPT,				// 0x02
   BREAKPOINT,				// 0x03
   OVERFLOW,				// 0x04
   BOUND,					// 0x05
   INVALID_OPCODE,			// 0x6
   NPX_NOT_AVAILABLE,			// 0x07
   DOUBLE_FAULT,				// 0x08
   NPX_SEGMENT_OVERRUN,			// 0x09
   INVALID_TSS,				// 0x0A
   SEGMENT_NOT_PRESENT,			// 0x0B
   STACK,					// 0x0C
   GENERAL_PROTECTION,			// 0x0D
   PAGE,					// 0x0E
   RESERVED,				// 0x0F
   FLOATING_ERROR,			// 0x10
   ALIGNMENT,				// 0x11
   MACHINE_CHECK,				// 0x12
   XMM_EXCEPTION,				// 0x13
   //
   // Other Critical Interrupts
   //
   APC=0x1F,				// 0x1F
   RAISE_ASSERTION=0x2C,		// 0x2C
   DEBUG_SERVICE=0x2D,			// 0x2D
   DPC=0x2F,				// 0x2F
   IPI=0xE1					// 0xE1
} INTERRUPT_ID;
</pre>
<p></code></p>
<p>Firstly, we have to know these to function inside the &#8220;.text&#8221; section.</p>
<p><strong><br />
Function : ArchGetIdtRegister<br />
XREF: BdInstallTrapVectors, BlpArchInitialize</strong><br />
<code></p>
<pre>ArchGetIdtRegister proc near
                 sidt    qword ptr [rcx]
                 retn
ArchGetIdtRegister endp
</pre>
<p></code></p>
<p><strong>Function : ArchSetIdtRegister<br />
XREF: BdInstallTrapVectors, BlpArchInitialize</strong><br />
<code></p>
<pre>ArchSetIdtRegister proc near
                 lidt    qword ptr [rcx]
                 retn
ArchGetIdtRegister endp
</pre>
<p></code></p>
<p>Let&#8217;s look at the XREF&#8217;s functions.</p>
<p><strong>BdInstallTrapVectors</strong><br />
<code></p>
<pre>
BdInstallTrapVectors proc near          ; CODE XREF: BlBdInitialize+20D

 var_18          = qword ptr -18h

                 sub     rsp, 38h
                 lea     rcx, [rsp+38h+var_18]
                 call    ArchGetIdtRegister
                 mov     r11, [rsp+38h+var_18+2]
                 mov     r9w, 10h
                 mov     [r11+12h], r9w
                 mov     r8w, 8E00h
                 lea     rax, BdTrap01
                 <strong>mov     [r11+10h], ax   ; 0x10/(16 = sizeof(_KIDT_ENTRY)) = 0x1</strong>
                 mov     [r11+14h], r8w
                 mov     rcx, rax
                 shr     rcx, 10h
                 shr     rax, 20h
                 mov     [r11+16h], cx
                 mov     [r11+18h], eax
                 mov     rdx, [rsp+38h+var_18+2]
                 mov     [rdx+32h], r9w
                 mov     [rdx+34h], r8w
                 lea     rax, BdTrap03
                 <strong>mov     [rdx+30h], ax   ; 0x30/(16 = sizeof(_KIDT_ENTRY)) = 0x3</strong>
                 mov     rcx, rax
                 shr     rax, 20h
                 mov     [rdx+38h], eax
                 shr     rcx, 10h
                 lea     rax, BdTrap0d
                 mov     [rdx+36h], cx
                 mov     rdx, [rsp+38h+var_18+2]
                 mov     rcx, rax
                 <strong>mov     [rdx+0D0h], ax  ; 0x0D/(16 = sizeof(_KIDT_ENTRY)) = 0x0D</strong>
                 mov     [rdx+0D2h], r9w
                 mov     [rdx+0D4h], r8w
                 shr     rcx, 10h
                 shr     rax, 20h
                 mov     [rdx+0D6h], cx
                 mov     [rdx+0D8h], eax
                 mov     rdx, [rsp+38h+var_18+2]
                 mov     [rdx+0E2h], r9w
                 mov     [rdx+0E4h], r8w
                 lea     rax, BdTrap0e
                 <strong>mov     [rdx+0E0h], ax  ; 0xE0/(16 = sizeof(_KIDT_ENTRY)) = 0x0E</strong>
                 mov     rcx, rax
                 shr     rax, 20h
                 mov     [rdx+0E8h], eax
                 shr     rcx, 10h
                 lea     rax, BdTrap2c
                 mov     [rdx+0E6h], cx
                 mov     rdx, [rsp+38h+var_18+2]
                 mov     rcx, rax
                 <strong>mov     [rdx+2C0h], ax  ; 0x2C0/(16 = sizeof(_KIDT_ENTRY)) = 0x2C</strong>
                 mov     [rdx+2C2h], r9w
                 mov     [rdx+2C4h], r8w
                 shr     rcx, 10h
                 shr     rax, 20h
                 mov     [rdx+2C6h], cx
                 mov     [rdx+2C8h], eax
                 mov     rdx, [rsp+38h+var_18+2]
                 lea     rax, BdTrap2d
                 mov     [rdx+2D2h], r9w
                 mov     [rdx+2D4h], r8w
                 mov     rcx, rax
                 <strong>mov     [rdx+2D0h], ax  ; 0x2D0/(16 = sizeof(_KIDT_ENTRY)) = 0x2D</strong>
                 shr     rax, 20h
                 shr     rcx, 10h
                 mov     [rdx+2D8h], eax
                 mov     [rdx+2D6h], cx
                 lea     rcx, [rsp+38h+var_18]
                 call    ArchSetIdtRegister
                 add     rsp, 38h
                 retn
BdInstallTrapVectors endp
</pre>
<p></code></p>
<p><strong>InitializeLibrary</strong><br />
<code></p>
<pre>
BlpArchInitialize proc near             ; CODE XREF: InitializeLibrary+12A

 IdtEntry        = qword ptr -18h

                 sub     rsp, 38h

                 cmp     ecx, 1
                 jnz     _exit

                 lea     rcx, [rsp+38h+IdtEntry]
                 call    ArchGetIdtRegister
                 mov     r11, [rsp+38h+IdtEntry+2]
                 lea     rax, ArchTrapNoProcess
                 <strong>mov     [r11+30h], ax   ; 0x30/(16 = sizeof(_KIDT_ENTRY)) = 0x3
                 mov     word ptr [r11+32h], 10h
                 mov     word ptr [r11+34h], 8E00h
                 mov     r8, rax
                 mov     rdx, rax
                 shr     r8, 10h
                 shr     rdx, 20h
                 mov     [r11+36h], r8w
                 mov     [r11+38h], edx
                 mov     rcx, [rsp+38h+IdtEntry+2]
                 </strong><strong>mov     [rcx+2C0h], ax  ; 0x2C0/(16 = sizeof(_KIDT_ENTRY)) = 0x2C
                 mov     [rcx+2C6h], r8w
                 mov     [rcx+2C8h], edx
                 mov     word ptr [rcx+2C2h], 10h
                 mov     word ptr [rcx+2C4h], 8E00h
                 mov     rcx, [rsp+38h+IdtEntry+2]
                 </strong><strong>mov     [rcx+2D0h], ax  ; 0x2D0/(16 = sizeof(_KIDT_ENTRY)) = 0x2D</strong>
                 mov     [rcx+2D6h], r8w
                 mov     [rcx+2D8h], edx
                 mov     word ptr [rcx+2D2h], 10h
                 mov     word ptr [rcx+2D4h], 8E00h
                 lea     rcx, [rsp+38h+IdtEntry]
                 call    ArchSetIdtRegister

 _exit:
                 xor     eax, eax
                 add     rsp, 38h
                 retn

BlpArchInitialize endp
</pre>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.msuiche.net/2007/03/10/interrupts-boot-loader-vista-64bits-on-the-fly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Vista and unexported kernel symbols (Part II, 32bits version)</title>
		<link>http://www.msuiche.net/2007/01/31/windows-vista-and-unexported-kernel-symbols-part-ii-32bits-version/</link>
		<comments>http://www.msuiche.net/2007/01/31/windows-vista-and-unexported-kernel-symbols-part-ii-32bits-version/#comments</comments>
		<pubDate>Wed, 31 Jan 2007 21:31:22 +0000</pubDate>
		<dc:creator>Matthieu Suiche</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.msuiche.net/2007/01/31/windows-vista-and-unexported-kernel-symbols-part-ii-32bits-version/</guid>
		<description><![CDATA[This paper exposes part II of my previous article about Windows Vista and internals structures. This one is talking about the 32bits version and aims to show new authencity tricks.
Download it from the following link:
 Windows_Vista_32bits_and_unexported_kernel_symbols.pdf
Cheers,
]]></description>
			<content:encoded><![CDATA[<p>This paper exposes part II of my previous article about Windows Vista and internals structures. This one is talking about the 32bits version and aims to show new authencity tricks.</p>
<p>Download it from the following link:<br />
<a href="http://www.msuiche.net/papers/Windows_Vista_32bits_and_unexported_kernel_symbols.pdf"> Windows_Vista_32bits_and_unexported_kernel_symbols.pdf</a></p>
<p>Cheers,</p>
]]></content:encoded>
			<wfw:commentRss>http://www.msuiche.net/2007/01/31/windows-vista-and-unexported-kernel-symbols-part-ii-32bits-version/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Windows Vista 64-bits and unexported kernel symbols.</title>
		<link>http://www.msuiche.net/2007/01/01/windows-vista-64-bits-and-unexported-kernel-symbols/</link>
		<comments>http://www.msuiche.net/2007/01/01/windows-vista-64-bits-and-unexported-kernel-symbols/#comments</comments>
		<pubDate>Mon, 01 Jan 2007 00:00:00 +0000</pubDate>
		<dc:creator>Matthieu Suiche</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.msuiche.net/?p=13</guid>
		<description><![CDATA[Hi,
I&#8217;m gonna published my (the?) first paper of the year 2007 !! :)
This article is talking about Windows Vista 64bits and its system structures which are proteged against rootkit. I also explain how these structures can be authentified without Pathguard.
Windows Vista 64bits and unexported kernel symbols.pdf
Happy New Year !!!
]]></description>
			<content:encoded><![CDATA[<p>Hi,</p>
<p>I&#8217;m gonna published my (the?) first paper of the year 2007 !! :)</p>
<p>This article is talking about Windows Vista 64bits and its system structures which are proteged against rootkit. I also explain how these structures can be authentified without Pathguard.</p>
<p><a href="http://www.msuiche.net/papers/Windows_Vista_64bits_and_unexported_kernel_symbols.pdf">Windows Vista 64bits and unexported kernel symbols.pdf</a></p>
<p>Happy New Year !!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.msuiche.net/2007/01/01/windows-vista-64-bits-and-unexported-kernel-symbols/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
