<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
   <channel>
   <title>int for(ensic){blog;}</title>
   <link>http://computer.forensikblog.de/en/</link>
   <description>Notes on computer forensics - international edition.</description>
   <language>en</language>
      <copyright>Copyright 2012</copyright>
      <lastBuildDate>Mon, 28 Nov 2011 16:00:00 +0000</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/?v=5.12</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

      
      <item>
      <title>Evtx Parser Version 1.1.1</title>
         <description>
         <![CDATA[<p>By Andreas Schuster <br />
        Copyright &copy; 2012 <a href="http://computer.forensikblog.de/en/">int for(ensic){blog;}</a>. All rights reserved. Reproduction for commercial purposes (including online advertisement) interdicted.</p>]]>
         <![CDATA[<p>I'm releasing version 1.1.1 of the Windows Eventlog Parser library and tools collection for Perl. This version fixes a memory leak. I thank Heinz Mueller for reporting the issue and helping with testing. Please see the change log for other smaller changes. </p>

<p>The current version is now available for <a href="/files/evtx/Parse-Evtx-current.zip">download</a>.</p>]]>
         
         </description>
      <link>http://computer.forensikblog.de/en/2011/11/evtx-parser-1-1-1.html</link>
      <guid>http://computer.forensikblog.de/en/2011/11/evtx-parser-1-1-1.html</guid>
      <category>Vista event log</category>
      <pubDate>Mon, 28 Nov 2011 16:00:00 +0000</pubDate>
      </item>
      
      <item>
      <title>DFRWS 2012</title>
         <description>
         <![CDATA[<p>By Andreas Schuster <br />
        Copyright &copy; 2011 <a href="http://computer.forensikblog.de/en/">int for(ensic){blog;}</a>. All rights reserved. Reproduction for commercial purposes (including online advertisement) interdicted.</p>]]>
         <![CDATA[The next Digital Forensic Research Conference (DFRWS) will held from August 6 to 8, 2012 in Washington, D.C. at the <a href="http://www.dfrws.org/2012/location.shtml">Embassy Suites Downtown</a> hotel. The <a href="http://www.dfrws.org/2012/cfp.shtml">Call for Papers</a>, workshops, and panels is now open; submissions are due February 20, 2012.]]>
         
         </description>
      <link>http://computer.forensikblog.de/en/2011/11/dfrws-2012.html</link>
      <guid>http://computer.forensikblog.de/en/2011/11/dfrws-2012.html</guid>
      <category>Side notes</category>
      <pubDate>Tue, 22 Nov 2011 16:00:00 +0000</pubDate>
      </item>
      
      <item>
      <title>Evtx Parser Version 1.1.0</title>
         <description>
         <![CDATA[<p>By Andreas Schuster <br />
        Copyright &copy; 2011 <a href="http://computer.forensikblog.de/en/">int for(ensic){blog;}</a>. All rights reserved. Reproduction for commercial purposes (including online advertisement) interdicted.</p>]]>
         <![CDATA[<p>It's my pleasure to announce a major release of my Evtx parser and tools collection. Version 1.1.0 significantly increases the ability to parse and transform Microsoft's proprietary binary XML dialect. The new version covers about 90% of XML tokens and data types.</p>

<p>Evtx Parser and the Parse::EVTX Perl library is now available for <a href="/files/evtx/Parse-Evtx-current.zip">download</a> (ZIP).</p>]]>
         <![CDATA[<p>The library now parses CDATA sections (node type 0x07), XML entity references like &amp;amp; (node type 0x09) and processing instructions (node types 0x0a and 0x0b).</p>

<p>I've also added support for arrays of all kinds of integers, single and double precision floating point numbers, GUIDs, FILETIME and the SYSTEMTIME structure. </p>

<p>A couple of months ago I had recived one report about a node type 0x08, but, unfortunately, no data to analyze. So far, I did not succeed in creating this token on Windows 7, using version 7A of the SDK. Even though this appears to be a rare token, I'd like to add a proper handler routine to EvtxParser. I'd greatly appreciate any samples of this binary XML token.</p>

<p>This is also the moment to thank the community for their continued support by reporting bugs, and donating samples. Your samples helped me to improve my understanding of Microsoft's binary XML dialect. My thanks go to <a href="http://www.woanware.co.uk/">Mark Woan</a> for providing specially crafted test data and teaching me how to create test cases. I plan to release my test data set over the next weeks, in order to support tool validation efforts.</p>]]>
         </description>
      <link>http://computer.forensikblog.de/en/2011/11/evtx-parser-version-110.html</link>
      <guid>http://computer.forensikblog.de/en/2011/11/evtx-parser-version-110.html</guid>
      <category>Vista event log</category>
      <pubDate>Fri, 11 Nov 2011 16:00:00 +0000</pubDate>
      </item>
      
      <item>
      <title>Timers and Times</title>
         <description>
         <![CDATA[<p>By Andreas Schuster <br />
        Copyright &copy; 2011 <a href="http://computer.forensikblog.de/en/">int for(ensic){blog;}</a>. All rights reserved. Reproduction for commercial purposes (including online advertisement) interdicted.</p>]]>
         <![CDATA[<p>Microsoft Windows timer objects provide a means to execute code at a certain time or in a periodic interval. From analyzing timers we can make some assumptions about a system's future.</p>]]>
         <![CDATA[<p>A couple of weeks ago Jamie Levy had presented <a href="http://gleeda.blogspot.com/2011/09/volatility-20-timeliner-registryapi.html">Timeliner</a>, a set of Volatility plugins that builds a timeline of past events from volatile data. Michael Hale Ligh recently published another <a href="http://mnin.blogspot.com/2011/10/aint-nuthin-but-ktimer-thing-baby.html">plugin for Volatility</a>, that enumerates Windows kernel timer objects. He uses timers to locate hidden kernel modules. I'd like to extend and combine their work by decoding the DueTime member of the KTIMER structure. This could help in extending a timeline into the system's future.</p>

<p>If you look closely at the output of Michael's plugin, and also at Mattieu Suiche's <a href="http://pastebin.com/FiRsGW3f">debugger script</a>, you will notice the timer's 64bit <tt>DueTime</tt>, formatted as a pair of two 32bit integers. A correlation between DueTime and time of the real world may not be obvious.</p>

<p>When we deal with timed events, two time scales are important: SystemTime reflects the date and time of the outside world, or the wall clock. However, most internal activity refers to InterruptTime, which starts at boot up and hence reflects the system's uptime. Both scales measure the time in units of 100 ns and express them as 64bit integers (see <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms724284(v=vs.85).aspx">FILETIME</a>). The current value of both time scales can be found in <tt>SharedUserData</tt>:</p>

<pre>
kd> ? SharedUserData
Evaluate expression: 2147352576 = 7ffe0000
kd> dt -r _KUSER_SHARED_DATA 7ffe0000
nt!_KUSER_SHARED_DATA
   &#43;0x000 TickCountLow     : 0x19c7a
   &#43;0x004 TickCountMultiplier : 0xfa00000
   &#43;0x008 InterruptTime    : _KSYSTEM_TIME 0x3`d76bb6e4
     &#43;0x000 LowPart          : 0xd76bb6e4
      &#43;0x004 High1Time        : 0n3
      &#43;0x008 High2Time        : 0n3
   &#43;0x014 SystemTime       : _KSYSTEM_TIME 0x1C6846E`81004d6c
   &#43;0x020 TimeZoneBias     : _KSYSTEM_TIME 0xffffffef`3c773000
...
</pre>

<p>It is easy to convert <tt>SystemTime</tt> into a human-readable format</p>

<pre>
kd> !filetime 0x1C6846E`81004d6c
 5/31/2006 04:55:57.218 (UTC)
</pre>

<p>Now let's have a look at some kernel timers. Here is a simple example to start with:</p>

<pre>
kd> dt -r _KTIMER 80e30498
ntdll!_KTIMER
   &#43;0x000 Header           : _DISPATCHER_HEADER
      &#43;0x000 Type             : 0x8 ''
      &#43;0x001 Absolute         : 0 ''
      &#43;0x002 Size             : 0xa ''
      &#43;0x003 Inserted         : 0x1 ''
      &#43;0x004 SignalState      : 0n0
      &#43;0x008 WaitListHead     : _LIST_ENTRY [ 0x80e30460 - 0x80e30460 ]
   &#43;0x010 DueTime          : _ULARGE_INTEGER 0x3`db256384
      &#43;0x000 LowPart          : 0xdb256384
      &#43;0x004 HighPart         : 3
      &#43;0x000 QuadPart         : 0x3`db256384
   &#43;0x018 TimerListEntry   : _LIST_ENTRY [ 0x80e26a10 - 0x80542690 ]
   &#43;0x020 Dpc              : (null) 
   &#43;0x024 Period           : 0n0 
</pre>

<p>Kernel Timers are waitable objects, hence the KTIMER structure starts with a <a href="/en/2006/02/dispatcher_header.html">DISPATCHER_HEADER</a>. A <tt>Type</tt> of 8 identifies a notification timer. The timer has been inserted into the list of timers, so it is active. DueTime refers to the InterruptTime scale. In order to convert it into a human-readable time stamp, we subtract the current InterruptTime as shown in shared user data, and then add the corresponding SystemTime from the same structure. Finally, we interpret the resulting value as a FILETIME.</p>

<pre>
kd> !filetime (0x3`db256384 - 0x3`d76bb6e4 &#43; 0x1C6846E`81004d6c)
 5/31/2006 04:56:03.468 (UTC)
</pre>

<p>This timer was set to expire May 31st, 2006 at 04:56 UTC.</p>

<p>During an investigation I take a closer look at timers that are set to expire hours or even days in the future. One common example for this class of timers is the "time bomb" that uninstalls a trojan horse after a couple of days after it had searched through the user's documents and exfiltrated matching data.</p>

<h4>Periodic Timers</h4>

<p>Timers can be configured to periodically trigger an action. This can be seen in the following example.</p>

<pre>
kd> dt -r _KTIMER 80540d70
ntdll!_KTIMER
   &#43;0x000 Header           : _DISPATCHER_HEADER
      &#43;0x000 Type             : 0x8 ''
      &#43;0x001 Absolute         : 0 ''
      &#43;0x002 Size             : 0xa ''
      &#43;0x003 Inserted         : 0x1 ''
      &#43;0x004 SignalState      : 0n1
      &#43;0x008 WaitListHead     : _LIST_ENTRY [ 0x80540d78 - 0x80540d78 ]
   &#43;0x010 DueTime          : _ULARGE_INTEGER 0x3`e9711d2a
   &#43;0x018 TimerListEntry   : _LIST_ENTRY [ 0x80542688 - 0x80542688 ]
   &#43;0x020 Dpc              : 0x80540d98 _KDPC
      &#43;0x000 Type             : 0n19
      &#43;0x002 Number           : 0 ''
      &#43;0x003 Importance       : 0x1 ''
      &#43;0x004 DpcListEntry     : _LIST_ENTRY [ 0x0 - 0x0 ]
      &#43;0x00c DeferredRoutine  : 0x804ef844  void  nt!IopIrpStackProfilerTimer&#43;0
      &#43;0x010 DeferredContext  : 0x80540d20 Void
      &#43;0x014 SystemArgument1  : (null) 
      &#43;0x018 SystemArgument2  : (null) 
      &#43;0x01c Lock             : (null) 
   &#43;0x024 Period           : 0n60000
</pre>

<p>Note that Period in this example is greater than zero. This timer will invoke the DeferredRoutine every 60 seconds.</p>

<p>We can calculate the time of the next occurrence, using the same formula as before:</p>

<pre>
kd> !filetime (0x3`e9711d2a - 0x3`d76bb6e4 &#43; 0x1C6846E`81004d6c)
 5/31/2006 04:56:27.453 (UTC)
</pre>

<p>Periodic timers may lead you to critical parts of a software or system. During investigations, I've seen "watchdog" type code, that re-infects a partly disinfected system, or code that periodically exfiltrates data.</p>

<h4>Absolute Timers</h4>

<p>The timer in the next example is set to expire at the end of the century, at 12/31/2099 23:00:00.001 UTC, which is 01/01/2100 00:00:00.001 local time. Was this intended by the programmer?</p>

<pre>
kd> dt -r _KTIMER 80546660
ntdll!_KTIMER
   &#43;0x000 Header           : _DISPATCHER_HEADER
      &#43;0x000 Type             : 0x8 ''
      &#43;0x001 Absolute         : 0x1 ''
      &#43;0x002 Size             : 0xa ''
      &#43;0x003 Inserted         : 0x1 ''
      &#43;0x004 SignalState      : 0n0
      &#43;0x008 WaitListHead     : _LIST_ENTRY [ 0x80546668 - 0x80546668 ]
   &#43;0x010 DueTime          : _ULARGE_INTEGER 0x68ece8`0a46c088
   &#43;0x018 TimerListEntry   : _LIST_ENTRY [ 0x805427a0 - 0x805466f8 ]
   &#43;0x020 Dpc              : 0x805466a0 _KDPC
      &#43;0x000 Type             : 0n19
      &#43;0x002 Number           : 0 ''
      &#43;0x003 Importance       : 0x1 ''
      &#43;0x004 DpcListEntry     : _LIST_ENTRY [ 0x0 - 0x0 ]
      &#43;0x00c DeferredRoutine  : 0x805256c6 void  nt!ExpCenturyDpcRoutine&#43;0
      &#43;0x010 DeferredContext  : (null) 
      &#43;0x014 SystemArgument1  : (null) 
      &#43;0x018 SystemArgument2  : (null) 
      &#43;0x01c Lock             : (null) 
   &#43;0x024 Period           : 0n0
</pre>

<p>Our first indicator is the name that is associated with the DeferredRoutine: <tt>ExpCenturyDpcRoutine</tt>. If you examine the Header carefully you will notice that <tt>Absolute</tt> is different from null.</p>

<p>As we've seen before, InterruptTime is a steadily increasing counter. Even changing the system's clock affects only the difference between InterruptTime and SystemTime, but not InterruptTime in itself. The majority of timer objects are relative to the InterruptTime scale; the corresponding parameter to SetTimer/SetTimerEx is negative.</p>

<p>By calling SetTimer/SetTimerEx with a non-negative FILETIME, the programmer binds the timer's DueTime to the SystemTime scale. Whenever the system's clock gets adjusted, Windows has to adjust these timers as well. In order to recognize the proper timers, Windows maintains the Absolute property in the object's header.</p>

<p>Beside a handler routine for the dawn of a new century you should also find a timer that triggers <tt>ExpTimeZoneDpcRoutine</tt> whenever daylight saving time starts and ends.</p>

<p>In a forensic examination, an "absolute" timer indicates the programmer's will to tie an event to the real world's clock. Understanding the meaning of that specific date and time to the programmer may become the key to your investigation and reveal the programmer's motive.</p>

<h4>Overly large DueTime</h4>

<p>During your investigation you are likely to stumble upon overly large DueTimes. The corresponding timer would expire in a few thousand years and WinDbg refuses to convert the date at all.</p>

<p>The value 0x0fffffff`ffffffff interpreted as FILETIME is 06/18/5254 21:21:00. So, one could use the higher bits as flags without problems. I noticed that any offending DueTimes have their most significant nibble set to 0x8. But what does this flag indicate?</p>

<p>I think it could be kind of a "parking brake". By turning the flag on, the timer's expiration would be effectively prevented. The original DueTime is still preserved, so the timer could be reactivated at any time (possibly leading to instant removal from the list, if DueTime has passed).</p>

<p>Here is an example: </p>

<pre>
kd> dt -r _KTIMER ffb7f500
ntdll!_KTIMER
   &#43;0x000 Header           : _DISPATCHER_HEADER
      &#43;0x000 Type             : 0x8 ''
      &#43;0x001 Absolute         : 0 ''
      &#43;0x002 Size             : 0xa ''
      &#43;0x003 Inserted         : 0x1 ''
      &#43;0x004 SignalState      : 0n0
      &#43;0x008 WaitListHead     : _LIST_ENTRY [ 0xffb7f508 - 0xffb7f508 ]
   &#43;0x010 DueTime          : _ULARGE_INTEGER 0x80000000`50c86d74
   &#43;0x018 TimerListEntry   : _LIST_ENTRY [ 0xff67d128 - 0x80542840 ]
   &#43;0x020 Dpc              : 0xffb7f558 _KDPC
      &#43;0x000 Type             : 0n19
      &#43;0x002 Number           : 0 ''
      &#43;0x003 Importance       : 0x1 ''
      &#43;0x004 DpcListEntry     : _LIST_ENTRY [ 0x340030 - 0x260033 ]
      &#43;0x00c DeferredRoutine  : 0x80525b0c  void  nt!ExpTimerDpcRoutine&#43;0
      &#43;0x010 DeferredContext  : 0xffb7f500 Void
      &#43;0x014 SystemArgument1  : 0x00330030 Void
      &#43;0x018 SystemArgument2  : 0x0033005c Void
      &#43;0x01c Lock             : (null) 
   &#43;0x024 Period           : 0n0
</pre>

<p>The unmasked DueTime is<br />
0x80000000`50c86d74 && 0x80000000`00000000 =<br />
0x00000000'50c86d74</p>

<pre>
kd> !filetime ( 0x0`50c86d74 - 0x3`d76bb6e4 &#43; 0x1C6846E`81004d6c)
 5/31/2006 04:30:42.843 (UTC)
</pre>

<p>Please note that the original DueTime is earlier than the current system time.</p>]]>
         </description>
      <link>http://computer.forensikblog.de/en/2011/10/timers-and-times.html</link>
      <guid>http://computer.forensikblog.de/en/2011/10/timers-and-times.html</guid>
      <category>Memory analysis</category>
      <pubDate>Thu, 27 Oct 2011 16:00:00 +0000</pubDate>
      </item>
      
      <item>
      <title>Evtx Parser Version 1.0.8</title>
         <description>
         <![CDATA[<p>By Andreas Schuster <br />
        Copyright &copy; 2011 <a href="http://computer.forensikblog.de/en/">int for(ensic){blog;}</a>. All rights reserved. Reproduction for commercial purposes (including online advertisement) interdicted.</p>]]>
         <![CDATA[<p>I'm releasing version 1.0.8 of my Windows Event Log Parser library and tools collection. While there are only minor enhancements to the library, the distribution format has been changed significantly. I apologize for any inconvenience this may cause. The archive is available for download <a href="/files/evtx/Parse-Evtx-current.zip">here</a>.</p>]]>
         <![CDATA[<p>The most important changes from version 1.0.7 are:</p>

<p>All objects derived from <tt>BxmlNode</tt> will now emit a short hex dump in case of an unknown opcode. Please forward me these dumps if possible in order to help me improve the program.</p>

<p><tt>Evtx.pm</tt> now reads the number of the oldest chunk from the file header and exposes it through the <tt>OldestChunk</tt> property. Please note that the first chunk doesn't have to be the oldest one. The <tt>evtxinfo.pl</tt> sample program has been modified to indicate the oldest and the currently active chunk, as shown in the following example:</p>

<pre>$ evtxinfo.pl rotated.evtx 
Information from file header:
Format version  : 3.1
Flags           : 0x00000000
         File is: clean
     Log is full: no
Current chunk   : 2 of 16
Oldest chunk    : 3
Next Record#    : 5257
Check sum       : pass

<p>Information from chunks:</p><p>  Chunk file (first/last)     log (first/last)      Header Data  
- ----- --------------------- --------------------- ------ ------
      1       4681       4976       4902       5197   pass   pass
*     2       4977       5035       5198       5256   pass   pass
&gt;     3        593        888        814       1109   pass   pass
      4        889       1135       1110       1356   pass   pass
      5       1136       1431       1357       1652   pass   pass
...
</p></pre>

<p>The asterisk (*) marks the current chunk and the angular bracket (&gt;) indicates the oldest chunk.</p>

<p>Richard W. M. Jones provided online help in POD format for the sample programs. He also initiated a major change to the distribution format and provided me with a makefile. Thank you very much!</p>

<p>From now on distribution files will be named <tt>Parse-Evtx-&lt;version&gt;.zip</tt>; <tt><a href="/files/evtx/Parse-Evtx-current.zip">Parse-Evtx-current.zip</a></tt> will point to the current version. The old name&nbsp;<tt>EvtxParse-current.zip</tt> will be maintained for backward compatibility.</p>

<p>The library and sample programs can now be installed the usual way:</p>

<pre>$ perl Makefile.pl
$ make
$ sudo make install
</pre>
]]>
         </description>
      <link>http://computer.forensikblog.de/en/2011/06/evtx-parser-version-108.html</link>
      <guid>http://computer.forensikblog.de/en/2011/06/evtx-parser-version-108.html</guid>
      <category>Vista event log</category>
      <pubDate>Thu, 09 Jun 2011 16:00:00 +0000</pubDate>
      </item>
      
      <item>
      <title>Mac OS X memory analysis with Volafox</title>
         <description>
         <![CDATA[<p>By Andreas Schuster <br />
        Copyright &copy; 2011 <a href="http://computer.forensikblog.de/en/">int for(ensic){blog;}</a>. All rights reserved. Reproduction for commercial purposes (including online advertisement) interdicted.</p>]]>
         <![CDATA[<p>Kyeong-Sik Lee and the Korean Digital Forensic Research Center have released <a href="http://code.google.com/p/volafox/">Volafox</a>, a free and open-source tool to analyze Mac OS X memory images. Volafox is based on work by Matthieu Suiche (<a href="http://blackhat.com/presentations/bh-dc-10/Suiche_Matthieu/Blackhat-DC-2010-Advanced-Mac-OS-X-Physical-Memory-Analysis-wp.pdf">paper</a> and <a href="http://www.msuiche.net/con/BHDC2010_MacOSX_PhysicalMemory.pdf">slides</a>) and the <a href="https://www.volatilesystems.com/default/volatility">Volatility</a> memory analysis framework.</p>]]>
         <![CDATA[<p>Volafox is written in pure Python and requires Python 2.5 or later. You simply <a href="http://code.google.com/p/volafox/">download</a> and unzip the archive. The tool's usage is straight forward:</p>

<pre>
$ python volafox.py
Memory analyzer for OS X 0.5 - n0fate
Contact: rapfer@gmail.com
usage: python volafox.py -i MEMORY_IMAGE -s KERNEL_IMAGE -o INFORMATION
 
-= CAUTION =-
this program need to physical memory image, kernel image(mach_kernel)
and it support to Intel x86 Architecture only :(
 
INFORMATION:
os_version	 Dawin kernel detail version
machine_info	 Kernel version, cpu, memory information
mount_info	 Mount information
kern_kext_info	 Kernel KEXT(Kernel Extensions) information
kext_info	 KEXT(Kernel Extensions) information
proc_info	 Process list
syscall_info	 Kernel systemcall information
</pre>

<p>The memory image needs to be in plain format. So, it can not process images that were obtained by ATC-NY's Mac Memory Reader without further format conversion. Having a Mach-O Address Space for this would be a nice addition.</p>

<p>While it should be possible to find the kernel in the memory dump, this has not been implemented (yet) and Volafox requires a separate kernel image.</p>

<p>For starters, I suggest to go with the sample files that were provided by the author: a <a href="http://forensic.korea.ac.kr/volafox/files/SnowLeopard/MemoryImage.zip">memory image</a> and the proper <a href="http://forensic.korea.ac.kr/volafox/files/SnowLeopard/mach_kernel.zip"> Mach kernel</a>. Now let's find out about the OS version first:</p>

<pre>
$ python volafox.py -i MemoryImage.mem -s mach_kernel -o os_version
Memory Image: MemoryImage.mem
Kernel Image: mach_kernel
Information: os_version
Detail dawin kernel version: 10A432
</pre>

<p>This command displays the <tt>ProductBuildVersion</tt> that you can also find in <tt>/System/Library/CoreServices/SystemVersion.plist</tt>.</p>

<p>Here is some more information about the machine:</p>

<pre>
$ python volafox.py -i MemoryImage.mem -s mach_kernel -o machine_info
Memory Image: MemoryImage.mem
Kernel Image: mach_kernel
Information: machine_info
 
-= Mac OS X Basic Information =-
Major Version: 10
Minor Version: 0
Number of Physical CPUs: 2
Size of memory in bytes: 536870912 bytes
Size of physical memory: 536870912 bytes
Number of physical CPUs now available: 2
Max number of physical CPUs now possible: 2
Number of logical CPUs now available: 2
Max number of logical CPUs now possible: 2
</pre>

<p>Volafox can traverse the list of mounted file systems:</p>

<pre>
$ python volafox.py -i MemoryImage.mem -s mach_kernel -o mount_info
Memory Image: MemoryImage.mem
Kernel Image: mach_kernel
Information: mount_info
 
-= Mount List =-
list entry	fstypename	mount on name	mount from name
0304a290	hfs	/	/dev/disk0s2
03049948	devfs	/dev	devfs
03049000	autofs	/net	map -hosts
0403d520	autofs	/home	map auto_home
00000000	vmhgfs	/Volumes/VMware Shared Folders	.host:/
</pre>

<p>OS X maintains a doubly-linked list of processes; the list head is reachable via the <tt>kernproc</tt> symbol (see Mattieu Suiche's paper). </p>

<pre>
$ python volafox.py -i MemoryImage.mem -s mach_kernel -o proc_info
Memory Image: MemoryImage.mem
Kernel Image: mach_kernel
Information: proc_info
 
-= process list =-
list_entry_next	pid	ppid	process name	username
03290d20	0	0	kernel_task		
03290a80	1	0	launchdask	n0fate	
032902a0	2	1	launchctlk	root	
032907e0	10	1	kextddask	root	
03290540	11	1	DirectoryService	root	
03290000	12	1	notifydask	root	
0359bd20	13	1	diskarbitrationd	root	
0359ba80	14	1	configdask	root	
0359b7e0	15	1	syslogdask	root	
0359b540	16	1	distnotedk	root	
0359b000	17	1	mDNSResponder	_mdnsresponder	
0359b2a0	19	1	securitydk	_mdnsresponder	
03a5a7e0	24	1	ntpdhdask	_mdnsresponder	
03bc7d20	26	1	usbmuxdask	_usbmuxd	
03bc7a80	30	1	mdschdask	_mdnsresponder	
03bc77e0	31	1	loginwindow	n0fate	
03bc72a0	32	1	KernelEventAgent	_mdnsresponder	
03bc7000	34	1	hiddhdask	_mdnsresponder	
03bdaa80	35	1	fseventsdk	_mdnsresponder	
03befd20	37	1	dynamic_pager	_mdnsresponder	
03bef7e0	42	1	autofsdask	_mdnsresponder	
03a5a2a0	53	1	taskgatedk	_usbmuxd	
03bdad20	54	1	coreservicesd	root	
03a5a540	55	1	WindowServer	root	
03bda540	57	1	vmware-tools-dae	_mdnsresponder	
03a5a000	74	1	airportdsk	_atsserver	
03befa80	78	1	coreaudiod	_coreaudiod	
03bda2a0	79	1	launchdask	n0fate	
03bef000	83	79	Dockhdask	n0fate	
03bc7540	84	79	SystemUIServer	n0fate	
04166d20	85	79	Finderask	n0fate	
03bef2a0	92	79	fontddask	n0fate	
041667e0	95	79	pboardask	n0fate	
04166000	96	79	quicklookd	n0fate	
044ddd20	99	79	UserEventAgent	n0fate	
044dd000	100	79	ServerScanner	n0fate	
044fed20	105	79	AirPort Base Sta	n0fate	
044dd7e0	106	79	vmware-tools-use	n0fate	
044dd540	108	79	CCacheServer	n0fate	
03bda000	110	79	TISwitcher	n0fate	
0085e758	120	1	backupdask	n0fate
</pre>

<p>A process can be selected by its PID in order to display a few more details:</p>

<pre>
$ python volafox.py -i MemoryImage.mem -s mach_kernel -o proc_info -x 120
Memory Image: MemoryImage.mem
Kernel Image: mach_kernel
Information: proc_info
Dump PID: 120
 
-= process: 120=-
list_entry_next	pid	ppid	process name		username
0085e758	120	1	backupdask	n0fate
task_ptr: 3bd81f4
vm_map_t: 41b2520
prev: 46145d8
next: 461402c
start: 100000000
end: 7fffffe00000
neutries: 3a
entries_pageable: 1
pmap_t: 3bf59f8
page directory pointer: 3bf5828
phys.address of dirbase: 4705c2400000000
object to pde: 1
ref count: 1
nx_enabled: 2
task_map: 0
pm_cr3: 0
pm_pdpt: 25c00000259
pm_pml4: 127df00000000000
</pre>

<p>Volafox also enumerates lists of kernel extensions and system calls. It will raise a flag if a syscall appears to be hooked.</p>]]>
         </description>
      <link>http://computer.forensikblog.de/en/2011/06/mac-os-x-memory-analysis-with-volafox.html</link>
      <guid>http://computer.forensikblog.de/en/2011/06/mac-os-x-memory-analysis-with-volafox.html</guid>
      <category>OS X</category>
      <pubDate>Tue, 07 Jun 2011 16:00:00 +0000</pubDate>
      </item>
      
      <item>
      <title>Evtx Parser Version 1.0.7</title>
         <description>
         <![CDATA[<p>By Andreas Schuster <br />
        Copyright &copy; 2011 <a href="http://computer.forensikblog.de/en/">int for(ensic){blog;}</a>. All rights reserved. Reproduction for commercial purposes (including online advertisement) interdicted.</p>]]>
         <![CDATA[<p>I'm releasing version 1.0.7 of my Windows Event Log Parser. This release fixes a couple of errors and enhances the handling of XML templates. The archive is available for download <a href="/files/evtx/EvtxParser-current.zip">here</a>.</p>]]>
         <![CDATA[<p>The most important changes since version 1.0.5 are:</p>

<ol>
<li>Fixed an error in CRC32 checks. Thanks to Michael Felber for reporting this bug.</li>
<li>Thanks to Andrew Hoog for reporting an error in the documentation.</li>
<li>Precision of the time stamp reported by Type0x11.pm have been increased by one decimal. The outer structure's creation time stamp was not properly parsed by Event.pm. The value can now be accessed as a formatted string through get_time_created().</li>
<li>The contents of all BXmlNodes can now be retrieved as a hex dump by calling get_hexdump().</li>

<p></p><li>Handling of XML templates and NameStrings has been improved to support further research into that subject. Versions up to and including 1.0.5 built strings and template dictionaries on the fly while they parsed a chunk. From now on the dictionaries can be populated based on tables and lists in the chunk header, which is much faster. Template.pm now reports the GUID.</li><p></p>

<li>The example program evtxtemplates.pl was rewritten to make use of the new features. There is now an option to dump templates in hex, too.</li></ol>

<pre>$ ./evtxtemplates.pl --hex sample1.evtx
Template {ECD34601-0225-3E67-B639-D77B70281CE9} at chunk 0, offset 0x0612:
&lt;EventData&gt;
&lt;Data&gt;#0 (type 0x81, optional)#&lt;/Data&gt;
&lt;Binary&gt;#2 (type 0x0e, optional)#&lt;/Binary&gt;&lt;/EventData&gt;<p></p><p>  0610:       00 00 00 00 01 46 d3 ec 25 02 67 3e b6 39    .....F..%.g&gt;.9
  0620: d7 7b 70 28 1c e9 78 00 00 00 0f 01 01 00 01 ff  .{p(..x.........
  0630: ff 6c 00 00 00 39 06 00 00 00 00 00 00 44 82 09  .l...9.......D..
  0640: 00 45 00 76 00 65 00 6e 00 74 00 44 00 61 00 74  .E.v.e.n.t.D.a.t
  0650: 00 61 00 00 00 02 01 00 00 1c 00 00 00 61 06 00  .a...........a..
  0660: 00 00 00 00 00 8a 6f 04 00 44 00 61 00 74 00 61  ......o..D.a.t.a
  0670: 00 00 00 02 0e 00 00 81 04 01 02 00 20 00 00 00  ............ ...
  0680: 84 06 00 00 00 00 00 00 21 b8 06 00 42 00 69 00  ........!...B.i.
  0690: 6e 00 61 00 72 00 79 00 00 00 02 0e 02 00 0e 04  n.a.r.y.........
  06a0: 04 00                                            ..              <br />
</p></pre>]]>
         </description>
      <link>http://computer.forensikblog.de/en/2011/02/evtx-parser-version-107.html</link>
      <guid>http://computer.forensikblog.de/en/2011/02/evtx-parser-version-107.html</guid>
      <category>Vista event log</category>
      <pubDate>Mon, 07 Feb 2011 16:00:00 +0000</pubDate>
      </item>
      
      <item>
      <title>Recent Advances in Memory Forensics</title>
         <description>
         <![CDATA[<p>By Andreas Schuster <br />
        Copyright &copy; 2011 <a href="http://computer.forensikblog.de/en/">int for(ensic){blog;}</a>. All rights reserved. Reproduction for commercial purposes (including online advertisement) interdicted.</p>]]>
         <![CDATA[<p>My slides from the <a href="http://www.zisc.ethz.ch/events/workshop2010">ZISC Workshop 2010 on Digital Forensics and Security</a> are now available. The speaker notes, unfortunately, are not. I hope my presentation on <a href="/files/talks/ZISC2010-Recent_Advances_in_Memory_Forensics.pdf">Recent Advances in Memory Forensics</a> will be interesting anyway.</p>]]>
         <![CDATA[<p>The presentation features the following papers (in no particular order):</p>

<ul>
<li><a href="http://cci.cocolog-nifty.com/blog/">Takahiro Haruyama</a>'s port of Volatility to EnCase/EnScript, because it brings volatile data analysis techniques to a widely deployed analysis environment</li>
<li><a href="http://moonsols.com/">Matthieu Suiche</a>'s paper on <a href="http://www.blackhat.com/presentations/bh-dc-10/Suiche_Matthieu/Blackhat-DC-2010-Advanced-Mac-OS-X-Physical-Memory-Analysis-wp.pdf">Mac OS X Physical Memory Analysis</a>, because it opens up access to volatile data on a new software platform</a>
<li><a href="http://www.dfrws.org/2010/proceedings/2010-305.pdf">Treasure and tragedy in kmem_cache mining for live forensics investigation</a> by Andrew Case, Lodovico Marziale, Cris Neckar, and Golden G. Richard III, because their paper describes a new and efficient method to locate important kernel objects on Linux</li>
<li><a href="http://www.cc.gatech.edu/~brendan/ccs09_siggen.pdf">Robust signatures for kernel data structures</a> by Brendan Dolan-Gavitt, Abhinav Srivastava, Patrick Traynor, and Jonathon Giffin, because their work significantly improves the robustness of scanner signatures</li>
<li>Ruichao Zhang, Lianhai Wang, and Shuhui Zhang, because their paper "Windows Memory Analysis Based on KPCR" combines the concepts of scanning for a data structure and list traversal in order to locate data structures, that were hard to detect otherwise (with a mention of <a href="http://archive.hack.lu/2008/2008-hack.lu-aumaitre.pdf">Damien Aumaitre</a> and <a href="http://blog.schatzforensic.com.au/2010/07/finding-object-roots-in-vista-kpcr/">Bradley Schatz)</a>
</ul>
]]>
         </description>
      <link>http://computer.forensikblog.de/en/2010/10/recent-advances-in-memory-forensics.html</link>
      <guid>http://computer.forensikblog.de/en/2010/10/recent-advances-in-memory-forensics.html</guid>
      <category>Memory analysis</category>
      <pubDate>Wed, 06 Oct 2010 16:00:00 +0000</pubDate>
      </item>
      
      <item>
      <title>Linking Event Messages and Resource DLLs</title>
         <description>
         <![CDATA[<p>By Andreas Schuster <br />
        Copyright &copy; 2011 <a href="http://computer.forensikblog.de/en/">int for(ensic){blog;}</a>. All rights reserved. Reproduction for commercial purposes (including online advertisement) interdicted.</p>]]>
         <![CDATA[<p>Without knowledge about the binary XML template, the data in a record's SubstitutionArray can not be interpreted properly. The template is commonly read from the EVTX file. But in some cases, like a single event records carved from unallocated, the template may not be available. Now there's a method to match an event record to its proper message DLL, based on a GUID.</p>]]>
         <![CDATA[<p>A while ago I noticed that templates contain a full 16 bytes GUID. I've modified the <tt>evtxtemplates</tt> sample program to display the GUID, and the template's location in the EVTX file. The updated library and sample program will be available for download soon. Here's a short preview of its output:</p>

<pre>
$ ./evtxtemplates.pl CbsMsg.evtx
Template {47386119-D465-FA45-F96E-E70FFA54FBF7} at chunk 0, offset 0x07d8:
&lt;CbsPackageInitiateChanges 
  xmlns=&quot;http://manifests.microsoft.com/win/2004/08/windows/setup_provider&quot;&gt;
  &lt;PackageIdentifier&gt;#0 (type 0x01)#&lt;/PackageIdentifier&gt;
  &lt;InitialPackageState&gt;#2 (type 0x01)#&lt;/InitialPackageState&gt;
  &lt;IntendedPackageState&gt;#4 (type 0x01)#&lt;/IntendedPackageState&gt;
  &lt;Client&gt;#5 (type 0x01)#&lt;/Client&gt;
&lt;/CbsPackageInitiateChanges&gt;
</pre>

<p>Note the GUID <tt>{47386119-D465-FA45-F96E-E70FFA54FBF7}</tt>. The same GUID can be found in the WEVT_TEMPLATE resource of a message DLL (or any other PE file that defines resources for the event log service).</p>

<p><img alt="Templates and their GUIDs defined in a event message DLL" src="/media/evtx-template-guid.jpg" width="448" height="462" /></p>

<p>The first group of that GUID (the first 4 bytes) are called the TemplateID and are being referenced by the Create Template Instance token (code 0x0c).</p>

<p>It is now possible to apply the method of Timothy Morgan's GrokEVT to the new event log format:</p>

<ol><li>enumerate all (relevant) message DLLs, either by
<ol type="a">
<li>scanning the file system for PE files with a WEVT_TEMPLATE resource, or</li>
<li>locating these files from their registration with the event log service</li>
</ol></li>
<li>build a database of templates, their GUIDs and IDs</li>
<li>look-up the proper template from that database, based on the TemplateID</li>
<li>interpret a record's substitution array according to the template</li>
</ol>
]]>
         </description>
      <link>http://computer.forensikblog.de/en/2010/10/linking-event-messages-and-resource-dlls.html</link>
      <guid>http://computer.forensikblog.de/en/2010/10/linking-event-messages-and-resource-dlls.html</guid>
      <category>Vista event log</category>
      <pubDate>Tue, 05 Oct 2010 16:00:00 +0000</pubDate>
      </item>
      
      <item>
      <title>CarvFS on a Mac</title>
         <description>
         <![CDATA[<p>By Andreas Schuster <br />
        Copyright &copy; 2011 <a href="http://computer.forensikblog.de/en/">int for(ensic){blog;}</a>. All rights reserved. Reproduction for commercial purposes (including online advertisement) interdicted.</p>]]>
         <![CDATA[<p><a href="http://sourceforge.net/projects/carvpath/">CarvFS</a> is a user space file system on top of LibCarvPath and FUSE that makes arbitrary parts of a file system accessible as files. Its main intended use is zero-storage or in-place file carving. I'm frequently using this tool to dissect large structured files and file system images. CarvFS compiles out of the box on Linux; installation on a Mac required a couple of tweaks and patches to sources and CMake files. With the kind help of Rob from the KLPD I eventually succeeded. I'm releasing my set of patches in the hope that it will help others.</p>]]>
         <![CDATA[<p>You should be able to install this on your Mac with the help of <a href="http://www.macports.org/">MacPorts</a> and my set of port files.</p>

<p>Download the <a href="/files/macports/carvfs.current.zip">archive</a> and unzip it into your home. Then run <tt>portindex</tt> to incorporate the meta-data into your MacPorts installation. Next install the three packages:</p>

<p><tt>sudo port install libcarvpath carvfs carvfs-modewf</tt></p>

<p>MacPorts may install additional packages like sqlite3 or libewf to fulfill any prerequisites. Add the library directory of your MacPort installation (usually /opt/local/lib) to DYLD_FALLBACK_LIBRARY_PATH:</p>

<p><tt>export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib</tt></p>

<p>Finally, you can create a mount point and mount an EWF image:</p>

<p><tt>> mkdir ~/mnt</tt><br />
<tt>> carvfs ~/mnt ewf auto myimage.E??</tt><br />
<tt>/Users/myname/mnt/2a99939f3a463faab0233bc6303194c8</tt><br />
<tt>> ls -l ~/mnt/2a99939f3a463faab0233bc6303194c8/</tt><br />
<tt>total 156301496</tt><br />
<tt>d--x--x--x  3 root  wheel            0  1 Jan  1970 CarvFS/</tt><br />
<tt>-r--r--r--  1 root  wheel  80026361856  1 Jan  1970 CarvFS.crv</tt><br />
<tt>-rw-rw-rw-  1 root  wheel         1134  1 Jan  1970 README</tt></p>

<p>This was my first attempt at writing a port file. Also, CMake was giving me a hard time. While everything is working fine for me now, I realize that the ports and patches may not yet ready for inclusion into the MacPorts repository at this time. I greatly appreciate your comments and fixes.</p>]]>
         </description>
      <link>http://computer.forensikblog.de/en/2010/08/carvfs-on-a-mac.html</link>
      <guid>http://computer.forensikblog.de/en/2010/08/carvfs-on-a-mac.html</guid>
      <category>Lab</category>
      <pubDate>Mon, 30 Aug 2010 16:00:00 +0000</pubDate>
      </item>
      
      <item>
      <title>EvtxParser on Ubuntu Linux</title>
         <description>
         <![CDATA[<p>By Andreas Schuster <br />
        Copyright &copy; 2011 <a href="http://computer.forensikblog.de/en/">int for(ensic){blog;}</a>. All rights reserved. Reproduction for commercial purposes (including online advertisement) interdicted.</p>]]>
         <![CDATA[Andrew Hoog has written <a href="http://viaforensics.com/computer-forensics/howto-install-evtxparser-ubuntu-1004.html">step-by-step instructions</a> that explain how to install the event log parser and its prerequisites on Ubuntu Linux 10.04. Thank you very much, Andrew!]]>
         
         </description>
      <link>http://computer.forensikblog.de/en/2010/08/evtxparser-on-ubuntu-linux.html</link>
      <guid>http://computer.forensikblog.de/en/2010/08/evtxparser-on-ubuntu-linux.html</guid>
      <category>Vista event log</category>
      <pubDate>Mon, 09 Aug 2010 16:00:00 +0000</pubDate>
      </item>
      
      <item>
      <title>ZISC Workshop on Digital Forensics 2010</title>
         <description>
         <![CDATA[<p>By Andreas Schuster <br />
        Copyright &copy; 2011 <a href="http://computer.forensikblog.de/en/">int for(ensic){blog;}</a>. All rights reserved. Reproduction for commercial purposes (including online advertisement) interdicted.</p>]]>
         <![CDATA[<p>I'm excited to announce that I will speak at the <a href="http://www.zisc.ethz.ch/events/workshop2010">ZISC 2010 Workshop on Digital Forensics and Security</a>. I will report on the latest advancements in forensic memory analysis on Linux, Mac OS X and Microsoft Windows.The workshop will be held on September 13, 2010 at <a href="http://www.ar.admin.ch/">armasuisse</a> in Berne, Switzerland.</p>]]>
         <![CDATA[<p>The agenda looks really promising and covers a wide variety of research topics in computer forensics, from file systems, to image forensics and teaching of computer forensics. I'm especially looking forward to Darren Bilby's talk on how Google does computer forensics.</p>

<p>Further information is available from <a href="http://www.zisc.ethz.ch/events/workshop2010">the organizers</a>.</p>]]>
         </description>
      <link>http://computer.forensikblog.de/en/2010/07/zisc-workshop-on-digital-forensics-2010.html</link>
      <guid>http://computer.forensikblog.de/en/2010/07/zisc-workshop-on-digital-forensics-2010.html</guid>
      <category>Memory analysis</category>
      <pubDate>Wed, 14 Jul 2010 16:00:00 +0000</pubDate>
      </item>
      
      <item>
      <title>Evtx Parser Version 1.0.5</title>
         <description>
         <![CDATA[<p>By Andreas Schuster <br />
        Copyright &copy; 2011 <a href="http://computer.forensikblog.de/en/">int for(ensic){blog;}</a>. All rights reserved. Reproduction for commercial purposes (including online advertisement) interdicted.</p>]]>
         <![CDATA[<p>There's a new version of my Windows Event Log Parser available for <a href="/files/evtx/EvtxParser-current.zip">download</a>. Version 1.0.5 comes with faster calculations of CRC32 check sums and support for additional data types.</p>]]>
         <![CDATA[<p>The most important changes in version 1.0.5 are as follows:</p>

<p>The various CRC32 check sums are now calculated using <a href="http://search.cpan.org/~olimaul/Digest-CRC-0.14/lib/Digest/CRC.pm">Digest::CRC</a>, which is more than five times faster than <a href="http://search.cpan.org/~fays/Digest-Crc32-0.01/Crc32.pm">Digest::Crc32</a>. The gain in speed becomes evident when processing a large event log file through <tt>evtxinfo.pl</tt>. Thanks to Kristinn Gudjonsson for the suggestion.</p>

<p><a href="http://www.woany.co.uk/">Mark Woan</a> provided me with a sample file showing proper usage of type 0x12 data objects. This type clearly is a <a href="http://msdn.microsoft.com/en-us/library/ms724950%28VS.85%29.aspx">SYSTEMTIME structure</a>. The parser displays the date/time in <a href="http://www.iso.org/iso/date_and_time_format">ISO 8601 format</a> but suppresses the day-of-the-week field.</p>

<p>I've also added support for arrays of HexInt32 and HexInt64 values. Thanks to Christopher Ahearn for providing a sample file.</p>]]>
         </description>
      <link>http://computer.forensikblog.de/en/2010/05/evtx-parser-version-105.html</link>
      <guid>http://computer.forensikblog.de/en/2010/05/evtx-parser-version-105.html</guid>
      <category>Vista event log</category>
      <pubDate>Fri, 07 May 2010 16:00:00 +0000</pubDate>
      </item>
      
      <item>
      <title>Slides from SANS Forensics Summit</title>
         <description>
         <![CDATA[<p>By Andreas Schuster <br />
        Copyright &copy; 2011 <a href="http://computer.forensikblog.de/en/">int for(ensic){blog;}</a>. All rights reserved. Reproduction for commercial purposes (including online advertisement) interdicted.</p>]]>
         <![CDATA[Unfortunately, SANS had to postpose the London Forensics Summit due to massive travel problems caused by volcanic ash floating around the atmosphere. I intended to answer many questions from the forensic community on the native Windows Event Log file format during the presentation. I'm releasing <a href="/files/talks/SANS_Summit_Vista_Event_Log.pdf">my slides</a> in the hope that this will answer at least some of the questions, though the narrative is missing.]]>
         
         </description>
      <link>http://computer.forensikblog.de/en/2010/04/slides-from-sans-forensics-summit.html</link>
      <guid>http://computer.forensikblog.de/en/2010/04/slides-from-sans-forensics-summit.html</guid>
      <category>Vista event log</category>
      <pubDate>Mon, 19 Apr 2010 16:00:00 +0000</pubDate>
      </item>
      
      <item>
      <title>Evtx Parser Version 1.0.4</title>
         <description>
         <![CDATA[<p>By Andreas Schuster <br />
        Copyright &copy; 2011 <a href="http://computer.forensikblog.de/en/">int for(ensic){blog;}</a>. All rights reserved. Reproduction for commercial purposes (including online advertisement) interdicted.</p>]]>
         <![CDATA[<p>Version 1.0.4 of my Microsoft Vista and Windows 2008 Event Log parser is now available for <a href="/files/evtx/EvtxParser-current.zip">download</a>. This version adds data integrity checking and fixes some errors.</p>]]>
         <![CDATA[<p>This version fixes a bug that triggered an assertion in line 37 (or 38, depending on your version) of Module <tt>Node0x0c.pm</tt>. The root cause is quite interesting: Chunks may contain some data behind their last event record. These are either the remains of older records or the beginning of an record that finally grew too large for the remaining space. Commonly these fragments appear as binary garbage and the parser skips over them. </p>

<p>In some cases, however, there is a complete event record and it is in the right position. The parser now tries to recreate the XML structure and when Node0x0c.pm attempts to apply the XML template it can't access its definition. The definition was stored at lower offsets and has been irrecoverably overwritten. This, finally triggered the assertion mentioned above. This condition is now handled more gracefully.</p>

<p>I wish to thank Kristinn Gudjonsson for reporting this error and Michael Felber for providing me with test data.</p>

<p>Recently, I discovered an additional CRC32 check sum in the <a href="/en/2007/07/evtx_chunk_header.html">chunk header</a>. This check sum is calculated over the event data portion of a chunk, from chunk offset <tt>0x200</tt> to <tt>OfsRecNext</tt>. The <tt>evtxinfo.pl</tt> sample program from now on applies this check to every chunk:</p>

<pre>./evtxinfo.pl manipulated-SID.evtx 
Information from file header:
Format version  : 3.1
Flags           : 0x00000000
         File is: clean
     Log is full: no
Current chunk   : 2 of 2
Next Record#    : 161
Check sum       : pass

Information from chunks:
Chunk file (first/last)     log (first/last)      Header Data  
----- --------------------- --------------------- ------ ------
    1          1        113          1        113   pass   pass
    2        114        160        114        160   pass FAILED
</pre>

<p>For this example, a Security ID within an event record was changed by means of a hex editor. Please note the FAILED data integrity check for the manipulated second chunk. It should be noted that this kind of check will only detect accidental corruption. An adversary would simply have to recalculate the check sums to foil detection of his manipulation.</p>]]>
         </description>
      <link>http://computer.forensikblog.de/en/2010/03/evtx-parser-version-104.html</link>
      <guid>http://computer.forensikblog.de/en/2010/03/evtx-parser-version-104.html</guid>
      <category>Vista event log</category>
      <pubDate>Thu, 25 Mar 2010 16:00:00 +0000</pubDate>
      </item>
      
   </channel>
</rss>
