<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Inside out</title>
	
	<link>http://blog.schatzforensic.com.au</link>
	<description>Bradley Schatz on the nexus of technology and law: computer forensics and electronic discovery</description>
	<lastBuildDate>Thu, 25 Oct 2012 23:29:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/blschatz/insideout" /><feedburner:info uri="blschatz/insideout" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Mobile phone forensic analysis–analysis of JTAG and Chip Off images of Android YAFFS Flash</title>
		<link>http://feedproxy.google.com/~r/blschatz/insideout/~3/SNn7wKT2Q70/</link>
		<comments>http://blog.schatzforensic.com.au/2012/10/mobile-phone-forensic-analysisanalysis-of-jtag-and-chip-off-images-of-android-yaffs-flash/#comments</comments>
		<pubDate>Thu, 25 Oct 2012 23:29:07 +0000</pubDate>
		<dc:creator>Bradley Schatz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.schatzforensic.com.au/2012/10/mobile-phone-forensic-analysisanalysis-of-jtag-and-chip-off-images-of-android-yaffs-flash/</guid>
		<description><![CDATA[On 18 October 2012 I presented, at the Breakpoint 2012conference, some preliminary results of research I have been undertaking in the area of forensic acquisition and analysis of mobile phones. Specifically I have been focusing on Android phones using NAND flash memory and the YAFFS2 file system. The seminar principally addressed methods of acquisition (JTAG [...]


Related posts:<ol><li><a href='http://blog.schatzforensic.com.au/2012/08/android-forensic-analysis-lecture-at-breakpoint2012-au/' rel='bookmark' title='Permanent Link: Android forensic analysis lecture at Breakpoint2012 (AU)'>Android forensic analysis lecture at Breakpoint2012 (AU)</a> <small>I will be presenting a lecture on Android forensics, focusing...</small></li>
</ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>On 18 October 2012 I presented, at the <a href="http://www.ruxconbreakpoint.com/">Breakpoint 2012</a>conference, some preliminary results of research I have been undertaking in the area of forensic acquisition and analysis of mobile phones. Specifically I have been focusing on Android phones using NAND flash memory and the YAFFS2 file system. The seminar principally addressed methods of acquisition (JTAG and Chip Off) and the fundamental challenges of reconstructing YAFFS2 file systems from said acquisitions. The slides from the presentation can be found <a href="http://www.schatzforensic.com.au/presentations/Breakpoint2012-Android-Schatz.pdf">here</a>.</p>
<p>&#160;</p>
<p><a href="http://www.schatzforensic.com.au/presentations/Breakpoint2012-Android-Schatz.pdf"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Object Headers Slide Screenshot" border="0" alt="Object Headers Slide Screenshot" src="http://blog.schatzforensic.com.au/wp-content/uploads/2012/10/Object-Headers-Slide-Screenshot1.jpg" width="519" height="389" /></a></p>
<p>If you are currently undertaking work in this area and having trouble interpreting any flash images, I would be happy to hear from you. </p>


<p>Related posts:<ol><li><a href='http://blog.schatzforensic.com.au/2012/08/android-forensic-analysis-lecture-at-breakpoint2012-au/' rel='bookmark' title='Permanent Link: Android forensic analysis lecture at Breakpoint2012 (AU)'>Android forensic analysis lecture at Breakpoint2012 (AU)</a> <small>I will be presenting a lecture on Android forensics, focusing...</small></li>
</ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p><img src="http://feeds.feedburner.com/~r/blschatz/insideout/~4/SNn7wKT2Q70" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.schatzforensic.com.au/2012/10/mobile-phone-forensic-analysisanalysis-of-jtag-and-chip-off-images-of-android-yaffs-flash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.schatzforensic.com.au/2012/10/mobile-phone-forensic-analysisanalysis-of-jtag-and-chip-off-images-of-android-yaffs-flash/</feedburner:origLink></item>
		<item>
		<title>Android forensic analysis lecture at Breakpoint2012 (AU)</title>
		<link>http://feedproxy.google.com/~r/blschatz/insideout/~3/sLVMKE6m7kc/</link>
		<comments>http://blog.schatzforensic.com.au/2012/08/android-forensic-analysis-lecture-at-breakpoint2012-au/#comments</comments>
		<pubDate>Thu, 23 Aug 2012 00:38:51 +0000</pubDate>
		<dc:creator>Bradley Schatz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.schatzforensic.com.au/2012/08/android-forensic-analysis-lecture-at-breakpoint2012-au/</guid>
		<description><![CDATA[I will be presenting a lecture on Android forensics, focusing on flash acquisition and YAFFS2 filesystem analysis at the Breakpoint 2012 conference in Melbourne, Australia, this October 18. The speaker lineup is looking fascinating, with leaders in the area of mobile security (both IOS and Android), hardware reverse engineering and Windows internals being on my [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>I will be presenting a lecture on Android forensics, focusing on flash acquisition and YAFFS2 filesystem analysis at the <a href="http://www.ruxconbreakpoint.com/">Breakpoint 2012</a> conference in Melbourne, Australia, this October 18. </p>
<p>The <a href="http://www.ruxconbreakpoint.com/speakers/">speaker lineup</a> is looking fascinating, with leaders in the area of mobile security (both IOS and Android), hardware reverse engineering and Windows internals being on my list of lectures to attend. </p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p><img src="http://feeds.feedburner.com/~r/blschatz/insideout/~4/sLVMKE6m7kc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.schatzforensic.com.au/2012/08/android-forensic-analysis-lecture-at-breakpoint2012-au/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.schatzforensic.com.au/2012/08/android-forensic-analysis-lecture-at-breakpoint2012-au/</feedburner:origLink></item>
		<item>
		<title>Digital forensic evidence chapter published in Expert Evidence text</title>
		<link>http://feedproxy.google.com/~r/blschatz/insideout/~3/OJ5ioFtVpJE/</link>
		<comments>http://blog.schatzforensic.com.au/2012/07/digital-forensic-evidence-chapter-published-in-expert-evidence-text/#comments</comments>
		<pubDate>Wed, 11 Jul 2012 11:10:48 +0000</pubDate>
		<dc:creator>Bradley Schatz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.schatzforensic.com.au/2012/07/digital-forensic-evidence-chapter-published-in-expert-evidence-text/</guid>
		<description><![CDATA[My chapter on digital evidence has recently been published in the Australian authority on Expert Evidence. The chapter joins technical treatment of over 75 other areas of expert evidence. The chapter aims to inform the legal professional and fact finder as to the foundations, context, principles, practices, limitations and challenges of the field of digital [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>My chapter on digital evidence has recently been published in the Australian authority on <a href="http://www.thomsonreuters.com.au/expert-evidence-online/productdetail/34138">Expert Evidence</a>. The chapter joins technical treatment of over 75 other areas of expert evidence.</p>
<p>The chapter aims to inform the legal professional and fact finder as to the foundations, context, principles, practices, limitations and challenges of the field of digital forensics, in order that they may understand the field enough to effectively engage with the digital forensic expert. It is anticipated that this chapter will additionally be of interest to practitioners and researchers in the field.</p>
<p>The chapter is currently available only to subscribers of the loose leaf service and online via Westlaw AU and Thomson Legal Online. The chapter will be individually purchasable via the above website in due course; if you wish to purchase a copy in the short term, please contact Thomson Reuters via email. </p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p><img src="http://feeds.feedburner.com/~r/blschatz/insideout/~4/OJ5ioFtVpJE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.schatzforensic.com.au/2012/07/digital-forensic-evidence-chapter-published-in-expert-evidence-text/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.schatzforensic.com.au/2012/07/digital-forensic-evidence-chapter-published-in-expert-evidence-text/</feedburner:origLink></item>
		<item>
		<title>Digital Evidence and Computer Crime 3rd edition – book chapter in press</title>
		<link>http://feedproxy.google.com/~r/blschatz/insideout/~3/wsUQboxMA7s/</link>
		<comments>http://blog.schatzforensic.com.au/2011/05/digital-evidence-and-computer-crime-3rd-edition-book-chapter-in-press/#comments</comments>
		<pubDate>Mon, 23 May 2011 12:04:28 +0000</pubDate>
		<dc:creator>Bradley Schatz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.schatzforensic.com.au/2011/05/digital-evidence-and-computer-crime-3rd-edition-book-chapter-in-press/</guid>
		<description><![CDATA[I just received in the mail an author’s advance copy of Eoghan Casey’s &#34;Digital Evidence and Computer Crime&#34;. Originally published in 2000, this update sees the book now in its third edition. Amongst a wide range of significant updates&#160; is a chapter Eoghan and I co-authored. The focus of the chapter is on methods of [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>I just received in the mail an author’s advance copy of Eoghan Casey’s &quot;<a href="http://www.amazon.com/Digital-Evidence-Computer-Crime-Third/dp/0123742684">Digital Evidence and Computer Crime</a>&quot;. Originally published in 2000, this update sees the book now in its third edition. Amongst a wide range of significant updates&#160; is a chapter Eoghan and I co-authored. The focus of the chapter is on methods of conducing digital investigations. </p>
<p>Identifying methods of reliably transitioning from investigative goals or claims to substantiated facts has been a significant preoccupation within the field over the last decade. Perspectives have ranged across extremes: from those that deny such methods exist (“it’s an art”) to those that attempt to characterise method as a system or recipe&#160; (“it’s a process”). Only in recent years have clear inroads been made into the relationship between digital forensics and the scientific method in general. </p>
<p>The chapter begins with a comparison of a wide range of perspectives on digital investigation methodologies, and follows with practical guidance on applying the scientific method as a methodology for each step of a digital investigation. The chapter concludes with an investigative scenario demonstrating how the scientific method may be applied in the context of an actual case. </p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p><img src="http://feeds.feedburner.com/~r/blschatz/insideout/~4/wsUQboxMA7s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.schatzforensic.com.au/2011/05/digital-evidence-and-computer-crime-3rd-edition-book-chapter-in-press/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.schatzforensic.com.au/2011/05/digital-evidence-and-computer-crime-3rd-edition-book-chapter-in-press/</feedburner:origLink></item>
		<item>
		<title>Finding Object Roots in Vista (direct from dump file)</title>
		<link>http://feedproxy.google.com/~r/blschatz/insideout/~3/2zLwxrTL1Ak/</link>
		<comments>http://blog.schatzforensic.com.au/2010/07/finding-object-roots-in-vista-direct-from-dump-file/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 01:41:12 +0000</pubDate>
		<dc:creator>Bradley Schatz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.schatzforensic.com.au/2010/07/finding-object-roots-in-vista-direct-from-dump-file/</guid>
		<description><![CDATA[The last post discussed finding object roots in Vista using the self referential semantics of the Kernel Processor Control Region (KPCR). Object roots are the starting points that structural interpretation approaches use to begin to interpret kernel structures, in much the same way that one might use the MBR of a hard disk to find [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>The last post discussed finding object roots in Vista using the self referential semantics of the Kernel Processor Control Region (KPCR). Object roots are the starting points that structural interpretation approaches use to begin to interpret kernel structures, in much the same way that one might use the MBR of a hard disk to find partitions on a drive, or the NTFS boot sector to find the MFT area in a filesystem. </p>
<p>The KPCR scanning approach is general purpose in nature. Assuming an appropriate value for the Directory Table Base of the kernel address space, it will yield potential KPCR structures. It is, however, time consuming. Windbg is able to almost instantly find the KPCR in images stored as dump files, so it obviously isn’t employing scanning as a method of identification. </p>
<p>Looking further into the Microsoft dump file format, the dump file has a header which contains a field called KdDebuggerDataBlock, which is a pointer to the kernel virtual address of a KDDEBUGGER_DATA64 structure. This is the same structure which is the end goal of the KPCR trick.</p>
<p>Accordingly, when run against a dump file, the experimental version of volatility currently uses the KdDebuggerDataBlock as the object root, rather than KPCR.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p><img src="http://feeds.feedburner.com/~r/blschatz/insideout/~4/2zLwxrTL1Ak" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.schatzforensic.com.au/2010/07/finding-object-roots-in-vista-direct-from-dump-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.schatzforensic.com.au/2010/07/finding-object-roots-in-vista-direct-from-dump-file/</feedburner:origLink></item>
		<item>
		<title>Finding Object Roots in Vista (KPCR)</title>
		<link>http://feedproxy.google.com/~r/blschatz/insideout/~3/jOvTiALhD3c/</link>
		<comments>http://blog.schatzforensic.com.au/2010/07/finding-object-roots-in-vista-kpcr/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 05:53:47 +0000</pubDate>
		<dc:creator>Bradley Schatz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.schatzforensic.com.au/2010/07/finding-object-roots-in-vista-kpcr/</guid>
		<description><![CDATA[This is the third of a series of posts describing how&#160; the volatility memory forensics application was ported to a new Windows operating system version. Apart from the inevitable changes in kernel data structures which typically come with a new kernel version, Vista brought with it a change which broke one of volatility’s key techniques [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>This is the third of a series of posts describing how&#160; the volatility memory forensics application was ported to a new Windows operating system version. </p>
<p>Apart from the inevitable changes in kernel data structures which typically come with a new kernel version, Vista brought with it a change which broke one of volatility’s key techniques for identifying kernel objects. The change was <a href="http://en.wikipedia.org/wiki/Address_space_layout_randomization">Address Space Layout Randomisation</a> (ALSR). Thanks to Gil Peterson for sharing this detail. </p>
<p>Structural interpretation approaches to volatile memory analysis rely on finding an initial kernel object from which one may traverse to other objects, in order to find&#160; objects of interest to the investigator. With XP, volatility employed “<a href="http://moyix.blogspot.com/2008/04/finding-kernel-global-variables-in.html">the KPCR trick</a>”. XP reliably stored the “Kernel Processor Control Region” at a fixed kernel virtual address (0xffdff000). From the KPCR structure, one then traverses intermediate structures (KdVersionBlock, then DebuggerDataList)&#160; to access interesting structures such as the active process list.</p>
<p>In Vista, KPCR is not stored at a fixed address, so the first problem in porting volatility to Vista and above, to reliably get an initial reference to a valid KPCR structure. </p>
<p>Damien Aumaitre points out in his 2009 paper &quot;A little journey inside Windows memory&quot; that KPCR is self referencing. Based on this observation I undertook the following investigations:</p>
<p>1. I loaded up windbg to look at the KPCR of a XP dump file.</p>
<p>2. Set the symbol path</p>
<blockquote><p>.sympath SRV*C:\dev\symbolcache\symbols*http://msdl.microsoft.com/download/symbols</p>
<p>.reload</p>
</blockquote>
<p>3. Examined the KPCR</p>
<blockquote><p>kd&gt; !pcr      <br />KPCR for Processor 0 at ffdff000:       <br />&#160;&#160;&#160; Major 1 Minor 1       <br />&#160;&#160;&#160; NtTib.ExceptionList: ed89dcf0       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; NtTib.StackBase: ed89ddf0       <br />&#160;&#160;&#160;&#160;&#160;&#160; NtTib.StackLimit: ed89a000       <br />&#160;&#160;&#160;&#160; NtTib.SubSystemTib: 00000000       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; NtTib.Version: 00000000       <br />&#160;&#160;&#160;&#160;&#160; NtTib.UserPointer: 00000000       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; NtTib.SelfTib: 7ffdf000 </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; SelfPcr: ffdff000      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Prcb: ffdff120       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Irql: 00000000       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IRR: 00000000       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IDR: ffffffff       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; InterruptMode: 00000000       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IDT: 8003f400       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; GDT: 8003f000       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; TSS: 80042000 </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; CurrentThread: 86724020      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; NextThread: 00000000       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IdleThread: 80552740 </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; DpcQueue: </p>
</blockquote>
<p>4. Note that the first line indicates that KPCR is at VA 0xffdff000, which is to be expected. Note also that the SelfPcr attribute (at offset 0x1c from the start of the structure) has the same value at the address of the KPCR. This is what Aumaitre means by self referencing. There exists an additional self referencing property here related to the Prcb field which I will not go into.</p>
<p>5. Repeating the above on a Vista image gives the following. Note that the KPCR structure is not at 0xffdff000, and again, that the SelfPcr field points to the KPCR address.</p>
<blockquote><p>kd&gt; !pcr      <br />KPCR for Processor 0 at 818f4700:       <br />&#160;&#160;&#160; Major 1 Minor 1       <br />&#160;&#160;&#160; NtTib.ExceptionList: 9a7bfcf0       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; NtTib.StackBase: 00000000       <br />&#160;&#160;&#160;&#160;&#160;&#160; NtTib.StackLimit: 00000000       <br />&#160;&#160;&#160;&#160; NtTib.SubSystemTib: 80148000       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; NtTib.Version: 000c3fac       <br />&#160;&#160;&#160;&#160;&#160; NtTib.UserPointer: 00000001       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; NtTib.SelfTib: 7ffdf000 </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; SelfPcr: 818f4700      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Prcb: 818f4820       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Irql: 00000000       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IRR: 00000000       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IDR: ffffffff       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; InterruptMode: 00000000       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IDT: 822eb400       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; GDT: 822eb000       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; TSS: 80148000 </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; CurrentThread: 89d5eac0      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; NextThread: 00000000       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IdleThread: 818f8300 </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; DpcQueue: </p>
</blockquote>
<p>6. I checked the offsets for the SelfPcr as below:</p>
<blockquote><p>kd&gt; dt -r0 _KPCR 818f4700      <br />ntdll!_KPCR       <br />&#160;&#160; +0&#215;000 NtTib&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : _NT_TIB       <br />&#160;&#160; +0&#215;000 Used_ExceptionList : 0x9a7bfcf0 _EXCEPTION_REGISTRATION_RECORD       <br />&#160;&#160; +0&#215;004 Used_StackBase&#160;&#160; : (null)       <br />&#160;&#160; +0&#215;008 Spare2&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : (null)       <br />&#160;&#160; +0x00c TssCopy&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 0&#215;80148000 Void       <br />&#160;&#160; +0&#215;010 ContextSwitches&#160; : 0xc3fac       <br />&#160;&#160; +0&#215;014 SetMemberCopy&#160;&#160;&#160; : 1       <br />&#160;&#160; +0&#215;018 Used_Self&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 0x7ffdf000 Void       <br />&#160;&#160; +0x01c SelfPcr&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 0x818f4700 _KPCR       <br />&#160;&#160; +0&#215;020 Prcb&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 0x818f4820 _KPRCB       <br />&#160;&#160; +0&#215;024 Irql&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 0 &#8221;       <br />&#160;&#160; +0&#215;028 IRR&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 0       <br />&#160;&#160; +0x02c IrrActive&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 0       <br />&#160;&#160; +0&#215;030 IDR&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 0xffffffff       <br />&#160;&#160; +0&#215;034 KdVersionBlock&#160;&#160; : 0x818f3c18 Void       <br />&#160;&#160; +0&#215;038 IDT&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 0x822eb400 _KIDTENTRY       <br />&#160;&#160; +0x03c GDT&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 0x822eb000 _KGDTENTRY       <br />&#160;&#160; +0&#215;040 TSS&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 0&#215;80148000 _KTSS       <br />&#160;&#160; +0&#215;044 MajorVersion&#160;&#160;&#160;&#160; : 1       <br />&#160;&#160; +0&#215;046 MinorVersion&#160;&#160;&#160;&#160; : 1       <br />&#160;&#160; +0&#215;048 SetMember&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 1       <br />&#160;&#160; +0x04c StallScaleFactor : 0&#215;962       <br />&#160;&#160; +0&#215;050 SpareUnused&#160;&#160;&#160;&#160;&#160; : 0 &#8221;       <br />&#160;&#160; +0&#215;051 Number&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 0 &#8221;       <br />&#160;&#160; +0&#215;052 Spare0&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 0 &#8221;       <br />&#160;&#160; +0&#215;053 SecondLevelCacheAssociativity : 0 &#8221;       <br />&#160;&#160; +0&#215;054 VdmAlert&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 0       <br />&#160;&#160; +0&#215;058 KernelReserved&#160;&#160; : [14] 0       <br />&#160;&#160; +0&#215;090 SecondLevelCacheSize : 0       <br />&#160;&#160; +0&#215;094 HalReserved&#160;&#160;&#160;&#160;&#160; : [16] 0       <br />&#160;&#160; +0x0d4 InterruptMode&#160;&#160;&#160; : 0       <br />&#160;&#160; +0x0d8 Spare1&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; : 0 &#8221;       <br />&#160;&#160; +0x0dc KernelReserved2&#160; : [17] 0 </p>
</blockquote>
<h3>Scanning KPCR in Vista memory dumps</h3>
<p>With the former in mind, I set about writing a volatility scanner that scans the kernel address space for potential KPCR structures. I note here that in my development I have relied on dump files generated by Matthieu Suiche’s <a href="http://moonsols.com/blog/2-blog/9-moonsols-windows-memory-toolkit">win32dd</a>. Dump files store the physical address of the kernel page directory base, which is enough to reconstruct the kernel address space, however, other means will be necessary if operating on raw (DD) style memory images. </p>
<p>The scanner runs through each kernel address space memory region, looking for memory patterns that match the following constraints:</p>
<ol>
<li>The VA of the start of candidate bytes&#160; &gt;= 0&#215;80000000 (i.e. it is in the kernel address space) </li>
<li>The SelfPcr field at offset 0x1c from the start of the candidate bytes contains a pointer to the virtual address of the start of the KPCR structure </li>
<li>The Prcb field at offset 0&#215;20 within the structure contains a pointer to the start of the _KPRCB structure, which is embedded within the KPCR structure at offset 0&#215;120. </li>
</ol>
<p>I have observed the above scanning technique to identify one KPCR value per processor, which is consistent with the described function of the KPCR – it is a per processor structure. </p>
<h3>Usage</h3>
<p>The above scanner is usable as the volatility command kpcrscan, and the output of it used via the parameter &#8211;kpcr= </p>
<p>An example of usage is presented in the screen capture below:</p>
<p><a href="http://blog.schatzforensic.com.au/wp-content/uploads/2010/07/image3.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blog.schatzforensic.com.au/wp-content/uploads/2010/07/image_thumb3.png" width="644" height="324" /></a></p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p><img src="http://feeds.feedburner.com/~r/blschatz/insideout/~4/jOvTiALhD3c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.schatzforensic.com.au/2010/07/finding-object-roots-in-vista-kpcr/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.schatzforensic.com.au/2010/07/finding-object-roots-in-vista-kpcr/</feedburner:origLink></item>
		<item>
		<title>Adding Vista structure definitions to Volatility</title>
		<link>http://feedproxy.google.com/~r/blschatz/insideout/~3/tpvTI0KRnL4/</link>
		<comments>http://blog.schatzforensic.com.au/2010/07/adding-vista-structure-definitions-to-volatility/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 23:53:30 +0000</pubDate>
		<dc:creator>Bradley Schatz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.schatzforensic.com.au/2010/07/adding-vista-structure-definitions-to-volatility/</guid>
		<description><![CDATA[This post follows on from the last post. In the last post I described how I extended Volatility to work with the symbols for Window XP SP3. In this one, I describe how I applied the approach to Vista SP0. 1. Downloaded Windows Vista RTM x86 retail symbols from Microsoft. I installed them to C:\dev\VistaSP0x86\vista-x86 [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>This post follows on from the last post. In the last post I described how I extended Volatility to work with the symbols for Window XP SP3. In this one, I describe how I applied the approach to Vista SP0.</p>
<p>1. Downloaded <a href="http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx">Windows Vista RTM x86 retail symbols</a> from Microsoft. I installed them to C:\dev\VistaSP0x86\vista-x86 </p>
<p>2. I then ran the tpi_vtypes.py program against the symbol file which corresponds to the general Vista kernel, ntkrnlmp.pdb, generating a python symbol definition file for volatility in the process. </p>
<blockquote><p>C:\mysrc\pdbparse&gt;c:\Python25\python.exe tpi_vtypes.py c:\dev\VistaSP0x86\symbols\EXE\ntkrnlmp.pdb &gt; vista_sp0_x86_vtypes.py</p>
</blockquote>
<h2><font color="#000000"></font></h2>
<p>3. Moved vista_sp0_x86_vtypes.py to the \plugins\overlays\windows folder within the volatility source tree. </p>
<p>4. Created a new profile implementation called vista_sp0_x86.py. I based this off the existing windows XP SP2 profile, modifying to suit. In essence, the new profile is composed of three things: </p>
<ol>
<li>a definition of native types (these appear to generally apply to 32bit windows operating systems (I simply took the exiting windows definitions); </li>
<li>a definition of the specific structural types which I just generated (contained in vista_sp0_x86_vtypes.py); </li>
<li>an overlay definition (I simply reused the existing XP SP2 one with the fixups from the last post. </li>
</ol>
<blockquote><p>vistasp0x86overlays = copy.deepcopy(vtypes.xpsp2overlays) </p>
<p>vistasp0x86overlays['_MMVAD_SHORT'][1]['Flags'][0] =&#160; lambda x: x['u'][0]      <br />vistasp0x86overlays['_CONTROL_AREA'][1]['Flags'][0] =&#160; lambda x: x['u'][0]       <br />vistasp0x86overlays['_MMVAD_LONG'][1]['Flags'][0] =&#160; lambda x: x['u'][0]       <br />vistasp0x86overlays['_MMVAD_LONG'][1]['Flags2'][0] =&#160; lambda x: x['u'][0] </p>
<p>vista_sp0_x86_vtypes.ntkrnlmp_types.update(crashdump.crash_vtypes)      <br />vista_sp0_x86_vtypes.ntkrnlmp_types.update(hibernate_vtypes.hibernate_vtypes) </p>
<p>class VistaSP0x86(xp_sp2.WinXPSP2):      <br />&#160;&#160;&#160; &quot;&quot;&quot; A Profile for Windows Vista SP0 x86 &quot;&quot;&quot;       <br />&#160;&#160; native_types = vtypes.x86_native_types_32bit       <br />&#160;&#160; abstract_types = vista_sp0_x86_vtypes.ntkrnlmp_types       <br />&#160;&#160; overlay = vistasp0x86overlays</p>
</blockquote>
<p>The next post will cover the modifications to volatility needed to find KdDebuggerDataBlock – the root of kernel objects required to find active modules and processes amongst other things.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p><img src="http://feeds.feedburner.com/~r/blschatz/insideout/~4/tpvTI0KRnL4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.schatzforensic.com.au/2010/07/adding-vista-structure-definitions-to-volatility/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.schatzforensic.com.au/2010/07/adding-vista-structure-definitions-to-volatility/</feedburner:origLink></item>
		<item>
		<title>Adding new structure definitions to Volatility</title>
		<link>http://feedproxy.google.com/~r/blschatz/insideout/~3/g_mRLUd_xr4/</link>
		<comments>http://blog.schatzforensic.com.au/2010/05/adding-new-structure-definitions-to-volatility/#comments</comments>
		<pubDate>Tue, 18 May 2010 03:45:44 +0000</pubDate>
		<dc:creator>Bradley Schatz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.schatzforensic.com.au/2010/05/adding-new-structure-definitions-to-volatility/</guid>
		<description><![CDATA[I am currently preparing for a day long tutorial on Windows Volatile Memory Forensics for Incident Response, which Michael Cohen and I are presenting at the AusCERT conference next week. A significant part of the analysis component of the tutorial will focus on the open source volatile memory analysis tool, Volatility. A current limitation Volatility’s [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>I am currently preparing for a day long tutorial on <a href="http://conference.auscert.org.au/conf2010/program_schedule.html">Windows Volatile Memory Forensics for Incident Response</a>, which Michael Cohen and I are presenting at the <a href="http://conference.auscert.org.au/conf2010/">AusCERT conference</a> next week. A significant part of the analysis component of the tutorial will focus on the <a href="https://www.volatilesystems.com/default/volatility">open source volatile memory analysis tool, Volatility</a>.</p>
<p>A current limitation Volatility’s support for Windows is that it doesn’t support analysis of anything other than Windows XP. This comes down to two issues:</p>
<ol>
<li>The core kernel structures (symbols) which are related to information about processes, threads, open sockets and the like, tend to change from version to version of Windows; and </li>
<li>The technique that Volatility uses to initially find those structures does not work on Vista and above. </li>
</ol>
<p>In this post I will be relating the first steps of how I ported Volatility to accept new symbol definitions in support of Vista in x86 (ie 32 bit) systems.&#160; Beta code (complete enough to run pslist amongst others) is now in subversion.</p>
<p>My approach involved integrating automatically generated type definitions for Windows XP SP3, before applying the approach to Vista. It may seem redundant to use automatically generated type definitions for XP SP3, given that volatility works fine with its own hand coded ones for this version, however, doing so provides a useful foundation step, highlighting any assumptions being made higher up in the code. </p>
<h2>Generating new structure definitions from PDB files</h2>
<p>Thankfully all of the heavy lifting has been done by others. <a href="http://moyix.blogspot.com/">Brendan Dolan-Gavit</a> has produced <a href="http://code.google.com/p/pdbparse/">pdbparse</a> that generates volatility compatible structure definitions from the symbol files that Microsoft produces. </p>
<p>The steps I undertook are:</p>
<p>1. Downloaded <a href="http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx">Windows XP with Service Pack 3 x86 retail symbols</a> from Microsoft. I installed them to C:\dev\XPSP3_x86\ </p>
<p>2. Checked out via subversion the <a href="http://volatility.googlecode.com/svn/branches/Volatility-1.4_beta1">current beta of Volatility</a>. </p>
<p>3. Checked out via subversion pdbparse. </p>
<p>4. I installed the python <a href="http://construct.wikispaces.com/">construct module</a>, on which pdbparse relies. </p>
<p>5. I then ran the tpi_vtypes.py program from pdparse against the symbol file which corresponds to the Windows XP uni-processor kernel, ntoskrnl.pdb, generating a python symbol definition file for volatility in the process. </p>
<blockquote><p>C:\mysrc\pdbparse&gt;c:\Python25\python.exe tpi_vtypes.py c:\dev\XPSP3_x86\symbols\EXE\ntoskrnl.pdb &gt; xp_sp3_x86_vtypes.py</p>
</blockquote>
<h2>Adding structure definitions to Volatility</h2>
<p>Adding the new structure definitions to volatility is simplified by the new “profile” abstraction recently introduced. Profiles allow for defining sets of structure definitions specific to a particular envionment. In this case, I created a new profile called “WinXPSP3”.</p>
<p>The steps I took are as follow:</p>
<p>1. Moved xp_sp3_x86_vtypes.py to the \plugins\overlays\windows folder within the volatility source tree. </p>
<p>2. Created a new profile implementation called xp_sp3_x86.py. I based this off the existing windows XP SP2 profile, modifying to suit. In essence, the new profile is composed of three things: </p>
<ul>
<li>a definition of native types (these appear to generally apply to 32bit windows operating systems (I simply took the exiting windows definitions); </li>
<li>a definition of the specific structural types which I just generated (contained in vista_sp0_x86_vtypes.py); </li>
<li>an overlay definition (I simply reused the existing XP SP2 one </li>
</ul>
<blockquote><p>class WinXPSP3(xp_sp2.WinXPSP2):      <br />&#160;&#160;&#160; &quot;&quot;&quot; A Profile for windows XP SP3 &quot;&quot;&quot;       <br />&#160;&#160;&#160; native_types = vtypes.x86_native_types_32bit       <br />&#160;&#160;&#160; abstract_types = xp_sp3_x86_vtypes.ntoskrnl_types       <br />&#160;&#160;&#160; overlay = vtypes.xpsp2overlays</p>
</p>
</blockquote>
<p><tt></tt></p>
<p>3. Running volatility against an appropriate image resulted in the following:</p>
<blockquote><p>c:\mysrc\Volatility-1.4_beta1&gt;c:\Python26\python.exe volatility.py &#8211;profile Win      <br />XPSP3 -f &quot;C:\Users\bradley\Desktop\images\RAM\XPSP3-x86.dmp&quot; pslist       <br />Volatile Systems Volatility Framework 1.4_beta1       <br />invalid syntax (xp_sp3_x86_vtypes.py, line 63)</p>
</blockquote>
<p>4. Inspecting the auto-generated structure definitions where the error was yielded the following:</p>
<blockquote><p>&#8216;Valid&#8217; : [ 0x0, [UNIMPLEMENTED LF_BITFIELD]],</p>
</blockquote>
<p>5. Reading the above error indicated that pdbparse does not handle bit-fields in structures.&#160; I modified tpi_vtypes.py to simply ignore any structure features that pdbparse tagged as UNIMPLEMENTED.</p>
<blockquote><p>def print_vtype(lf):      <br />&#160;&#160;&#160; print &quot;&#160; &#8216;%s&#8217; : [ %#x, {&quot; % (lf.name, lf.size)       <br />&#160;&#160;&#160; for s in lf.fieldlist.substructs:       <br />&#160;&#160;&#160; ms =&#160; member_str(s.index)       <br /><em>&#160;&#160;&#160; if (ms.find(&quot;UNIMPLEMENTED&quot;) &gt;= 0):        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; pass         <br />&#160;&#160;&#160; else:</em>       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; print &quot;&#160;&#160;&#160; '%s' : [ %#x, %s],&quot; % (s.name, s.offset, ms)       <br />&#160;&#160;&#160; print &quot;} ],&quot;</p>
</blockquote>
<p>6. I ran volatility again:</p>
<blockquote><p>c:\mysrc\Volatility-1.4_beta1&gt;c:\Python26\python.exe volatility.py &#8211;profile WinXPSP3 -f &quot;C:\Users\bradley\Desktop\images\RAM\XPSP3-x86.dmp&quot; pslist      <br />Volatile Systems Volatility Framework 1.4_beta1       <br />Error &#8211; Flags has no offset in object _MMVAD_SHORT. Check that vtypes has a concerete definition for it.       <br />Error &#8211; Flags has no offset in object _CONTROL_AREA. Check that vtypes has a concerete definition for it.       <br />Error &#8211; Flags2 has no offset in object _MMVAD_LONG. Check that vtypes has a concerete definition for it.       <br />Error &#8211; Flags has no offset in object _MMVAD_LONG. Check that vtypes has a concerete definition for it.       <br />&#8216;NoneType&#8217; object has no attribute &#8216;Signature&#8217;</p>
</blockquote>
<p>7. Reading the above error indicated that the new structure definitions were missing some fields. These are most likely related to the removal of the bit-fields. Viewing the structures which correspond in the original vtypes.py file for XP SP2, we have:</p>
<blockquote><p>&#8216;_MMVAD_SHORT&#8217; : [&#160; 0x18, { \      <br />&#160; 'StartingVpn' : [ 0x0, ['unsigned long']], \       <br />&#160; &#8216;EndingVpn&#8217; : [ 0x4, ['unsigned long']], \       <br />&#160; &#8216;Parent&#8217; : [ 0x8, ['pointer', ['_MMVAD']]], \       <br />&#160; &#8216;LeftChild&#8217; : [ 0xc, ['pointer', ['_MMVAD']]], \       <br />&#160; &#8216;RightChild&#8217; : [ 0x10, ['pointer', ['_MMVAD']]], \       <br />&#160; &#8216;Flags&#8217; : [ 0x14, ['unsigned long']], \       <br />} ], \</p>
</blockquote>
<p>8. The corresponding auto-generated structure definition is:</p>
<blockquote><p>&#160; &#8216;_MMVAD_SHORT&#8217; : [ 0x18, {      <br />&#160;&#160;&#160; 'StartingVpn' : [ 0x0, ['unsigned long']],       <br />&#160;&#160;&#160; &#8216;EndingVpn&#8217; : [ 0x4, ['unsigned long']],       <br />&#160;&#160;&#160; &#8216;Parent&#8217; : [ 0x8, ['pointer', ['_MMVAD']]],       <br />&#160;&#160;&#160; &#8216;LeftChild&#8217; : [ 0xc, ['pointer', ['_MMVAD']]],       <br />&#160;&#160;&#160; &#8216;RightChild&#8217; : [ 0x10, ['pointer', ['_MMVAD']]],       <br />&#160;&#160;&#160; &#8216;u&#8217; : [ 0x14, ['__unnamed_1498']],       <br />} ],</p>
</blockquote>
<p>9. In the standard Volatility type definitions, offset 0&#215;14 into the struct is an unsigned long type called Flags, whereas is the auto generated types, the same offset is a field called “u”, which has type &#8216;__unnamed_1498&#8242;. Further investigation reveals that the latter type appears to be a Union structure.</p>
<p>10. In order to resolve this discrepancy, my goal was to take the working field definition for “Flags” from the original “_MMVAD_SHORT” structure, and transplant it in the newly generated structures. </p>
<p>11. The problem with doing that is that editing automatically generated code tends to lead to problems down the line. Fortunately, recent work in the volatility framework has anticipated this kind of need, with the introduction of type “overlays”. </p>
<p>12. The existing XP type definitions already contained an overlay for the flags field, so Michael Cohen gave me the magic incantation necessary to patch the in memory version of the overlay structure. The patched version of the _MMVAD_SHORT overlay contains a field ‘Flags’, which, when the offset of it is read, returns the offset of the ‘u’ field of the auto-generated type definition. Note that I am glossing over significant complexity here. </p>
<blockquote><p>xpsp3overlays['_MMVAD_SHORT'][1]['Flags'][0] =&#160; lambda x: x['u'][0] </p>
</blockquote>
<p>My next post will cover adding Vista structure definitions, and a final post will cover the key modifications needed to find the KPCR structure.</p>
<p><a title="http://code.google.com/p/pdbparse/source/browse/#svn%3Fstate%3Dclosed" href="http://code.google.com/p/pdbparse/source/browse/#svn%3Fstate%3Dclosed"></a></p>
<p>&#160;</p>
<p>&#160;</p>
</p>
<p><a title="http://www.wasm.ru/print.php?article=dmp_format_en" href="http://www.wasm.ru/print.php?article=dmp_format_en"></a></p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p><img src="http://feeds.feedburner.com/~r/blschatz/insideout/~4/g_mRLUd_xr4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.schatzforensic.com.au/2010/05/adding-new-structure-definitions-to-volatility/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.schatzforensic.com.au/2010/05/adding-new-structure-definitions-to-volatility/</feedburner:origLink></item>
		<item>
		<title>libewf Java bindings released</title>
		<link>http://feedproxy.google.com/~r/blschatz/insideout/~3/kpWROhfUC68/</link>
		<comments>http://blog.schatzforensic.com.au/2010/02/libewf-java-bindings-released/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 00:13:23 +0000</pubDate>
		<dc:creator>Bradley Schatz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.schatzforensic.com.au/2010/02/libewf-java-bindings-released/</guid>
		<description><![CDATA[&#160; As a part of the AFF4 work I have been involved in, I recently created a set of java bindings for libewf. If you want read access to the block content or metadataof EnCase compatible forensic images from the java programming language then this is for you. They are currently tested on the windows [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p>As a part of the AFF4 work I have been involved in, I recently created a set of java bindings for libewf. If you want read access to the block content or metadataof EnCase compatible forensic images from the java programming language then this is for you.</p>
<p>They are currently tested on the windows platform (x86). UNIX and x64 support should be trivial.</p>
<p>They are now included in the <a href="http://sourceforge.net/projects/libewf/files/">libewf repository</a> as libewf-java.</p>
<p>Thanks to Joachim Metz for libewf and David Collett for his python bindings (on which I based my code).</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p><img src="http://feeds.feedburner.com/~r/blschatz/insideout/~4/kpWROhfUC68" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.schatzforensic.com.au/2010/02/libewf-java-bindings-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.schatzforensic.com.au/2010/02/libewf-java-bindings-released/</feedburner:origLink></item>
		<item>
		<title>Mounting EWF’s on windows with freely available tools</title>
		<link>http://feedproxy.google.com/~r/blschatz/insideout/~3/4ljQqUk_c2U/</link>
		<comments>http://blog.schatzforensic.com.au/2009/12/mounting-ewfs-on-windows-with-freely-available-tools/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 03:16:17 +0000</pubDate>
		<dc:creator>Bradley Schatz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.schatzforensic.com.au/2009/12/mounting-ewfs-on-windows-with-freely-available-tools/</guid>
		<description><![CDATA[Harlan recently posted a small reference to mounting EWF’s on windows machines using freely available utilities. David Loveall has produced a script called proxy_ewf.py which will do the heavy lifting of mounting EWF&#8217;s via imdisk. It is not straightforward to get working so I have copied the instructions originally provided by David Loveall and further [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Harlan recently posted a small reference to <a href="http://windowsir.blogspot.com/2009/11/even-more-linky-goodness.html">mounting EWF’s on windows machines using freely available utilities</a>. David Loveall has produced a script called proxy_ewf.py which will do the heavy lifting of mounting EWF&#8217;s via <a href="http://www.ltr-data.se/opencode.html#ImDisk">imdisk</a>. </p>
<p>It is not straightforward to get working so I have copied the instructions originally provided by David Loveall and further expanded on them below. </p>
<p>1. Extract the Windows mount_ewf files into a directory.&#160; I used the current <a href="http://sourceforge.net/projects/libewf/files/mount_ewf/mount_ewf_windows-20091123/mount_ewf-20091123.zip/download">mount_ewf_windows-20091123.zip</a> file found in the downloads area of <a href="http://sourceforge.net/projects/libewf/">libewf</a>. Download from the same place the <a href="http://sourceforge.net/projects/libewf/files/mount_ewf/mount_ewf_windows-20091123/proxy_ewf-20091123.py/download">proxy_ewf.py</a> file and place it in the same directory (I used c:\opt\proxy_ewf\).</p>
<p>2. <strike>Download and install the Visual Studio runtime files, if you don&#8217;t already have them.</strike> Don’t bother as they are now included in the mount_ewf windows distribution.</p>
<p>3. Download and install <a href="http://www.ltr-data.se/opencode.html#ImDisk">ImDisk</a>. Be careful about driver loading if you are on Vista and above.</p>
<p>4: Install python for windows. I used python 2.5 (x86) but 2.6 should work as well.</p>
<p>5. If you are on an x64 system, move imdisk.exe from the c:\Windows\system32 directory into the same directory as the mount_ewf and proxy_ewf.py files. The proxy_ewf script wont be able to run imdisk.exe due to the WOW64 file virtualisation features otherwise.</p>
<p>6. Run proxy_ewf:</p>
<blockquote><p>c:\python25\python c:\opt\proxy_ewf\proxy_ewf-20091123.py c:\evidence\foo.e01 </p>
</blockquote>
<p>If you get a &quot;Version number mismatch&quot; error, it is likely that the _ctypes.pyd file in the mount_ewf distribution is incompatible with the one in your just installed python distribution. I deleted the one in the mount_ewf directory and things worked fine. </p>
<p>At this point, you should see a new drive letter (or letters) appear in windows explorer. </p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p><img src="http://feeds.feedburner.com/~r/blschatz/insideout/~4/4ljQqUk_c2U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.schatzforensic.com.au/2009/12/mounting-ewfs-on-windows-with-freely-available-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.schatzforensic.com.au/2009/12/mounting-ewfs-on-windows-with-freely-available-tools/</feedburner:origLink></item>
	</channel>
</rss>
