<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5057815281194312844</id><updated>2012-01-22T01:10:28.961Z</updated><category term='Binatone'/><category term='MySQL'/><category term='Tableau'/><category term='Sony'/><category term='Email'/><category term='Satnav'/><category term='PSP'/><category term='Navman'/><category term='Imaging'/><category term='toolbar'/><category term='Enscript'/><category term='Hotmail'/><category term='PlayStation'/><category term='Firefox'/><category term='Garmin'/><category term='Flash Player'/><category term='Goodmans'/><category term='Navigo'/><category term='Encase'/><category term='GPS'/><category term='Medion'/><category term='Triage'/><category term='Facebook'/><category term='Mac OSX'/><category term='C4P'/><category term='TIM'/><title type='text'>Forensics from the sausage factory</title><subtitle type='html'>I worked at the coal face of a UK computer forensics lab and performed production line forensics  - day in day out - welcome to the sausage factory</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>75</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-3403998815917660924</id><published>2011-07-02T23:10:00.003+01:00</published><updated>2011-07-03T20:25:31.812+01:00</updated><title type='text'>SQLite overflow pages and other loose ends...</title><content type='html'>&lt;div style="clear: both;"&gt;This is the fourth post dealing with the elements making up SQLite databases and complements the previous three:&lt;/div&gt;&lt;ul style="clear: both;"&gt;&lt;li&gt;&lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2011/04/carving-sqlite-databases-from.html" target="_blank"&gt;Carving SQLite databases from unallocated clusters&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2011/05/sqlite-pointer-maps-pages.html" target="_blank"&gt;SQLite Pointer Maps pages&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2011/05/analysis-of-record-structure-within.html" target="_blank"&gt;An analysis of the record structure within SQLite databases&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;div&gt;We will remember from these previous posts that:&lt;br /&gt;&lt;ul style="clear: both;"&gt;&lt;li&gt;The entire database file is divided into equally sized &lt;em&gt;pages - &lt;/em&gt;SQLite database files always consist of an exact number of &lt;em&gt;pages&lt;/em&gt;&lt;/li&gt;&lt;li&gt;The &lt;em&gt;page &lt;/em&gt;size is always a power of two between 512 (2&lt;sup&gt;9&lt;/sup&gt;) and 65536 (2&lt;sup&gt;16&lt;/sup&gt;) bytes&lt;br /&gt;&lt;/li&gt;&lt;li&gt;All multibyte integer values are read big endian&lt;/li&gt;&lt;li&gt;The &lt;em&gt;page&lt;/em&gt; size for a database file is determined by the 2 byte integer located at an offset of 16 bytes from the beginning of the database file&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Pages&lt;/em&gt; are numbered beginning from 1, not 0&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Therefore to navigate to a particular &lt;em&gt;page &lt;/em&gt;when you have a &lt;em&gt;page&lt;/em&gt; number you have to calculate the offset from the start of the database using the formula:&lt;br /&gt;&lt;em&gt;offset = (page number-1) x page size&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;and that the database may have the following possible page types:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul style="clear: both;"&gt;&lt;li&gt;An index B-Tree internal node&lt;/li&gt;&lt;li&gt;An index B-Tree leaf node&lt;/li&gt;&lt;li&gt;A table B-Tree internal node&lt;/li&gt;&lt;li&gt;A table B-Tree leaf node&lt;/li&gt;&lt;li&gt;An overflow page&lt;/li&gt;&lt;li&gt;A freelist page &lt;/li&gt;&lt;li&gt;A pointer map page&lt;/li&gt;&lt;li&gt;The locking page&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;In this post I am going to take a closer look at Overflow pages.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Overflow pages are required when a record within a database requires more space than that available within a cell in one database page. One SQLite database of forensic interest is the Cache.db file maintained by the Apple Safari web browser. One of the tables within this database is entitled &lt;strong&gt;cfurl_cache_blob_data &lt;/strong&gt;which uses the &lt;em&gt;receiver_data &lt;/em&gt;field to store the cached item itself (e.g. cached jpgs, gifs, pngs, html et al ) as a BLOB. A BLOB is a &lt;strong&gt;B&lt;/strong&gt;inary &lt;strong&gt;L&lt;/strong&gt;arge &lt;strong&gt;OB&lt;/strong&gt;ject. These cached objects often require overflow pages and we can demonstrate the mechanics of them by walking through a record within Cache.db.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;If you run a file carver across a Cache.db file searching for pictures you are likely to carve out a number corrupt pictures as shown in the example within Figure 1.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;a class="image-link" href="http://lh5.ggpht.com/-OPn2zKoVa_Y/Tg8SLJ-hcMI/AAAAAAAABUk/xj2DLWs0a-g/s800/corrupt_picture.png"&gt;&lt;img align="left" class="linked-to-original" height="270" src="http://lh3.ggpht.com/-YVd4MN_TY_E/Tg-VEv5dvAI/AAAAAAAABiE/DJHlu7xhHsQ/s800/corrupt_picture-thumb.png" style="display: inline; float: left; margin-bottom: 10px; margin-left: 0px; margin-right: 10px; margin-top: 0px;" width="380" /&gt;&lt;/a&gt;&lt;em&gt;Double click to enlarge&lt;/em&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;Figure 1&lt;/strong&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;It can be seen that this picture starts at File offset 4583317 within Cache.db. By examining the two bytes at offset 16 within this SQLite database we have established that the database page size is 1024 bytes. The record that contains this picture has six fields as shown in Figure 2.&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;a class="image-link" href="http://lh3.ggpht.com/-4u3h0y3iJ4o/Tg8VeftSdpI/AAAAAAAABU0/DHOXn6tPdPM/s800/cache.db_schema.png"&gt;&lt;img align="left" class="linked-to-original" height="127" src="http://lh3.ggpht.com/-ipd28eC-DAQ/Tg-VFpoNiuI/AAAAAAAABiM/B49vGbQTbb0/s800/cache-thumb.db_schema.png" style="display: inline; float: left; margin: 0 10px 10px 0;" width="380" /&gt;&lt;/a&gt;&lt;em&gt;Double click to enlarge&lt;/em&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;Figure 2&lt;/strong&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;As discussed in my earlier post &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2011/05/analysis-of-record-structure-within.html" target="_blank"&gt;An analysis of the record structure within SQLite databases&lt;/a&gt; the data making up this record is store in a serialised way (the data representing field 1 is immediately followed by the data representing field 2 and so on with no delimiters). It can be seen therefore that a cell storing a record within the &lt;strong&gt;cfurl_cache_blob_data &lt;/strong&gt;table is almost bound to overflow the 1024 byte database page.&lt;/div&gt;&lt;div style="clear: both;"&gt;In our example our corrupt picture starts at FO 4583317. To calculate the database page it is stored in we divide the offset by the page size 4583317/1024=4475.8955078125 and round up to establish the page number. Our corrupt picture header is in page 4476.&lt;/div&gt;&lt;div style="clear: both;"&gt;The SQLite.org file format states that &lt;em&gt;overflow pages are chained together using a singly linked list. The first 4 bytes of each overflow page is a big-endian unsigned integer value containing the page number of the next page in the list. The remaining usable database page space is available for record data. &lt;/em&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;We know that our picture is likely to be stored in a number of overflow pages and we can establish the next page by looking at the first 4 bytes of the page that is in. Using the formula &lt;em&gt;offset = (page number-1) x page size &lt;/em&gt;I can calculate that the offset of these 4 bytes at the start of the page is 4475 x 1024=4582400. This offset can be seen in Figure 3.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;a class="image-link" href="http://lh4.ggpht.com/-P-kCaFcOyI0/Tg8dUe9PqBI/AAAAAAAABVM/kaj8tkujs4M/s800/4_byte_overflow_pg_no.png"&gt;&lt;img align="left" class="linked-to-original" height="274" src="http://lh4.ggpht.com/-aU3b4c-RgvM/Tg-VGwglw-I/AAAAAAAABiU/ZPMdtR6sswU/s800/4_byte_overflow_pg_no-thumb.png" style="display: inline; float: left; margin: 0 10px 10px 0;" width="380" /&gt;&lt;/a&gt;&lt;em&gt;Double click to enlarge&lt;/em&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;Figure 3&lt;/strong&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;The 4 bytes in hex are 00 00 11 7D which decoded big endian is 4477. The next page therefore in the linked list is page 4477. The first 4 bytes of this page found at offset 4583424 in hex are 00 00 11 7E which decoded big endian is 4478. The first 4 bytes of this page found at offset 4584448 in hex are 00 00 11 7F which decoded big endian is 4479. The first four bytes of this page found at offset 4585472 are in hex 00 00 00 00. This value signifies the last page in the linked list.&lt;/div&gt;&lt;div style="clear: both;"&gt;I can be seen in this example that our corrupt picture starts in page 4476 and overflows into pages 4477, 4478 and 4479. Obviously the overflow pages are contiguous in this case, so in theory at least, if I copy the data from the jpg header of the corrupt picture to the jpg footer and edit out the 'corruption' I should end up with a complete picture. The corruption was likely caused by the overflow page values at the start of each page so using a hex editor I can remove these and &lt;em&gt;hey presto:&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;a class="image-link" href="http://lh6.ggpht.com/-nSgyH-Zp9Rg/Tg9CId5B6hI/AAAAAAAABXk/f9rss9b9feE/s800/corrupt.jpg"&gt;&lt;img align="left" class="linked-to-original" height="110" src="http://lh3.ggpht.com/-tyEJIscpa0Q/Tg-VHwN8sKI/AAAAAAAABic/b8Nhk0VUrsM/s800/corrupt-thumb.jpg" style="display: inline; float: left; margin: 0 10px 10px 0;" width="110" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Essentially what we have done here is start in the middle of the record and work forwards to the end. Because overflow pages are chained together using a linked list this is relatively straightforward. &lt;/div&gt;&lt;div style="clear: both;"&gt;But what do we do if we want to locate the earlier pages in the record? This is a little more complicated because each overflow page does not contain the page number of the previous page. The Safari cache.db SQLite 3 database is an auto-vacuum database so we could utilise Pointer Map pages to locate the parent page of the page (4476) where our corrupt picture header is stored. You will recall from my previous post that Pointer Map pages store a 5 byte record relating to every page that &lt;strong&gt;follows&lt;/strong&gt; the Pointer Map &lt;em&gt;page. &lt;/em&gt;Pointer Map pages found in Safari Cache.db files will have a lot of entries that relate to overflow pages. The 5 byte records are structured with 1 byte indicating a Page Type and then 4 bytes, decoded big endian, referencing the parent page number as follows:&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;ul style="clear: both;"&gt;&lt;li&gt;&lt;strong&gt;0x01&lt;/strong&gt; 0x00 0x00 0x00 0x00&lt;br /&gt;This record relates to a B-tree root page which obviously does not have a parent page, hence the page number being indicated as zero.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;0x02&lt;/strong&gt; 0x00 0x00 0x00 0x00&lt;br /&gt;This record relates to a free page, which also does not have a parent page.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;0x03 &lt;/strong&gt;0xVV 0xVV 0xVV 0xVV (where VV indicates a variable)&lt;br /&gt;This record relates to the first page in an overflow chain. The parent page number is the number of the B-Tree page containing the B-Tree cell to which the overflow chain belongs.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;0x04 &lt;/strong&gt;0xVV 0xVV 0xVV 0xVV (where VV indicates a variable)&lt;br /&gt;This record relates to a page that is part of an overflow chain, but not the first page in that chain. The parent page number is the number of the previous page in the overflow chain linked-list.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;0x05 &lt;/strong&gt;0xVV 0xVV 0xVV 0xVV (where VV indicates a variable)&lt;br /&gt;This record relates to a page that is part of a table or index B-Tree structure, and is not an overflow page or root page. The parent page number is the number of the page containing the parent tree node in the B-Tree structure.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;We can expect to see a lot of Page Types 0x03 and 0x04. So how do we find the pointer map page? We know that the Pointer Map page may contain up to (database page size/5) records (rounded down if necessary) - in this case 1024/5=204.8 so there are 204 records in each Pointer Map page. The first Pointer Map page is Page 2. This is followed by 204 pages and then another Pointer Map page, page 207, followed by 204 pages and then another Pointer Map page, page 412 and so on. In other words there is a Pointer Map page every 205th page, starting page 2. In our example we know that our corrupt picture header is in database page 4476 and the applicable Pointer Map page is prior to it. To calculate the applicable Pointer Map page number we divide 4476 by 205 = 21.834146341463415, round down to 21 and multiply by 205 and then add 2 which equals 4307. The applicable Pointer Map page for page 4476 of the database is page 4307. Using the formula &lt;em&gt;offset = (page number-1) x page size &lt;/em&gt;I can calculate that the offset to this page is 4409344. This page can be seen in Figure 4. Each Page Type flag where it references an Overflow page is bookmarked in green, other Page Types are in blue. The first 5 byte record relates to database page 4308, the second 5 byte record page 4309 and so on. The record for page 4476 is the 169th record on the Pointer Map page (4476-4307).&lt;br /&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;a class="image-link" href="http://lh3.ggpht.com/-CDYCfL8eGK0/Tg9jQTM62CI/AAAAAAAABbM/Fvfd0tKxCos/s800/pointer_map_at_page_1.png"&gt;&lt;img align="left" class="linked-to-original" height="570" src="http://lh5.ggpht.com/-8SOLaubJ4XQ/Tg-VJmBTBbI/AAAAAAAABik/ijw8uYXcB7E/s800/pointer_map_at_page_1-thumb.png" style="display: inline; float: left; margin: 0 10px 10px 0;" width="286" /&gt;&lt;/a&gt;&lt;em&gt;Double click to enlarge&lt;/em&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;Figure 4&lt;/strong&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;It can be seen that the 169th record is in hex &lt;strong&gt;04 00 00 11 7B&lt;/strong&gt;. This record has a flag 0x04 which indicates that this record relates to a page that is part of an overflow chain, but not the first page in that chain. The parent page number is 00 00 11 7B decoded big endian to page 4475. The record for page 4475 is the 168th record on the page &lt;strong&gt;04 00 00 11 7A. &lt;/strong&gt;This record also&lt;strong&gt; &lt;/strong&gt;indicates that the page is part of an overflow chain but not the first page. The parent page number is 00 00 11 7A decoded big endian to page 4474. The record for page 4474 is the 167th record on the page &lt;strong&gt;03 00 00 11 6E. &lt;/strong&gt;This record has a flag 0x03 which indicates that this record relates to the first page in an overflow chain. The parent page number is the number of the B-Tree page containing the B-Tree cell to which the overflow chain belongs. The parent page number is 00 00 11 6E decoded big endian to page 4462.&lt;/div&gt;&lt;div style="clear: both;"&gt;Using the formula &lt;em&gt;offset = (page number-1) x page size &lt;/em&gt;I can calculate that the offset to the beginning of this page is 4568064. We can now decode the page header (detailed more fully in the post &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2011/05/analysis-of-record-structure-within.html" target="_blank"&gt;An analysis of the record structure within SQLite databases&lt;/a&gt; ) shown in Figure 5.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;a class="image-link" href="http://lh4.ggpht.com/-IQUXizG-_mE/Tg90TMYo8pI/AAAAAAAABdQ/rRPA07ojBbk/s800/Page_header_and_cell_pointer_array_page_no_4462.png"&gt;&lt;img align="left" class="linked-to-original" height="92" src="http://lh3.ggpht.com/-LNT4PxGt6Qg/Tg-VKyyIX3I/AAAAAAAABis/gREs0m7tDZc/s800/Page_header_and_cell_pointer_array_page_no_4462-thumb.png" style="display: inline; float: left; margin: 0 10px 10px 0;" width="380" /&gt;&lt;/a&gt;&lt;em&gt;Double click to enlarge&lt;br /&gt;&lt;/em&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;Figure 5&lt;/strong&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;Figure 5 shows the page header of the B-tree leaf node page. The first byte &lt;strong&gt;0D&lt;/strong&gt; is a flag indicating the page is a table B-tree leaf node. The next two bytes &lt;strong&gt;00 00 &lt;/strong&gt;indicate that there are no free blocks within the page. The next two bytes &lt;strong&gt;00 03&lt;/strong&gt; read big endian indicate that there are three cells stored on the page. The next two bytes at offset 5 within the page header &lt;strong&gt;00 EB &lt;/strong&gt;decoded big endian give a value of 235 which is the byte offset of the first byte of the cell content area relative to the start of the page. The last byte of the eight byte page header &lt;strong&gt;00 &lt;/strong&gt;is used to indicate the number of fragmented free bytes on the page, in this case there are none. The remaining highlighted three pairs of bytes &lt;strong&gt;02 60&lt;/strong&gt;, &lt;strong&gt;01 F1&lt;/strong&gt; and &lt;strong&gt;00 EB &lt;/strong&gt;are the cell pointer array for this page. These three values are offsets to the start of each cell when decoded big endian are 608, 497 and 235 respectively. We will focus on the cell at offset 235. At offset 235 we find two Varints representing the &lt;em&gt;Length of Payload&lt;/em&gt; and &lt;em&gt;Row ID&lt;/em&gt; (see Figure 6).&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;a class="image-link" href="http://lh5.ggpht.com/-ZEdI6BLsbUU/Tg-AMj3v1uI/AAAAAAAABeM/Q7qBOsP3ty4/s800/offset_235_in_encase.png"&gt;&lt;img align="left" class="linked-to-original" height="354" src="http://lh3.ggpht.com/-TFXbYOGrqDM/Tg-VL6M8g5I/AAAAAAAABi0/sfOKXksLo-A/s800/offset_235_in_encase-thumb.png" style="display: inline; float: left; margin: 0 10px 10px 0;" width="380" /&gt;&lt;/a&gt;&lt;em&gt;Double click to enlarge&lt;/em&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;Figure 6&lt;/strong&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;The varints are&lt;strong&gt; B1 66&lt;/strong&gt; and &lt;strong&gt;82 11&lt;/strong&gt;. The calculation needed to decode them follows in Figure 7:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;a class="image-link" href="http://lh6.ggpht.com/-B1h6Xn0Z1rw/Tg-ANavVyuI/AAAAAAAABeU/U4CR3KigM8E/s800/Screen_shot_2011-07-02_at_21.21.43.png"&gt;&lt;img align="left" class="linked-to-original" height="341" src="http://lh6.ggpht.com/-2TXSfkVpjFk/Tg-VMwqPBPI/AAAAAAAABi8/dklJ05Osgls/s800/Screen_shot_2011-07-02_at_21-thumb.21.43.png" style="display: inline; float: left; margin: 0 10px 10px 0;" width="380" /&gt;&lt;/a&gt;&lt;em&gt;Double click to enlarge&lt;br /&gt;&lt;/em&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;Figure 7&lt;/strong&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;Following the &lt;em&gt;Length of Payload&lt;/em&gt; and &lt;em&gt;Row ID &lt;/em&gt;are varints representing &lt;em&gt;the Length of the Payload Header &lt;/em&gt;and&lt;em&gt; &lt;/em&gt;the serial type codes of the &lt;em&gt;entry_ID, response_object, request_object, receiver_data, proto_props &lt;/em&gt;and &lt;em&gt;user_info &lt;/em&gt;fields respectively as shown in Figure 8:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;a class="image-link" href="http://lh6.ggpht.com/-7NihATh9ypE/Tg-Mm_mPKXI/AAAAAAAABfg/5Sw6NpvuCsk/s800/payload_header.png"&gt;&lt;img align="left" class="linked-to-original" height="166" src="http://lh5.ggpht.com/-rJcEhPc4AJU/Tg-VOHNJaeI/AAAAAAAABjE/2WHhQ-suLzU/s800/payload_header-thumb.png" style="display: inline; float: left; margin: 0 10px 10px 0;" width="380" /&gt;&lt;/a&gt;&lt;em&gt;Double click to enlarge&lt;/em&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;Figure 8&lt;/strong&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;Figure 8 shows highlighted in blue and green the first three elements of the Cell make up - the &lt;em&gt;Payload Length&lt;/em&gt;, the &lt;em&gt;Row ID&lt;/em&gt; and the &lt;em&gt;Payload Header. &lt;/em&gt;We have already decoded the &lt;em&gt;Payload Length&lt;/em&gt; &lt;strong&gt;B1 66&lt;/strong&gt; and the &lt;em&gt;Row ID&lt;/em&gt; &lt;strong&gt;82 11&lt;/strong&gt;. The next byte &lt;strong&gt;h0A &lt;/strong&gt;denotes the length of the &lt;em&gt;Payload Header &lt;/em&gt;which is in this case 10 bytes (including the &lt;em&gt;Payload Header Length&lt;/em&gt; byte). It can be seen therefore that the remaining 9 bytes contain the &lt;em&gt;varints &lt;strong&gt;00, 9B 54, 96 3E, B1 4A, 00 &lt;/strong&gt;and &lt;strong&gt;00&lt;/strong&gt;&lt;/em&gt;. To determine what each &lt;em&gt;varint&lt;/em&gt; indicates we have to consult the Serial Type Code chart detailed in the post &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2011/05/analysis-of-record-structure-within.html" target="_blank"&gt;An analysis of the record structure within SQLite databases&lt;/a&gt; . Each Serial Type Code details the type and length of the data in the &lt;em&gt;payload&lt;/em&gt; that follows the &lt;em&gt;payload header&lt;/em&gt;. &lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;ul style="clear: both;"&gt;&lt;li&gt;&lt;strong&gt;00 &lt;/strong&gt;This serial type code indicates that the first field is NULL and the content length is 0 bytes. We know that the first field in our record relates to Row ID however the SQLite.org file format states &lt;em&gt;If a database table column is declared as an INTEGER PRIMARY KEY, then it is an alias for the rowid field, which is stored as the table B-Tree key value. Instead of duplicating the integer value in the associated record, the record field associated with the INTEGER PRIMARY KEY column is always set to an SQL NULL.&lt;/em&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;9B 54 &lt;/strong&gt;This serial type code has a value of 3540 which is greater than 12 and an even number. The chart indicates therefore that this field is a BLOB (3540-12)/2 bytes in length [1764 bytes]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;96 3E &lt;/strong&gt;This serial type code has a value of 2878 which is greater than 12 and an even number. The chart indicates therefore that this field is a BLOB (2878-12)/2 bytes in length [1433 bytes]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;B1 4A &lt;/strong&gt;This serial type code has a value of 6346 which is greater than 12 and an even number. The chart indicates therefore that this field is a BLOB (6346-12)/2 bytes in length [3167 bytes]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;00 &lt;/strong&gt;This serial type code indicates that the field is NULL&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;00 &lt;/strong&gt;This serial type code indicates that the field is NULL&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear: both;"&gt;The serial type code for the &lt;em&gt;response_object &lt;/em&gt;indicates that this field is a BLOB 1764 bytes in length. The entire database page would not be big enough to store this BLOB and the cell is even less capable. Figure 9 shows each cell highlighted alternately blue and green:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;a class="image-link" href="http://lh5.ggpht.com/-_AnGLrjrhlA/Tg-TOXNUs_I/AAAAAAAABh8/gb0d688MQVE/s800/3_cells_highlighted.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img align="left" class="linked-to-original" src="http://lh4.ggpht.com/-DzcQfavJggc/Tg-VPiLqjCI/AAAAAAAABjM/MbLsocwU5UE/s1600/3_cells_highlighted-thumb.png" style="display: inline; float: left; margin-bottom: 10px; margin-left: 0px; margin-right: 10px; margin-top: 0px;" /&gt;&lt;/a&gt;&lt;em&gt;Double click to enlarge&lt;br /&gt;&lt;/em&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;Figure 9&lt;/strong&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;The first blue shaded area is the cell the elements of which are duscussed above. The last four bytes of this cell highlighted in darker blue is the hex value &lt;strong&gt;00 00 11 7A &lt;/strong&gt;which when decoded big endian gives the value 4474. This is the page number of the first Overflow page for this cell and is consistent with the information found in the Pointer Map page discussed above.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;Next Post&lt;/strong&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;Following on from my earlier SQLite blog posts James Crabtree has been kind enough to code a Varint decoder and Alex Caithness of CCL has supplied me with his fully featured SQLite record recovery tool EPILOG. I'll review this software next time. Thanks to James and CCL.&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br /&gt;http://www.sqlite.org/fileformat.html&lt;br /&gt;http://www.sqlite.org/fileformat2.html&lt;/div&gt;&lt;br class="final-break" style="clear: both;" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-3403998815917660924?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/3403998815917660924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=3403998815917660924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/3403998815917660924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/3403998815917660924'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2011/07/sqlite-overflow-pages-and-other-loose.html' title='SQLite overflow pages and other loose ends...'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-YVd4MN_TY_E/Tg-VEv5dvAI/AAAAAAAABiE/DJHlu7xhHsQ/s72-c/corrupt_picture-thumb.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-9054941986903054306</id><published>2011-05-10T18:11:00.001+01:00</published><updated>2011-05-10T20:44:04.593+01:00</updated><title type='text'>An analysis of the record structure within SQLite databases</title><content type='html'>&lt;div style="clear: both;"&gt;My two previous posts &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2011/04/carving-sqlite-databases-from.html"&gt;Carving SQLite databases from unallocated clusters&lt;/a&gt; and &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2011/05/sqlite-pointer-maps-pages.html"&gt;SQLite Pointer Maps pages&lt;/a&gt; looked at the structure of SQLite databases as a whole. Information contained in those posts may hopefully facilitate the carving of complete SQLite databases. This post is aimed at examining the potential of carving individual records within an SQLite database but should be read in conjunction with the Carving SQLite databases from unallocated clusters post.&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;br /&gt;Carving individual SQLite database records in certain circumstances may be more fruitful than carving whole databases. There are in fact a number of applications that do exactly this for some types of SQLite database. For example &lt;a href="http://ff3hr.sourceforge.net/"&gt;Firefox 3 History Recovery&lt;/a&gt; (FF3HR) is an application written to recover Firefox records. A paper entitled &lt;em&gt;Forensic analysis of the Firefox 3 Internet history and recovery of deleted SQLite records &lt;/em&gt;written by &lt;em&gt;Murilo Tito Pereira &lt;/em&gt;also deals with the recovery of Firefox records.&lt;/div&gt;&lt;div style="clear: both;"&gt;SQLite databases can be considered as a mini file system in their own right. Within this file system are areas that are marked as free that may contain deleted data. Record based recovery may help identify records that have been deleted but are still contained within the parent SQLite database. More obviously record based recovery is indicated where only deleted and partially overwritten databases are available. However for record based recovery to be useful the data you wish to recover must be stored within one table within the SQLite database concerned. If it is necessary to query two or more tables to extract useful data record based recovery is probably not going to be appropriate.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;Table Record&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-89GEp5SDYhM/TcjvFVh8RcI/AAAAAAAABTs/8oXRE8NWCCg/s1600/Chrome+URLs+table+record.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="193" src="http://1.bp.blogspot.com/-89GEp5SDYhM/TcjvFVh8RcI/AAAAAAAABTs/8oXRE8NWCCg/s400/Chrome+URLs+table+record.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: left;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Figure 1&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt; &lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;Figure 1 shows, as viewed with the &lt;em&gt;SQLite Database Browser&lt;/em&gt; software, a record within the Google Chrome History file URL table at row ID 608. This record is stored within the Google Chrome History SQLite database within a B-tree table leaf node in an area known as a cell. It can be seen from the column headers that this record consists of an &lt;em&gt;id&lt;/em&gt;, a &lt;em&gt;url&lt;/em&gt;, a &lt;em&gt;title&lt;/em&gt;, a &lt;em&gt;visit_count&lt;/em&gt;, a &lt;em&gt;typed_count&lt;/em&gt;, a &lt;em&gt;last_visit_time&lt;/em&gt;, a &lt;em&gt;hidden&lt;/em&gt; flag and lastly a &lt;em&gt;favicon _id&lt;/em&gt;. &amp;nbsp;To aid viewing I will repeat the record data below:&lt;/div&gt;&lt;ul style="clear: both;"&gt;&lt;li&gt;&lt;strong&gt;ID&lt;/strong&gt;&lt;br /&gt;608&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;URL&lt;/strong&gt;&lt;br /&gt;http://www.sqlite.org/fileformat2.html&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;title&lt;/strong&gt;&lt;br /&gt;File Format For SQLite Databases&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;visit_count&lt;/strong&gt;&lt;br /&gt;1&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;typed_count&lt;/strong&gt;&lt;br /&gt;0&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;last_visit_time&lt;/strong&gt;&lt;br /&gt;12949409092779476&lt;/li&gt;&lt;li&gt;&lt;strong&gt;hidden&lt;/strong&gt;&lt;br /&gt;0&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;favicon_id&lt;/strong&gt;&lt;br /&gt;46&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear: both;"&gt;The &lt;b&gt;urls &lt;/b&gt;table is stored within one table B-tree which will consist of a root page and possibly a number of internal and leaf node pages. &amp;nbsp;I have established that the&amp;nbsp;data representing the record detailed above is stored in a cell that exists within a B-tree table leaf node database page.&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;b&gt;Cells&lt;/b&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Lets recap some of the information dealt with in the earlier post&amp;nbsp;&lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2011/04/carving-sqlite-databases-from.html"&gt;Carving SQLite databases from unallocated clusters&lt;/a&gt;. &amp;nbsp;SQLite databases are divided into equal sized pages, the size of which is detailed in two bytes, decoded as a 16 bit integer big endian, at offset 16 of the database file within the database header. &amp;nbsp;Most of an SQLite database consists of B-tree structures consisting of one or more B-tree pages. &amp;nbsp;Each B-tree page has either an 8 or 12 byte page header (depending on whether it is a leaf or internal node).&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-uuEjesLIsuI/TckIxWsSG-I/AAAAAAAABT4/IuzFadqJgu0/s1600/Database+graphic.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="640" src="http://3.bp.blogspot.com/-uuEjesLIsuI/TckIxWsSG-I/AAAAAAAABT4/IuzFadqJgu0/s640/Database+graphic.png" width="584" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: left;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Figure 2&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;As can be seen in Figure 2 the cells tend to be at the end of each database page in an area referred to as the &lt;i&gt;cell content area&lt;/i&gt;. &amp;nbsp;These cells are used to store the database records, one record per cell. &amp;nbsp; The first cell to be written in a database page is stored at the end of the page and additional cells work back towards the start of the page.&lt;/div&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;The number of cells and their location within a database page is stored within the B-Tree page header at the following offsets.&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Offset 1 2 bytes 16 bit integer read big endian&lt;/b&gt; &amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;li&gt;Byte offset of first block of free space on this page (0 if no free blocks)&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Offset 3 2 bytes 16 bit integer read big endian&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Number of entries (cells) on the page&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Offset 5 2 bytes 16 bit integer read big endian&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Byte offset of the first byte of the cell content area relative to the start of the page. If this value is zero, then it should be interpreted as 65536&lt;/li&gt;&lt;/ul&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-GbzeKpuIofU/TckBeqkMTkI/AAAAAAAABT0/EpVgRdSxOxc/s1600/page+header+and+cell+pointers.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-GbzeKpuIofU/TckBeqkMTkI/AAAAAAAABT0/EpVgRdSxOxc/s1600/page+header+and+cell+pointers.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: left;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Figure 3 &amp;nbsp;Page Header and Cell Pointer array&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;Figure 3 shows the page header of the B-tree leaf node page that contains the record detailed in Figure 1 above. &amp;nbsp;The first byte &lt;b&gt;0D&lt;/b&gt; is a flag indicating the page is a table B-tree leaf node. The next two bytes &lt;b&gt;00 00 &lt;/b&gt;indicate that there are no free blocks within the page. The next two bytes &lt;b&gt;00 03&lt;/b&gt;&amp;nbsp;read big endian indicate that there are three cells stored on the page. &amp;nbsp;The next two bytes at offset 5 within the page header &lt;b&gt;0B 8E &lt;/b&gt;decoded big endian give a value of 2958 which is the byte offset of the first byte of the cell content area relative to the start of the page. &amp;nbsp;The last byte of the eight byte page header &lt;b&gt;00 &lt;/b&gt;is used to indicate the number of fragmented free bytes on the page, in this case there are none.&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;The remaining highlighted three pairs of bytes &lt;b&gt;0C 44&lt;/b&gt;, &amp;nbsp;&lt;b&gt;0B EC&lt;/b&gt; and &lt;b&gt;0B 8E &lt;/b&gt;are the cell pointer array for this page.&amp;nbsp;The SQLite.org file format notes helpfully state that &lt;i&gt;the cell pointer array of a b-tree page immediately follows the b-tree page header. &amp;nbsp;Let K&amp;nbsp;be the number of cells on the b-tree. The cell pointer array consists of K 2-byte integer offsets to the cell contents. The cell pointers are arranged in key order with left-most cell (the cell with the smallest key) first and the right-most cell (the cell with the largest key) last&lt;/i&gt;. &amp;nbsp;The &lt;i&gt;key&lt;/i&gt; value referred to is the row ID. &amp;nbsp;In this case we have three cells and therefore three offsets which when decoded big endian are 3140, 3052 and 2958. &amp;nbsp; These offsets allow us to find the start of each cell, it is worth pointing out that there may be free blocks or fragments between each cell so we can not use the offsets to determine the length of each cell.&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;The record detailed in Figure 1 is contained within the cell at offset 2958 within the page. &amp;nbsp;We will decode the contents of this cell but first we better look at the make up of a cell.&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-gOfOxi5JDcg/TckQtGB2YSI/AAAAAAAABT8/XKb8qBSpa6c/s1600/Cell+make+up.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="56" src="http://2.bp.blogspot.com/-gOfOxi5JDcg/TckQtGB2YSI/AAAAAAAABT8/XKb8qBSpa6c/s400/Cell+make+up.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: left;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Figure 4 Cell make up&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="clear: both;"&gt;Figure 4 indicates four areas of interest. &amp;nbsp;The &lt;i&gt;payload &lt;/i&gt;is the data forming the record as detailed in this example in Figure 1 and as suggested in the diagram it is stored in a&amp;nbsp;serialized&amp;nbsp;way with all the relevant data concatenated together. &amp;nbsp;The &lt;i&gt;payload header &lt;/i&gt;details how we can identify each field within the concatenated data (&lt;i&gt;see the Payload Header section below for details of how this works&lt;/i&gt;). &amp;nbsp;The Row ID number and the &lt;i&gt;Payload &lt;/i&gt;length are stored using &lt;i&gt;variable length integers &lt;/i&gt;known as &lt;i&gt;varints. &amp;nbsp;&lt;/i&gt;To successfully decode the Cell and Payload headers we have to be able to decode a &lt;i&gt;varint.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;b&gt;Varint&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.sqlite.org/fileformat2.html"&gt;http://www.sqlite.org/fileformat2.html&lt;/a&gt; and &lt;a href="http://www.sqlite.org/fileformat.html#varint_format"&gt;http://www.sqlite.org/fileformat.html#varint_format&lt;/a&gt; provides some detail in respect to how &lt;i&gt;varints&lt;/i&gt; are structured. &amp;nbsp;I will try here to simplify things and provide a few example decodings when we decode the cell relating to the record detailed at figure 1.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Varints&lt;/i&gt; are variable length integers between 1 and 9 bytes in length&amp;nbsp;depending on the value stored&lt;/li&gt;&lt;li&gt;They are a static Huffman encoding of 64-bit twos-complement integers that uses less space for small positive values&lt;/li&gt;&lt;li&gt;Where the most significant bit of byte 1 is set this indicates that byte 2 is required, where the&amp;nbsp;most significant bit of byte 2 is set this indicates that byte 3 is required, and so on&lt;/li&gt;&lt;li&gt;&lt;i&gt;Varints&lt;/i&gt; are big-endian: bits taken from the earlier byte of the &lt;i&gt;varint&lt;/i&gt; are the more significant than bits taken from the later bytes&lt;/li&gt;&lt;li&gt;Seven bits are used from each of the first eight bytes present, and, if present, all eight from the final ninth byte&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/--W5OvlLsvQo/Tckmw8arj5I/AAAAAAAABUA/EKKo6UPHgr0/s1600/Cell+header+in+Encase.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="185" src="http://2.bp.blogspot.com/--W5OvlLsvQo/Tckmw8arj5I/AAAAAAAABUA/EKKo6UPHgr0/s640/Cell+header+in+Encase.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: left;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Figure 5&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="clear: both;"&gt;Figure 5 shows the beginning of the cell at offset 2958 within the page. &amp;nbsp;As shown in figure 4 the first value is the payload length represented by a &lt;i&gt;varint&lt;/i&gt;. &amp;nbsp;The first byte is &lt;b&gt;5B&lt;/b&gt;. &amp;nbsp;We have to establish the value of the most significant bit and this can be done by converting the hex 5B to binary:&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-mu_kamwaxec/TckrHrK_hCI/AAAAAAAABUE/wKLqb0rJ-ls/s1600/hex+5B+to+binary.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-mu_kamwaxec/TckrHrK_hCI/AAAAAAAABUE/wKLqb0rJ-ls/s1600/hex+5B+to+binary.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;It can be seen that in this case the most significant bit is zero and therefore not set. &amp;nbsp;This &lt;i&gt;varint&lt;/i&gt; is only one byte long and indicates that the payload length is 91 bytes. &amp;nbsp;The payload length is the length in bytes of both the payload header and the payload.&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;The next byte is &lt;b&gt;&amp;nbsp;84&lt;/b&gt;. &amp;nbsp;Converting this to binary:&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-KGZwsJN_6Zg/Tckt1DZm43I/AAAAAAAABUI/0jC7O4hjMBQ/s1600/hex+84+to+binary.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-KGZwsJN_6Zg/Tckt1DZm43I/AAAAAAAABUI/0jC7O4hjMBQ/s1600/hex+84+to+binary.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;The most significant bit here has the value of one and therefore is set. &amp;nbsp;This indicates that this &lt;i&gt;varint&lt;/i&gt; includes, at least, the next byte &lt;b&gt;60 &lt;/b&gt;which converted to binary:&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-30gcTqkP4_k/TckvdO3aWWI/AAAAAAAABUM/PuzdxQRBVr0/s1600/hex+60+to+binary.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-30gcTqkP4_k/TckvdO3aWWI/AAAAAAAABUM/PuzdxQRBVr0/s1600/hex+60+to+binary.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;It can be seen that the most significant bit is zero and therefore not set.&amp;nbsp; This byte therefore is not followed by another and is the last byte of this &lt;i&gt;varint&lt;/i&gt;. &amp;nbsp;To establish the value of this &lt;i&gt;varint&lt;/i&gt; we now have to take the least significant 7 bits of each of the two contributing bytes and concatenate them together:&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;0000100&lt;/span&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;1100000&lt;/span&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;We discard the leading zeros and convert the binary 1001100000 to decimal, giving a value of 608. &amp;nbsp;This &amp;nbsp;&lt;i&gt;varint&lt;/i&gt; represents the row ID and we can see in figure 1 that the row ID is confirmed as 608.&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;The calculation we have carried out can be represented by a&amp;nbsp;formula. &amp;nbsp; If we say that the value of the &lt;i&gt;varint&lt;/i&gt; is &lt;b&gt;N&lt;/b&gt; and the unsigned integer value of the first byte is &lt;b&gt;x&lt;/b&gt; and the unsigned integer value of the second byte is &lt;b&gt;y &lt;/b&gt;we can use the formula:&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;b&gt;N&lt;/b&gt; = &amp;nbsp;(&lt;b&gt;x&lt;/b&gt;-128) x 128 + &lt;b&gt;y&lt;/b&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;If we substitute the value of our unsigned integers 132 and 96 into the formula:&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;(132-128) x 128 + 96 = 608&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;This formula works for two byte &lt;i&gt;varints &lt;/i&gt;that can represent a maximum value of 16383. &amp;nbsp;I suspect we are not likely to encounter larger &lt;i&gt;varints &lt;/i&gt;in the SQLite databases we have an interest in with the possible exception of SQLite databases used to store browser cache. &amp;nbsp;It is also worth noting that the most significant bit if included and allowed to&amp;nbsp;contribute&amp;nbsp;to the unsigned integer value would have a value of 128 (hence the [x-128]). &amp;nbsp;Therefore if the first byte of a &lt;i&gt;varint&lt;/i&gt; is less than 128 you can exclude the possibility of there being a second byte in the &lt;i&gt;varint&lt;/i&gt;.&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;b&gt;Payload Header and Payload&lt;/b&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;We have already looked at two of the four areas of interest within a cell, the payload length and row ID. Next up is the &lt;i&gt;Payload Header&lt;/i&gt; and &lt;i&gt;Payload&lt;/i&gt;.&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-68e4oRW6gSI/Tck7FT4ufXI/AAAAAAAABUQ/aYKYSH8SJRg/s1600/Payload+header+make+up.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-68e4oRW6gSI/Tck7FT4ufXI/AAAAAAAABUQ/aYKYSH8SJRg/s1600/Payload+header+make+up.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;b&gt;Figure 6 &amp;nbsp;Payload Header make up&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="clear: both;"&gt;Figure 6 shows the make up of the &lt;i&gt;payload header&lt;/i&gt; of a record within the URLs table of the Google Chrome History SQLite database. &amp;nbsp;The &lt;i&gt;payload&lt;/i&gt;&amp;nbsp;is the data forming the record&amp;nbsp;stored in a&amp;nbsp;serialized&amp;nbsp;way with all the relevant data concatenated together. &amp;nbsp;The&amp;nbsp;&lt;i&gt;payload header&amp;nbsp;&lt;/i&gt;details how we can identify each field within the concatenated data&amp;nbsp;and will vary from table to table, the contents of which is dictated by the fields required in each record. All payload headers will have however a&amp;nbsp;&lt;i&gt;Payload Header Length&lt;/i&gt;&amp;nbsp;followed by one or more&amp;nbsp;&lt;i&gt;Serial Type Codes&lt;/i&gt;. &amp;nbsp;The&amp;nbsp;&lt;i&gt;Serial Type Code&amp;nbsp;&lt;/i&gt;is used to denote the type of data found in a field within the payload and it's length. All possible Serial Type Codes are &lt;i&gt;varints&lt;/i&gt; and are detailed in a chart provided by SQLite.org at Figure 7:&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-SHh2fskyiXA/TclC7fh9QmI/AAAAAAAABUU/ZNCn_2PfHcI/s1600/Serial+Type+Codes.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="355" src="http://3.bp.blogspot.com/-SHh2fskyiXA/TclC7fh9QmI/AAAAAAAABUU/ZNCn_2PfHcI/s400/Serial+Type+Codes.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: left;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Figure 7&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="clear: both;"&gt;Lets have a look at the &amp;nbsp;Payload Header of our example record detailed in Figure 1.&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-XIEUa7onNPM/TclPQJc2DII/AAAAAAAABUY/cIUp38AXtlY/s1600/Payload+header+serial+types.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-XIEUa7onNPM/TclPQJc2DII/AAAAAAAABUY/cIUp38AXtlY/s640/Payload+header+serial+types.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;b&gt;Figure 8&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;Figure 8 shows highlighted in blue and green the first three elements of the Cell make up shown in Figure 4 - the&amp;nbsp;&lt;i&gt;Payload Length&lt;/i&gt;, the&amp;nbsp;&lt;i&gt;Row ID&lt;/i&gt;&amp;nbsp;and the&amp;nbsp;&lt;i&gt;Payload Header. &amp;nbsp;&lt;/i&gt;We have already decoded the&amp;nbsp;&lt;i&gt;Payload Length&lt;/i&gt;&amp;nbsp;&lt;b&gt;5B&lt;/b&gt;&amp;nbsp;and the&amp;nbsp;&lt;i&gt;Row ID&lt;/i&gt;&amp;nbsp;&lt;b&gt;84 60&lt;/b&gt;. &amp;nbsp;The next byte &lt;b&gt;h09&amp;nbsp;&lt;/b&gt;denotes the length of the&amp;nbsp;&lt;i&gt;Payload Header&amp;nbsp;&lt;/i&gt;which is in this case 9 bytes (including the&amp;nbsp;&lt;i&gt;Payload Header Length&lt;/i&gt;&amp;nbsp;byte). It can be seen therefore that the remaining 8 bytes shown in hex are&amp;nbsp;&lt;b&gt;00&lt;/b&gt;,&amp;nbsp;&lt;b&gt;59&lt;/b&gt;,&amp;nbsp;&lt;b&gt;4D&lt;/b&gt;,&amp;nbsp;&lt;b&gt;01&lt;/b&gt;,&amp;nbsp;&lt;b&gt;01&lt;/b&gt;,&amp;nbsp;&lt;b&gt;06&lt;/b&gt;,&amp;nbsp;&lt;b&gt;01&lt;/b&gt;&amp;nbsp;and&amp;nbsp;&lt;b&gt;01&lt;/b&gt;. These bytes represent&amp;nbsp;&lt;i&gt;varints&amp;nbsp;&lt;/i&gt;so we have to consider that a value may be represented by more than one byte, however in this case the unsigned integer value of each byte is less than 128. &amp;nbsp;We can conclude therefore that each&amp;nbsp;&lt;i&gt;varint&lt;/i&gt;&amp;nbsp;is only a single byte in length. &amp;nbsp;To determine what each&amp;nbsp;&lt;i&gt;varint&lt;/i&gt;&amp;nbsp;indicates we have to consult the Serial Type Code chart shown at figure 7. &amp;nbsp;Each&amp;nbsp;Serial Type Code details the type and length of the data in the &lt;i&gt;payload&lt;/i&gt; that follows the &lt;i&gt;payload header&lt;/i&gt;. &amp;nbsp;The multi byte integers are decoded big endian.&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;00 &amp;nbsp;&lt;/b&gt;This serial type code indicates that the first field is NULL and the content length is 0 bytes. &amp;nbsp;We know that the first field in our record relates to Row ID (see figure 1) however the SQLite.org file format states&amp;nbsp;&lt;i&gt;If a database table column is declared as an INTEGER PRIMARY KEY, then it is an alias for the rowid field, which is stored as the table B-Tree key value. Instead of duplicating the integer value in the associated record, the record field associated with the INTEGER PRIMARY KEY column is always set to an SQL NULL.&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;59 &amp;nbsp;&lt;/b&gt;This serial type code has a value of 89 which is greater than 13 and an odd number. &amp;nbsp;The chart indicates therefore that this field is a text string (89-13)/2 bytes in length [38 bytes]&lt;/li&gt;&lt;li&gt;&lt;b&gt;4D&lt;/b&gt;&amp;nbsp;&amp;nbsp;This serial type code has a value of 77 which is greater than 13 and an odd number. &amp;nbsp;The chart indicates therefore that this field is a text string (77-13)/2 bytes in length [32 bytes]&lt;/li&gt;&lt;li&gt;&lt;b&gt;01&lt;/b&gt;&amp;nbsp; This serial type code has a value of 1 indicating the next field is an 8 bit integer using 1 byte&lt;/li&gt;&lt;li&gt;&lt;b&gt;01&lt;/b&gt;&amp;nbsp; This serial type code has a value of 1 indicating the next field is an 8 bit integer using 1 byte&lt;/li&gt;&lt;li&gt;&lt;b&gt;06&lt;/b&gt;&amp;nbsp; This serial type code has a value of 6 indicating the next field is an 64 bit integer using 8 bytes&lt;/li&gt;&lt;li&gt;&lt;b&gt;01&lt;/b&gt;&amp;nbsp; This serial type code has a value of 1 indicating the next field is an 8 bit integer using 1 byte&lt;/li&gt;&lt;li&gt;&lt;b&gt;01&lt;/b&gt;&amp;nbsp; This serial type code has a value of 1 indicating the next field is an 8 bit integer using 1 byte&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;It can be seen that our &lt;i&gt;payload&lt;/i&gt; is 82 bytes in length (38+32+1+1+8+1+1). &amp;nbsp;The &lt;i&gt;payload header&lt;/i&gt; was 9 bytes and therefore the overall &lt;i&gt;payload length&lt;/i&gt; is 91 (82+9) bytes, as previously calculated, and represented by the byte &lt;b&gt;5B&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-5e-eHGCs_Yw/TclfeNexzrI/AAAAAAAABUc/0q14UfCdYQM/s1600/payload+in+encase.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="182" src="http://4.bp.blogspot.com/-5e-eHGCs_Yw/TclfeNexzrI/AAAAAAAABUc/0q14UfCdYQM/s640/payload+in+encase.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;b&gt;Figure 9&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;Figure 9 shows each element of the payload highlighted&amp;nbsp;alternately&amp;nbsp;in green and blue. &amp;nbsp;The first element is&amp;nbsp;&lt;b&gt;http://www.sqlite.org/fileformat2.html &lt;/b&gt;38 bytes in length, the next element is&amp;nbsp;&lt;b&gt;File Format For SQLite Databases &lt;/b&gt;32 bytes in length. &amp;nbsp;The next element is represented by the byte &lt;b&gt;01 &lt;/b&gt;which denotes the visit_count of 1. &amp;nbsp;This is followed by the byte &lt;b&gt;00&lt;/b&gt; denoting the typed_count of 0. &amp;nbsp;Next are the eight bytes &lt;b&gt;00 2E 01 6B 41 06 BD D4&lt;/b&gt; decoded as a 64 bit integer big endian giving a value of 12949409092779476, the last_visit_time (stored in the Google format). &amp;nbsp;The next byte is &lt;b&gt;00&lt;/b&gt;, the hidden flag, followed lastly by &lt;b&gt;2E &lt;/b&gt;decoded as 46, the favicon_ID. &amp;nbsp;The next record in this case immediately follows at offset 3052 within the database page.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Notes&lt;/b&gt;&lt;br /&gt;I have glossed over some possible combinations of data found in stored records in order to try and simplify things a little. &amp;nbsp;It is possible for a record to require more space than the space&amp;nbsp;available&amp;nbsp;in a cell within one database page. &amp;nbsp;In this eventuality pages known as overflow pages come into play. &amp;nbsp;I will leave any commentary on this to another day :-)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Carving Considerations&lt;/b&gt;&lt;br /&gt;It can be seen that each record of the Google Chrome History URL table may vary in content and length. &amp;nbsp;This precludes simple carving of records using known headers. &amp;nbsp;It may be possible to define a scheme to assist with carving however by focussing on the parameters of each element of the record. &amp;nbsp;It is clear that for the&amp;nbsp;Google Chrome History URL table the scheme would be fairly complicated, allowing for very large URLs and Page titles which may well induce many false positives. &amp;nbsp;For databases using a simpler record structure things are a bit easier. &amp;nbsp;A &lt;a href="http://www.ccl-forensics.com/images/f3%20presentation3.pdf"&gt;presentation&lt;/a&gt; presented by Alex Caithness of CCL details an approach that can be adopted for carving iPhone calls.db databases.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Deleted Data within Live Databases&lt;/b&gt;&lt;br /&gt;This area will&amp;nbsp;require&amp;nbsp;another blog post on&amp;nbsp;another&amp;nbsp;day! &amp;nbsp;I am aware of two programs &amp;nbsp;possibly written to recover this&amp;nbsp;deleted&amp;nbsp;data.&amp;nbsp;&lt;a href="http://chirashi.zensay.com/2010/11/recover-deleted-data-from-sqlite-databases/"&gt;SQL Undeleter from Chirashi Security&lt;/a&gt; and &lt;a href="http://www.ccl-forensics.com/Research-tools/epilog-sqlite-database-analysis-tool.html"&gt;Epilog from CCL&lt;/a&gt;. &amp;nbsp;If the developers will let me test these programs out I will report the results to you.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;References&lt;/b&gt;&lt;br /&gt;http://www.sqlite.org/fileformat.html&lt;br /&gt;http://www.sqlite.org/fileformat2.html&lt;br /&gt;http://www.ccl-forensics.com/images/f3%20presentation3.pdf&lt;br /&gt;http://mobileforensics.wordpress.com/2011/04/30/sqlite-records/&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-9054941986903054306?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/9054941986903054306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=9054941986903054306' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/9054941986903054306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/9054941986903054306'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2011/05/analysis-of-record-structure-within.html' title='An analysis of the record structure within SQLite databases'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-89GEp5SDYhM/TcjvFVh8RcI/AAAAAAAABTs/8oXRE8NWCCg/s72-c/Chrome+URLs+table+record.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-8019078341295224499</id><published>2011-05-04T12:09:00.000+01:00</published><updated>2011-05-04T12:16:17.420+01:00</updated><title type='text'>SQLite Pointer Maps pages</title><content type='html'>&lt;p style="clear: both"&gt;This blog post complements and should be read in conjunction with the previous post &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2011/04/carving-sqlite-databases-from.html"&gt;Carving SQLite databases from unallocated clusters&lt;/a&gt;. In that post I looked at the information available within an SQLite database that may assist in carving one from unallocated clusters.&lt;/p&gt;&lt;p style="clear: both"&gt;You will remember from the earlier blog post that SQLite databases are divided into equally sized &lt;em&gt;pages and &lt;/em&gt;SQLite database files always consist of an exact number of &lt;em&gt;pages. &lt;/em&gt;The &lt;em&gt;page&lt;/em&gt; size for a database file is determined by the 2 byte integer located at an offset of 16 bytes from the beginning of the database file. The first &lt;em&gt;page&lt;/em&gt; in an SQLite database is numbered &lt;em&gt;page&lt;/em&gt; 1.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Auto-vacuum capable&lt;/strong&gt;&lt;br /&gt;Auto-vacuum capable SQLite databases make use of Pointer Map &lt;em&gt;pages &lt;/em&gt;along with the other &lt;em&gt;page&lt;/em&gt; types detailed in the earlier blog post. &lt;em&gt; &lt;/em&gt;It is probably helpful to provide some information about what an auto-vacuum capable database is. &lt;/p&gt;&lt;p style="clear: both"&gt;In a non-auto-vacuum-capable SQLite database when information is deleted the &lt;em&gt;pages &lt;/em&gt;where&lt;em&gt; &lt;/em&gt;it was stored are added to a list of free &lt;em&gt;pages &lt;/em&gt;and these pages can be reused the next time data is inserted. Therefore, should data be deleted the file size of the database does not decrease. If a lot of data is deleted and it becomes necessary to shrink the database size the SQL VACUUM command can be run. This has the effect of reorganising the database from scratch and removing any free pages completely, thus making the database smaller.&lt;/p&gt;&lt;p style="clear: both"&gt;When Auto-vacuum is enabled all free &lt;em&gt;pages&lt;/em&gt; are moved to the end of the database file and the database file is truncated to remove the free &lt;em&gt;pages&lt;/em&gt; at every transaction commit, thus removing free &lt;em&gt;pages&lt;/em&gt; automatically. &lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Pointer Map Pages&lt;/strong&gt;&lt;br /&gt;The purpose of the Pointer Map is to facilitate moving pages from one position in the database file to another as part of auto vacuum. When a page is moved, the pointer in its parent must be updated to point to the new location. Pointer Maps are used to provide a lookup table to quickly determine what a &lt;em&gt;pages&lt;/em&gt; parent &lt;em&gt;page&lt;/em&gt; is. They only exist within auto-vacuum capable databases, which require the 32 bit integer value, read big endian, stored at byte offset 52 of the database header to be non-zero.&lt;/p&gt;&lt;p style="clear: both"&gt;In auto-vacuum-capable SQLite databases &lt;em&gt;page&lt;/em&gt; 2 of the database is always a Pointer Map &lt;em&gt;page. &lt;/em&gt;Pointer Map &lt;em&gt;pages&lt;/em&gt; store a 5 byte record relating to every page that &lt;strong&gt;follows&lt;/strong&gt; the Pointer Map &lt;em&gt;page. For example&lt;/em&gt; if we have an auto-vacuum-capable database that has &lt;strong&gt;24 &lt;/strong&gt;&lt;em&gt;&lt;strong&gt;pages&lt;/strong&gt;&lt;/em&gt; (each of 4096 bytes in size) in total, &lt;em&gt;page&lt;/em&gt; 1 will contain the database header and the database schema and the next &lt;em&gt;page, page &lt;/em&gt;2, will be a Pointer Map &lt;em&gt;page. &lt;/em&gt;This Pointer Map&lt;em&gt; page &lt;/em&gt;will contain a 5 byte record for &lt;strong&gt;every one&lt;/strong&gt; of the remaining &lt;strong&gt;22 &lt;/strong&gt;&lt;strong&gt;&lt;em&gt;pages&lt;/em&gt; &lt;/strong&gt;taking up 110 bytes of space within the &lt;em&gt;page&lt;/em&gt;. The first 5 byte record begins at the very beginning of the Pointer Map &lt;em&gt;page&lt;/em&gt; and therefore in a 4096 byte &lt;em&gt;page&lt;/em&gt; a maximum of 819 (4096/5) records can be stored. If the database has more than 821 &lt;em&gt;pages&lt;/em&gt; (when using a &lt;em&gt;page&lt;/em&gt; size of 4096 bytes) &lt;em&gt;page&lt;/em&gt; 822 would be an additional Pointer Map page that would contain records for the next 819 &lt;em&gt;pages&lt;/em&gt; &lt;strong&gt;following&lt;/strong&gt; this second Pointer Map &lt;em&gt;page&lt;/em&gt;. Further additional Pointer Map &lt;em&gt;pages&lt;/em&gt; can be added in the same way. Pointer Map &lt;em&gt;pages&lt;/em&gt; do not store records relating to Pointer Map &lt;em&gt;pages&lt;/em&gt; or &lt;em&gt;page&lt;/em&gt; 1 of the database.&lt;/p&gt;&lt;p style="clear: both"&gt;Pointer Map 5 byte records are structured with 1 byte indicating a Page Type and then 4 bytes, decoded big endian, referencing the parent page number as follows:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;&lt;strong&gt;0x01&lt;/strong&gt; 0x00 0x00 0x00 0x00&lt;br /&gt;This record relates to a B-tree root page which obviously does not have a parent page, hence the page number being indicated as zero.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;0x02&lt;/strong&gt; 0x00 0x00 0x00 0x00&lt;br /&gt;This record relates to a free page, which also does not have a parent page.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;0x03 &lt;/strong&gt;0xVV 0xVV 0xVV 0xVV (where VV indicates a variable)&lt;br /&gt;This record relates to the first page in an overflow chain. The parent page number is the number of the B-Tree page containing the B-Tree cell to which the overflow chain belongs.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;0x04 &lt;/strong&gt;0xVV 0xVV 0xVV 0xVV (where VV indicates a variable)&lt;br /&gt;This record relates to a page that is part of an overflow chain, but not the first page in that chain. The parent page number is the number of the previous page in the overflow chain linked-list.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;0x05 &lt;/strong&gt;0xVV 0xVV 0xVV 0xVV (where VV indicates a variable)&lt;br /&gt;This record relates to a page that is part of a table or index B-Tree structure, and is not an overflow page or root page. The parent page number is the number of the page containing the parent tree node in the B-Tree structure.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh4.ggpht.com/_QfcS6HZ5Sws/TbvujbWPDVI/AAAAAAAABSo/HiKIDCMbs1o/s800/Pointer_map_page_in_Encase.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh4.ggpht.com/_QfcS6HZ5Sws/Tbvza6nF24I/AAAAAAAABTM/alplOQ62MBE/s800/Pointer_map_page_in_Encase-thumb.png" height="570" align="left" width="311" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;strong&gt;Figure 1&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The screenshot at &lt;strong&gt;Figure 1 &lt;/strong&gt;shows the Pointer Map page of an iPhone SMS.db which uses a page size of 4096 bytes. The Page Type bytes are highlighted in light blue and occur at every fifth byte. The byte highlighted in green (0x00) is the first byte of the sequence that is not one of the page type bytes as described above and therefore indicates that there are no more records stored in this pointer map as can be seen within the highlighted darker blue area.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Extrapolating the database size from the Pointer Map page&lt;/strong&gt;&lt;br /&gt;If you count the Page Type bytes highlighted within &lt;strong&gt;Figure 1&lt;/strong&gt; in light blue you will find there are 22. This is because we have 22 pages following the Pointer Map page and therefore require 22 records. This allows us to conclude that there are 24 pages in total within this database (page 1, the Pointer Map page and then the 22 pages). By examining the 2 byte integer located at an offset of 16 bytes from the beginning of the database file we have determined that the page size within this database is 4096 bytes. 24 multiplied by 4096 equals 98304. The file size of this particular database is therefore 98,304 bytes which can also be seen within &lt;strong&gt;Figure 1&lt;/strong&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Carving Considerations&lt;/strong&gt;&lt;br /&gt;To carve auto vacuum capable databases the following steps would be needed:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;Identify first page of database by detecting the &lt;em&gt;SQLite format 3&lt;/em&gt; header&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Establish &lt;em&gt;page size&lt;/em&gt; by reading the 2 bytes at offset 16 as a 16 bit integer big endian &lt;/li&gt;&lt;li&gt;Check the 4 byte 32 bit integer at offset 52 for a non zero value indicating that the database is auto vacuum capable&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Go to page 2 of the database at Offset &lt;em&gt;page size&lt;/em&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If value is 0x01 or 0x02 or 0x03 or 0x04 or 0x05 set a counter to 1&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Move five bytes forward and if value is 0x01 or 0x02 or 0x03 or 0x04 or 0x05 increment the counter by 1&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;or&lt;/strong&gt; if the value is not 0x01 or 0x02 or 0x03 or 0x04 or 0x05 begin the calculation of database file size using the formula&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;database size = (counter value + 2) x page size&lt;/em&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;The above discounts the possibility of their being more than one pointer map &lt;em&gt;page&lt;/em&gt;. Some additional logic would be needed to cater for this eventuality. Pointer map &lt;em&gt;pages m&lt;/em&gt;ay contain &lt;em&gt;page size/5 &lt;/em&gt;records. If the counter increments to a point where it equals this value it would be necessary to locate the next pointer map &lt;em&gt;page &lt;/em&gt;using the formula:&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;next pointer map page number = (page size/5) + 2 + number of existing pointer map pages. &lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;To calculate the offset to this &lt;em&gt;page &lt;/em&gt;use the formula:&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;offset = (page number-1) x page size.&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://www.sqlite.org/fileformat.html"&gt;http://www.sqlite.org/fileformat.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sqlite.org/fileformat2.html"&gt;http://www.sqlite.org/fileformat2.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sqlite.org/src/artifact/cce1c3360c"&gt;http://www.sqlite.org/src/artifact/cce1c3360c&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-8019078341295224499?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/8019078341295224499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=8019078341295224499' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/8019078341295224499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/8019078341295224499'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2011/05/sqlite-pointer-maps-pages.html' title='SQLite Pointer Maps pages'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_QfcS6HZ5Sws/Tbvza6nF24I/AAAAAAAABTM/alplOQ62MBE/s72-c/Pointer_map_page_in_Encase-thumb.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-9076412311846075905</id><published>2011-04-27T19:57:00.000+01:00</published><updated>2011-05-09T11:19:06.321+01:00</updated><title type='text'>Carving SQLite databases from unallocated clusters</title><content type='html'>&lt;p style="clear: both"&gt;&lt;em&gt;Have you missed me?&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;br /&gt;Carving SQLite databases from unallocated clusters is problematic because although these types of database have a header, there is no footer and the length of the file is not normally stored within the file either. Given that SQLite databases are used by so many programs now (e.g.Firefox, Google Chrome and numerous Mac OSX and IoS applications) to store data of forensic interest it would be useful to recover them from unallocated clusters. I am aware that there has been some comment in this area within our industry blogs and forums. A paper entitled &lt;em&gt;Forensic analysis of the Firefox 3 Internet history and recovery of deleted SQLite records &lt;/em&gt;written by &lt;em&gt;Murilo Tito Pereira &lt;/em&gt;became available in 2009 (at a cost) but my interest was piqued more recently when &lt;em&gt;Rasmus Riis&lt;/em&gt; (who I believe works for Law Enforcement in Denmark) posted an enscript he had written - &lt;em&gt;Chrome SQlite db finder v1.4&lt;/em&gt; to Guidance Software's enscript download center. &lt;em&gt;Rasmus Riis's&lt;/em&gt; approach to carving SQLite files used by Google Chrome is to identify the header and then carry out additional checking throughout the file for known values within &lt;em&gt;page&lt;/em&gt; headers. I had mixed results using this enscript and also wondered whether it could be adapted to search for other SQLite databases, in particular the SMS.db used by the iPhone. So as a result I took a closer look at the problem.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;SQLite Database Structure and File Format&lt;/strong&gt;&lt;br /&gt;The SQLite file format is well documented at &lt;a href="http://www.sqlite.org/fileformat.html"&gt;http://www.sqlite.org/fileformat.html&lt;/a&gt; and also at &lt;a href="http://www.sqlite.org/fileformat2.html"&gt;http://www.sqlite.org/fileformat2.html&lt;/a&gt;. What I will try to do here is pick out the salient points that may be relevant to carving SQLite files from unallocated clusters, and also provide some commentary where it may be useful.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Size and numbering&lt;/strong&gt;&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;The entire database file is divided into equally sized &lt;em&gt;pages - &lt;/em&gt;SQLite database files always consist of an exact number of &lt;em&gt;pages&lt;/em&gt;&lt;/li&gt;&lt;li&gt;The &lt;em&gt;page &lt;/em&gt;size is always a power of two between 512 (2&lt;sup&gt;9&lt;/sup&gt;) and 65536 (2&lt;sup&gt;16&lt;/sup&gt;) bytes&lt;br /&gt;&lt;/li&gt;&lt;li&gt;All multibyte integer values are read big endian&lt;/li&gt;&lt;li&gt;The &lt;em&gt;page&lt;/em&gt; size for a database file is determined by the 2 byte integer located at an offset of 16 bytes from the beginning of the database file&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Pages&lt;/em&gt; are numbered beginning from 1, not 0&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Therefore to navigate to a particular &lt;em&gt;page &lt;/em&gt;when you have a &lt;em&gt;page&lt;/em&gt; number you have to calculate the offset from the start of the database using the formula:&lt;br /&gt;&lt;em&gt;offset = (page number-1) x page size&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Possible Page Types&lt;/strong&gt;&lt;br /&gt;Each page is used exclusively to store one of the following:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;An index B-Tree internal node&lt;br /&gt;&lt;/li&gt;&lt;li&gt;An index B-Tree leaf node&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A table B-Tree internal node&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A table B-Tree leaf node&lt;br /&gt;&lt;/li&gt;&lt;li&gt;An overflow page&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A freelist page &lt;br /&gt;&lt;/li&gt;&lt;li&gt;A pointer map page&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The locking page&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;However not every database will include all of these items.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;The first &lt;em&gt;page&lt;/em&gt; (&lt;em&gt;page&lt;/em&gt; 1)&lt;/strong&gt;&lt;br /&gt;The first &lt;em&gt;page&lt;/em&gt; of the database is a special page for two reasons; it contains within the first 100 bytes of the &lt;em&gt;page&lt;/em&gt; the &lt;strong&gt;database header&lt;/strong&gt; and it also contains the Database Schema (the structure of the database [tables, indexes etc.] described in formal language).&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;The database header&lt;/strong&gt; begins with the following 16 byte sequence:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;0x53 0x51 0x4c 0x69 0x74 0x65 0x20 0x66 0x6f 0x72 0x6d 0x61 0x74 0x20 0x33 0x00&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;which when read as UTF-8 encoded text reads &lt;em&gt;SQLite format 3 &lt;/em&gt;followed by a nul-terminator byte.&lt;/p&gt;&lt;p style="clear: both"&gt;Other significant values at offsets within the &lt;strong&gt;database header&lt;/strong&gt; are as follows:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;&lt;strong&gt;Offset 16 2 bytes 16 bit integer read big endian&lt;/strong&gt; &lt;br /&gt;Page Size&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Offset 28 4 bytes 32 bit integer read big endian&lt;/strong&gt;&lt;br /&gt;The logical size of the database in pages which is only populated when the database was last written by SQLite version 3.7.0 or later. This field is only valid if it is nonzero and in all examples of SQLite databases I have examined this value was zero, so unfortunately not as exciting as it first appears!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Offset 32 &lt;/strong&gt;&lt;strong&gt;4 bytes 32 bit integer read big endian&lt;/strong&gt;&lt;br /&gt;Page number of first freelist trunk page&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Offset 36 &lt;/strong&gt;&lt;strong&gt;4 bytes 32 bit integer read big endian&lt;/strong&gt;&lt;br /&gt;Total number of freelist pages including freelist trunk pages&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Offset 52 &lt;/strong&gt;&lt;strong&gt;4 bytes 32 bit integer read big endian&lt;/strong&gt;&lt;br /&gt;The highest numbered root page number if the database is auto-vacuum capable, for non-auto-vacuum databases, this value is always zero. The majority of the databases we are likely to be interested in are non-auto-vacuum databases.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;B-Tree &lt;em&gt;pages&lt;/em&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;The SQLite.org file format notes helpfully state that:&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;A large part of any SQLite database file &lt;/em&gt;&lt;em&gt;is given over to one or more B-Tree structures. A single B-Tree structure is stored using one or more database pages. Each page contains a single B-Tree node. The pages used to store a single B-Tree structure need not form a contiguous block.&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;So from a carving perspective we note that most of what we wish to carve are B-Tree pages but they are not necessarily stored contiguously. We can however identify B-Tree pages because they have a &lt;em&gt;page &lt;/em&gt;header 8 bytes in length if the page is a leaf node page and 12 bytes in length if the page is an internal node page. In all &lt;em&gt;pages, &lt;/em&gt;with the exception of &lt;em&gt;page &lt;/em&gt;1, the header starts at the beginning of the page at offset 0. On &lt;em&gt;page &lt;/em&gt;1 the header starts at offset 100.&lt;/p&gt;&lt;p style="clear: both"&gt;The first byte of all B-Tree &lt;em&gt;page&lt;/em&gt; headers is a flag field, each flag is detailed as follows:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;&lt;strong&gt;0x02&lt;/strong&gt;&lt;br /&gt;flag indicating index B-Tree internal node&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;0x0A&lt;/strong&gt;&lt;br /&gt;flag indicating index B-Tree leaf node&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;0x05&lt;/strong&gt;&lt;br /&gt;flag indicating table B-Tree internal node&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;0x0D&lt;/strong&gt;&lt;br /&gt;flag indicating table B-Tree leaf node&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;These flags therefore allow us to potentially identify B-Tree pages (of all types) by examining the first byte of each &lt;em&gt;page &lt;/em&gt;to see if it is either 0x02, 0x0A, 0x05 or 0x0D.&lt;/p&gt;&lt;p style="clear: both"&gt;The B-Tree &lt;em&gt;page&lt;/em&gt; header also contains some other potentially useful values (offsets from start of page):&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;&lt;strong&gt;Offset 1 2 bytes 16 bit integer read big endian&lt;/strong&gt; &lt;br /&gt;Byte offset of first block of free space on this page (0 if no free blocks)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Offset 3 2 bytes 16 bit integer read big endian&lt;/strong&gt;&lt;br /&gt;Number of entries (cells) on this page&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Offset 5 2 bytes 16 bit integer read big endian&lt;/strong&gt;&lt;br /&gt;Byte offset of the first byte of the cell content area relative to the start of the page. If this value is zero, then it should be interpreted as 65536&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Freelist pages&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Once again the SQLite.org file format notes help us out:&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;A database file might contain one or more pages that are not in active use. Unused pages can come about, for example, when information is deleted from the database. Unused pages are stored on the freelist and are reused when additional pages are required.&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;Each page in the freelist is classified as a freelist trunk page or a freelist leaf page. All trunk pages are linked together into a singly linked list. The first four bytes of each trunk page contain the page number of the next trunk page in the list, formatted as an unsigned big-endian integer. If the trunk page is the last page in the linked list, the first four bytes are set to zero.&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;The operation of the freelists might be better understood by a quick forensic examination of them:&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh5.ggpht.com/_QfcS6HZ5Sws/TbgT2cI3DEI/AAAAAAAABL8/RFdvr6Sy9fU/s800/Database_Header_offsets_32_and_36.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh3.ggpht.com/_QfcS6HZ5Sws/Tbhh2quYpfI/AAAAAAAABSM/Esgc9gGNQg4/s800/Database_Header_offsets_32_and_36-thumb.png" height="160" width="285" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;/a&gt;The four bytes highlighted in blue are at offset 32 within the database header and decoded as a 32 bit integer big endian give a decimal value of 61 - this is the page number of the first freelist trunk page. The four bytes highlighted in green are at offset 36 within the database header and decoded as a 32 bit integer big endian give a decimal value of 70 - this is the total number of free pages including freelist trunk pages.&lt;/p&gt;&lt;p style="clear: both"&gt;The page number of the first freelist trunk page is 61. To calculate the offset from the start of the database for this page we use the formula &lt;em&gt;&lt;strong&gt;offset = (page number-1) x page size&lt;/strong&gt; &lt;/em&gt;which in this case is &lt;strong&gt;(61-1) x 4096 = 245760.&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh6.ggpht.com/_QfcS6HZ5Sws/TbgYu7GOTBI/AAAAAAAABMY/rov6DSoCjTw/s800/Freelist_trunk_page_array-full.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh5.ggpht.com/_QfcS6HZ5Sws/Tbhh3gnuQiI/AAAAAAAABSU/JNZ4FK7pzN0/s800/Freelist_trunk_page_array-thumb.png" height="243" width="379" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;/a&gt;The offset 24570 takes us to start of the first freelist trunk page. There we find an array of 4 byte big endian integers. The first four bytes (highlighted in green) decoded big endian denote the page number of the next freelist trunk page - in this case the value of the first four bytes is zero indicating that there is no more free freelist trunk pages. The second four bytes (highlighted in blue), in this case &lt;strong&gt;0x00 0x00 0x00 0x45&lt;/strong&gt; when decoded as a 32 bit integer big endian give a value of decimal 69 - this is the number of leaf page pointers to follow. The remaining 69 blocks of 4 bytes (alternately highlighted in green and blue in the screen shot) each represent, when decoded as a 32 bit integer big endian, the page number of a free page. Examination of each free page revealed that the entire page had been zeroed out - although this may be a function of the application using the database, not a function of SQLite itself.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;&lt;strong&gt;Pointer map pages&lt;/strong&gt;&lt;br /&gt;Pointer map pages will only exist if the database is auto-vacuum capable and the value within the 4 bytes of the database header at offset 52 is non zero. In a database with pointer map pages, the first pointer map page is page 2. The first byte of a pointer map page is one of five values 0x01, 0x02, 0x03, 0x04 or 0x05. Many of the databases we have a forensic interest in are not auto-vacuum capable and therefore do not have pointer map pages, however where they do (iPhone SMS.db for example) it is possible to calculate the length of the of the SQLite database by extrapolating information from the pointer map page entries. I will cover this in my &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2011/05/sqlite-pointer-maps-pages.html" target="_blank"&gt;next blog post&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;&lt;strong&gt;Locking Page&lt;/strong&gt;&lt;br /&gt;The locking page is the database page that starts at byte offset 2&lt;sup&gt;30&lt;/sup&gt; (1,073,741,824) and always remains unused (i.e all zeros). Most databases will not be big enough (&amp;gt; 1GB) to require a locking page.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;&lt;strong&gt;Overflow pages&lt;/strong&gt;&lt;br /&gt;Once again the SQLite.org file format notes help us out:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Sometimes, a database record stored in either an index or table B-Trees is too large to fit entirely within a B-Tree cell. In this case part of the record is stored within the B-Tree cell and the remainder stored on one or more overflow pages. The overflow pages are chained together using a singly linked list. The first 4 bytes of each overflow page is a big-endian unsigned integer value containing the page number of the next page in the list. The remaining usable database page space is available for record data.&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;We can calculate that for the first byte to be any value other than 0x00 there must be at least 16,777,216 pages within the database (0x01 0x00 0x00 0x00 decoded big endian). At a page size of 4096 bytes this would equate to a database size of 64 Gigabytes. In most cases therefore we can discount the first byte of overflow pages being anything other than 0x00.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;&lt;strong&gt;So how does this help with carving SQLite databases then?&lt;/strong&gt;&lt;br /&gt;We can use the database header and the first byte value of each &lt;em&gt;page&lt;/em&gt; thereafter to determine whether the data within each &lt;em&gt;page&lt;/em&gt; size block is valid. So from a carving perspective we can identify the first &lt;em&gt;page&lt;/em&gt; with the database header, calculate the &lt;em&gt;page&lt;/em&gt; size, read the next &lt;em&gt;page&lt;/em&gt; and validate the first byte and so on until the &lt;em&gt;first byte validation&lt;/em&gt; fails. &lt;/p&gt;&lt;p style="clear: both"&gt;This essentially is what &lt;em&gt;Rasmus Riis's &lt;/em&gt;&lt;em&gt;Chrome SQlite db finder v1.4 &lt;/em&gt;enscript does for SQLite databases created by the Google Chrome web browser. His description of the enscripts functionality states that it checks the first byte of each &lt;em&gt;page, &lt;/em&gt;other than the first page, for the values &lt;em&gt;13,10, 2, 5 or 0. &lt;/em&gt;Convert these values into hex and you get 0x0D, 0x0A, 0x02, 0x05 and 0x00. The first four of these values are the flags found at the first byte of the B-Tree page headers discussed above. Additionally he checks for 0x00 which may well be the first byte of either a free page or an overflow page. The script does not however allow 0x01, 0x03 or 0x04 to be the first &lt;em&gt;page&lt;/em&gt; byte. This therefore does not allow for an auto-vacuum capable database. The databases used by Google Chrome are not auto-vacuum capable, however other databases such as the iPhone SMS.db database are. &lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;Rasmus's en&lt;/em&gt;script also carries out a test of the two bytes at offset 100 within the first database &lt;em&gt;page&lt;/em&gt;. The enscript according to the description in the download center looks for the values 2243, 3853 or 3331. The coding however shows that it checks for 3343 or 3853 or 3331 decoded big endian. Converted to hex the first two bytes would be&lt;strong&gt; 0x0D 0x0F&lt;/strong&gt; or &lt;strong&gt;0x0F 0x0D&lt;/strong&gt; or &lt;strong&gt;0x0D 0x03. &lt;/strong&gt;I am not sure what &lt;em&gt;Rasmus&lt;/em&gt; had in mind for the second value 3853 (which is &lt;strong&gt;0x0D 0x0F &lt;/strong&gt;converted little endian) but focussing on the first and the third pairs of two bytes the script is taking the flag byte and the first byte of the two bytes used to store the Byte offset of first block of free space on the &lt;em&gt;page. &lt;/em&gt;The first &lt;em&gt;page&lt;/em&gt; of all SQLite databases beyond the 100 byte database header store the database schema and are therefore constant (in other words because each particular database has a unique set of tables and indexes the first page of a particular database does not change from instance to instance). Because the database schema does not change the combining of the first and second bytes seems to work in order to identify Chrome databases.&lt;br /&gt;&lt;br /&gt;This lead me on to consider whether an analysis of the following values within the B-Tree page header of the first page containing the database schema would allow the identification of other types of SQLite databases. The following table appears to suggest that it would be possible to establish a &lt;em&gt;fingerprint&lt;/em&gt; for each database type. I have not collected enough test data to be certain about this yet.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh5.ggpht.com/_QfcS6HZ5Sws/TbhLH7md8WI/AAAAAAAABQQ/IYRFPbL2FIE/s800/known_B-tree_page_header_offsets.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh4.ggpht.com/_QfcS6HZ5Sws/Tbhh4-hIYkI/AAAAAAAABSc/An2OiXsAr0g/s800/known_B-tree_page_header_offsets-thumb.png" height="135" width="380" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;/a&gt;With regards to &lt;em&gt;Rasmus's en&lt;/em&gt;script because he was kind enough to share and also not Enpack it is possible to make some small changes to the code to allow it to parse unallocated for all types of SQLite.db. I am in touch with my programming friends to create a script that can carve and identify SQLite databases from the &lt;em&gt;fingerprint&lt;/em&gt; discussed above and also include a greater amount of error checking.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Other stuff of note&lt;/strong&gt;&lt;br /&gt;When you examine data within SQLite databases have you noticed that most of the meaningful stuff is bunched up at the end of each &lt;em&gt;page&lt;/em&gt;? The SQLite.org file format notes help us out here:&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;The total amount of free space on a b-tree page consists of the size of the unallocated region plus the total size of all freeblocks plus the number of fragmented free bytes. SQLite may from time to time reorganize a b-tree page so that there are no freeblocks or fragment bytes, all unused bytes are contained in the unallocated space region, and all cells are packed tightly at the end of the page. This is called "defragmenting" the b-tree page.&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;To Do&lt;/strong&gt;&lt;br /&gt;I have not as yet covered the part the journal files may play in the recovery of SQLite data from unallocated, a future post perhaps.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Thanks&lt;/strong&gt;&lt;br /&gt;to &lt;em&gt;Rasmus Riis &lt;/em&gt;for sharing his enscript&lt;br /&gt;and to Chris Vaughan for his help in firming up some of the theory.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://www.sqlite.org/fileformat.html"&gt;http://www.sqlite.org/fileformat.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sqlite.org/fileformat2.html"&gt;http://www.sqlite.org/fileformat2.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sqlite.org/requirements.html"&gt;http://www.sqlite.org/requirements.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sqlite.org/hlr30000.html"&gt;http://www.sqlite.org/hlr30000.html&lt;/a&gt;&lt;br /&gt;&lt;a href="https://support.guidancesoftware.com/forum/downloads.php?do=file&amp;amp;id=1116"&gt;https://support.guidancesoftware.com/forum/downloads.php?do=file&amp;amp;id=1116&lt;/a&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-9076412311846075905?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/9076412311846075905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=9076412311846075905' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/9076412311846075905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/9076412311846075905'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2011/04/carving-sqlite-databases-from.html' title='Carving SQLite databases from unallocated clusters'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_QfcS6HZ5Sws/Tbhh2quYpfI/AAAAAAAABSM/Esgc9gGNQg4/s72-c/Database_Header_offsets_32_and_36-thumb.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-769554850949897516</id><published>2011-01-04T16:26:00.000Z</published><updated>2011-01-04T16:36:05.394Z</updated><title type='text'>Reporting and Exporting Emails from Encase</title><content type='html'>&lt;p style="clear: both"&gt;Regular readers will know that I champion Encase for most forensic tasks but I have to admit that my favourite forensic tool does not handle the investigation of email very well.&lt;/p&gt;&lt;p style="clear: both"&gt;My friend Oliver Smith, over at Cy4or, had cause to run a keyword search across a number of emails. These emails were contained in a number of email containers including dbx and pst files and the Encase email search had been carried out. The emails were reviewable in the records tab. There was a need however for the client to review emails that contained certain keyword hits. Encase provides an export to .msg facility whereby emails can be exported in the .msg format allowing a review using Microsoft Outlook. It is a therefore a simple task to filter the records tab to display only email with search hits (that is those with a value in the Search Hits column). Then by selecting those records you can export them as .msg files.&lt;/p&gt;&lt;p style="clear: both"&gt;The problem with this approach is that it is difficult to marry up the exported .msg files to a report detailing each msg files provenance. So in a case where many thousands of emails have been exported it is a real pain to provenance the relevant emails after the client's review. Depending on the email container concerned (e.g. pst, dbx etc.) Encase names the .msg file either by its subject or by some arbitrary description (Inbox.dbx-0.msg, Inbox.dbx-1.msg and so on). In situations where the client has copied notable emails out of the original export directory it can be very difficult to quickly trace the source email container.&lt;/p&gt;&lt;p style="clear: both"&gt;To address this problem Oliver has written an enscript to export selected emails to .msg along with a report detailing their provenance.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh3.ggpht.com/_QfcS6HZ5Sws/TSNG18KMeRI/AAAAAAAABKk/E8HYbFhhB-Y/s800/Screen_shot_2011-01-04_at_16.04.45.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh6.ggpht.com/_QfcS6HZ5Sws/TSNKOhpADSI/AAAAAAAABLY/UC7UETCZ09U/s800/Screen_shot_2011-01-04_at_16-thumb.04.45.png" height="59" align="left" width="154" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;The html report contains hyperlinks to each message along with the emails provenance and it's metadata. The file name of each exported email marries up to the reference number in the report.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh4.ggpht.com/_QfcS6HZ5Sws/TSNIypaywdI/AAAAAAAABK0/-NBzHgPBGpA/s800/Screen_shot_2011-01-04_at_16.12.34.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh6.ggpht.com/_QfcS6HZ5Sws/TSNKQNV-tfI/AAAAAAAABLg/svzfcLljSss/s800/Screen_shot_2011-01-04_at_16-thumb.12.34.png" height="354" align="left" width="500" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;As always if you would like a copy please email me.&lt;/p&gt;&lt;p style="clear: both"&gt;Richard Drinkwater&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-769554850949897516?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/769554850949897516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=769554850949897516' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/769554850949897516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/769554850949897516'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2011/01/reporting-emails-from-encase.html' title='Reporting and Exporting Emails from Encase'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_QfcS6HZ5Sws/TSNKOhpADSI/AAAAAAAABLY/UC7UETCZ09U/s72-c/Screen_shot_2011-01-04_at_16-thumb.04.45.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-8684696762972327873</id><published>2010-11-08T23:14:00.000Z</published><updated>2010-11-08T23:15:00.925Z</updated><title type='text'>Storage in Forensic Labs</title><content type='html'>&lt;p style="clear: both"&gt;As you probably appreciate the Sausage Factory type of computer forensics lab has to store and retain vast quantities of data. In the early days, even in the Sausage Factory, we imaged individual hard drives to individual hard drives. But because of the volume of data and the economics of this methodology we realised that we had to use some form of centralised storage. That was in 2002 and since then we picked up a few tips along the way. &lt;/p&gt;&lt;p style="clear: both"&gt;I know of a number of LE labs that have invested large sums (£100k plus) buying their storage area networks. Unfortunately further down the road they could not afford to increase capacity, had maintenance issues, or had other difficulties exacerbated by the shear complexity of their set up. At the other end of the scale I know of sizeable outfits who stick to imaging to hard drives because they believe that they would never acquire the budget to go down the centralised storage route. &lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh4.ggpht.com/_QfcS6HZ5Sws/TNUQKAjeHJI/AAAAAAAABKY/fyp8TE2RTxQ/s800/Jetstors1.jpg" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh4.ggpht.com/_QfcS6HZ5Sws/TNUQJYfZ0JI/AAAAAAAABKU/6ALbgRoujXI/s800/Jetstors1-thumb.jpg" height="600" align="left" width="183" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;I believe there is a middle ground. It is possible to buy 26TB of useable RAID6 storage (32TB raw), a Server and a backup solution for circa £15k. This solution is scalable with further units of 26TB useable storage costing circa £7k each. With a sensible set of operating procedures this type of solution will remain serviceable and fit for purpose for a number of years. &lt;br /&gt; &lt;br /&gt;The observant amongst you will have counted nine raid enclosures in the picture. The youngest unit is a Jetstor 516F which when equipped with 16 2TB enterprise class SAS hard drives provides 26TB usable storage and costs less than £10k. The oldest Infortrend unit is over five years old (and does not store production line data any longer). None of these units have ever lost data. They routinely recover from the inevitable hard drive failures. Although these units are not in the same league as EMC et al they are manufactured for the enterprise and in my experience have longevity built in. It is possible to provide similar levels of storage even cheaper with consumer grade equipment but this would probably be a false economy. &lt;br /&gt;&lt;br /&gt;All of these units are directly attached (via fibre) to a server. I have found that both Intel and HP manufacture (and support) servers that will probably last forever. Again I look after servers that have not missed a beat in five years. &lt;br /&gt;&lt;br /&gt;Although I have found that this type of kit will last I think it is sensible to plan to cycle replacement of primary production line equipment over a three to four year period. Since 2002 I have learnt a lot about this type of kit but have also found that choosing a supplier that will hold your hand when necessary can be particularly useful. In the UK I have found that &lt;a href="http://storage.vspl.co.uk/" target="_blank"&gt;VSPL&lt;/a&gt; understand the needs of LE computer forensic labs and most importantly have always been available to support me when required.&lt;br /&gt;&lt;br /&gt;This type of setup, in my experience, has worked well in supporting the production line nature of our forensics work. However a certain way of operating it is required. Which if I had to sum up in two points the first is that storage performance is best alongside processor performance - on the forensic workstation, and secondly if you want data resilience keep two copies of your data (in one form or another) at all times.&lt;br /&gt;&lt;br /&gt;Obviously there is a little bit more to it than that. If you are interested in finding out more please let me know,&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-8684696762972327873?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/8684696762972327873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=8684696762972327873' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/8684696762972327873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/8684696762972327873'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2010/11/storage-in-forensic-labs.html' title='Storage in Forensic Labs'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_QfcS6HZ5Sws/TNUQJYfZ0JI/AAAAAAAABKU/6ALbgRoujXI/s72-c/Jetstors1-thumb.jpg' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-7186420019684584026</id><published>2010-10-09T10:24:00.000+01:00</published><updated>2010-10-11T14:49:49.551+01:00</updated><title type='text'>FTK Imager 3</title><content type='html'>&lt;p style="clear: both"&gt;FTK Imager has always been the &lt;em&gt;crème de la crème &lt;/em&gt;of free forensic tools and now with the introduction of &lt;a href="http://www.accessdata.com/downloads/current_releases/imager/AccessData%20FTK%20Imager.exe" target="_blank"&gt;FTK Imager 3&lt;/a&gt; it is even better.&lt;/p&gt;&lt;p style="clear: both"&gt;Access Data have added some amazing functionality to this programs already extensive list of capabilities - &lt;a href="http://www.apple.com/pr/library/2010/01/27ipad.html" target="_blank"&gt;in fact to steal a phrase&lt;/a&gt; - its almost magical and it is certainly available at an unbelievable price. So what am I referring to? &lt;/p&gt;&lt;p style="clear: both"&gt;The answer of course is the new image mounting feature which allows a user to mount an image as a drive or physical device. Encase evidence files, Smart image files, Advanced Forensic Format images and dd images are supported. Additionally Encase Logical Evidence Files and Access Data's AD1 custom content images can be mounted logically. Full details in the &lt;a href="http://www.accessdata.com/downloads/current_releases/imager/FTKImager_ReleaseNotes.pdf" target="_blank"&gt;Release Notes&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;This functionality is accessed via &lt;em&gt;File/Image Mounting&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh4.ggpht.com/_QfcS6HZ5Sws/TLAseeTGsiI/AAAAAAAABIY/VxRbNv1I2nI/s800/FTK_image_mounter_dialogue.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh5.ggpht.com/_QfcS6HZ5Sws/TLA1E7lVyUI/AAAAAAAABJ0/MwPfxpwBOXc/s800/FTK_image_mounter_dialogue-thumb.png" height="208" align="left" width="500" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;em&gt;In this screen shot I have chosen to mount a drive from a Mac which includes a Bootcamp partition&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh6.ggpht.com/_QfcS6HZ5Sws/TLAse_BGxII/AAAAAAAABIg/VRdFo6Vz99A/s800/FTK_image_mounter_dialogue2.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh6.ggpht.com/_QfcS6HZ5Sws/TLA1GM7BYOI/AAAAAAAABJ8/gu3OJSBcaaA/s800/FTK_image_mounter_dialogue2-thumb.png" height="147" align="left" width="370" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;em&gt;This resulted in the EFI partition, the HFS+ partition and the NTFS Bootcamp partition all being given a drive letter. The whole drive is allocated the Physical Drive Number 4 in this example.&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;All of these resources are now available natively upon the machine that FTK Imager 3 is running on. The Physical Disk however is not listed in Disk Management nor does this functionality appear to install any devices within Device Manager. &lt;/p&gt;&lt;p style="clear: both"&gt;Logical mounting of non windows partitions (HFS+, EXT3 et al) will present an explorer view of these file systems as FTK imager itself sees them (&lt;em&gt;à la&lt;/em&gt; Encase VFS).&lt;/p&gt;&lt;p style="clear: both"&gt;This functionality provides many benefits and at first look at least, renders the costly alternatives of PFS/VFS and Mount Image Pro redundant. It also raises the bar in how we can construct virtual machines from images due to the ability to mount more than one drive at once, thus simplifying the creation of multi drive VMs. The functionality also facilitates non techies (lawyers, fraud investigators et al ) to easily peruse images.&lt;/p&gt;&lt;p style="clear: both"&gt;FTK Imager 3 also introduces support for VXFS, ex FAT and EXT4 file systems. As we sometimes say in England it's &lt;a href="http://en.wikipedia.org/wiki/Bollocks#.22Dog.27s_bollocks.22" target="_blank"&gt;the dogs...&lt;/a&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://www.phrases.org.uk/meanings/dog" s%20bollocks.html'="" link_target="_blank"&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-7186420019684584026?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/7186420019684584026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=7186420019684584026' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/7186420019684584026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/7186420019684584026'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2010/10/ftk-imager-3.html' title='FTK Imager 3'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_QfcS6HZ5Sws/TLA1E7lVyUI/AAAAAAAABJ0/MwPfxpwBOXc/s72-c/FTK_image_mounter_dialogue-thumb.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-1394001188209414821</id><published>2010-09-07T06:14:00.000+01:00</published><updated>2010-09-07T06:22:53.419+01:00</updated><title type='text'>Hiberfil Xpress</title><content type='html'>&lt;p style="clear: both"&gt;Departing on platform 2 .... I seem to have lost my train of thought ..... ever since I started drafting this post I have had to cope with lyrics of Crosby, Stills and Nash's &lt;a href="http://www.oldielyrics.com/lyrics/crosby_stills_nash/marrakesh_express.html" target="_blank"&gt;Marrakesh Express&lt;/a&gt; floating around in my brain. OK I know I've lost two thirds of my readership already - Crosby Stills and WHO?&lt;/p&gt;&lt;p style="clear: both"&gt;This post, once I've overcome a touch of nostalgia, is about the use of compression by Microsoft in the Hiberfil.sys file. From a forensic point of view this fact can be quite important and I have seen reference to this compression in a few of the other forensics blogs as the result of the work of &lt;a href="http://sandman.msuiche.net/docs/SandMan_Project.pdf" target="_blank"&gt;Matthieu Suiche&lt;/a&gt;. I also know that functionality exists in Xways to decompress Hiberfil.sys but until now this functionality was absent in Encase.&lt;/p&gt;&lt;p style="clear: both"&gt;The reason Microsoft uses compression is to &lt;a href="http://download.microsoft.com/download/7/E/7/7E7662CF-CBEA-470B-A97E-CE7CE0D98DC2/HiberFootprint.docx" target="_blank"&gt;minimise the footprint of Hiberfil.sys&lt;/a&gt;. The compression seeks to reduce Hiberfil.sys to about 75% of physical memory size. The presence of this compression can be identified easily - it exists in chunks typically 16 x 4096 bytes in size, each chunk having a header &lt;strong&gt;\x81\x81xpress &lt;/strong&gt;. Not all hiberfil.sys files utilise this compression.&lt;/p&gt;&lt;p style="clear: both"&gt;The reason it matters to us can be demonstrated by looking at a fairly common task for us forensicators; finding traces of Windows Live Messenger conversations. In the worst case scenario, when logging is turned off and the user has not saved their conversation, traces of conversations may only be found in memory (or artefacts of memory created on disk). Hiberfil.sys is used to store the contents of memory when the computer concerned is hibernated and therefore potentially may contain &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Notification_Protocol" target="_blank"&gt;Microsoft Notification Protocol&lt;/a&gt; messages relating to WLM conversation. A fairly typical grep keyword used to find these traces is &lt;strong&gt;\x20PF= . &lt;/strong&gt;When run over a hiberfil.sys containing xpress compression results may appear similar to the following screenshot:&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh3.ggpht.com/_QfcS6HZ5Sws/TIVgltI746I/AAAAAAAABHg/J_NXbBVn0hk/s800/xpress_uncoded_MSNP.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh5.ggpht.com/_QfcS6HZ5Sws/TIVl35vcWII/AAAAAAAABIE/eEyvKtC-nDw/s800/xpress_uncoded_MSNP-thumb.png" height="107" align="left" width="500" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;It can be seen that the message and the surrounding MSNP is a little garbled. This is because this message is within a xpress compressed block. Decompressing the block and viewing the same message results in:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh3.ggpht.com/_QfcS6HZ5Sws/TIVhe8_aqLI/AAAAAAAABHw/4s5B4KrN0rM/s800/xpress_decoded_MSNP.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh3.ggpht.com/_QfcS6HZ5Sws/TIVl4uLDUCI/AAAAAAAABIM/Q8o8mp5aa_M/s800/xpress_decoded_MSNP-thumb.png" height="94" align="left" width="500" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;It can be seen that the MSNP and the message is now in plain text. Until now achieving the decompression for Encase users required the use of another tool but I am pleased to report that after discussing this issue with Guidance Software's Simon Key he wrote an enscript for this purpose. The script can decompress all xpress blocks within hiberfil.sys and write them out to a logical evidence file. Alternatively it will decompress each block in turn and then perform a keyword search against it. Blocks containing search hits are written into a logical evidence file. The script is available at &lt;a href="https://support.guidancesoftware.com/forum/downloads.php?do=file&amp;amp;id=942" target="_blank"&gt;GSI's download center&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;Finding traces of MSNP is only one use, you can find index.dat contents, Limewire search terms and many other interesting artefacts in Hiberfil.sys - happy searching!&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://www.forensicswiki.org/wiki/Hiberfil.sys" target="_blank"&gt;http://www.forensicswiki.org/wiki/Hiberfil.sys&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee915356(PROT.13).aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/ee915356(PROT.13).aspx&lt;/a&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-1394001188209414821?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/1394001188209414821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=1394001188209414821' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/1394001188209414821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/1394001188209414821'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2010/09/hiberfil-xpress.html' title='Hiberfil Xpress'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_QfcS6HZ5Sws/TIVl35vcWII/AAAAAAAABIE/eEyvKtC-nDw/s72-c/xpress_uncoded_MSNP-thumb.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-7025347119856517865</id><published>2010-08-06T14:08:00.000+01:00</published><updated>2010-08-07T09:39:24.817+01:00</updated><title type='text'>USN Change Journal</title><content type='html'>&lt;p style="clear: both"&gt;This post includes&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;a new method to recover USN Change Journal artefacts from unallocated&lt;br /&gt;&lt;/li&gt;&lt;li&gt;some background information&lt;/li&gt;&lt;li&gt;some commentary on benefitting from the existing work of Lance Mueller and Seth Nazzaro&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;br /&gt;The examination of USN Change Journals is nothing new and was commented on as long ago as &lt;a href="http://www.forensickb.com/2008/09/enscript-to-parse-usnjrnl.html" target="_blank"&gt;September 2008 in Lance Mueller's blog&lt;/a&gt;. My interest was piqued more recently when &lt;a href="http://windowsir.blogspot.com/2010/07/links.html" target="_blank"&gt;Harlan Carvey discussed the python script&lt;/a&gt; written by Seth Nazzaro to parse these Journals. &lt;/p&gt;&lt;p style="clear: both"&gt;The update sequence number (USN) change journal provides a persistent log of all changes made to files on the volume. As files, directories, and other NTFS objects are added, deleted, and modified, NTFS enters records into the USN change journal, one for each volume. Each record indicates the type of change and the object changed. New records are appended to the end of the stream. Programs can consult the USN change journal to determine all the modifications made to a set of files. The part of the USN change journal that matters to us is the $USNJRNL•$J file found in the $Extend folder at the root of applicable NTFS volumes. This file is a sparse file which means that only non zero data is allocated and written to disk - from a practical point of view the relevance of this will become obvious in the next section of this post. The capability to create and maintain USN Change Journals exists in all versions of NTFS from version 3.0 onwards. This means that they can exist in all Windows versions from Windows 2000 onwards, however the functionality was only turned on by default in Vista and subsequent Windows versions.&lt;/p&gt;&lt;p style="clear: both"&gt;You might be thinking by now - why from an evidential perspective does the USN Change Journal matter? A good question and in many cases with data in a live file system USN Change Journal entries might not assist. However it may be relevant to establish the latest event to occur to a file. The event is recorded by creating a reason code in each record within the journal. These reason codes are detailed in Lance's post and by Microsoft &lt;a href="http://msdn.microsoft.com/en-us/library/cc232038(PROT.10).aspx"&gt;here&lt;/a&gt;. Where I think the journal entries may be more useful is in establishing some information about a file that no longer exists in the live file system but is referenced elsewhere.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Lance Mueller's Enscript&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://www.forensickb.com/2008/09/enscript-to-parse-usnjrnl.html" target="_blank"&gt;Lance's script&lt;/a&gt; is designed to parse a live $USNJRNL•$J file and output the parsed records into a CSV file. Like Seth Nazzaro I found that when I tried to run the Enscript Encase hung. This turned out not to be a problem with the script but a problem with how Encase presents sparse files. My $USNJRNL•$J file was recorded as being over 6GB in size. Only the last 32MB (or thereabouts) contained any data, the preceding data was a lot of zeroes -00 00 00 00 ad infinitum. Because the file is a sparse file the zeroed out portion of the file is not actually stored on disk - it is just presented virtually. However it appears that the script needed to parse through the almost 6GB of zeroes before it got to the juicy bits which gave the appearance of the script hanging (or resulting in Encase running out of memory). The solution to this was simple - copy out the non zero data into a file entitled $USNJRNL•$J. Create a folder named $Extend and place your extracted file into it. Drag the folder into a new Encase case as Single Files. Rerun the script which will then process the entries almost instantaneously. &lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Seth Nazzaro's Python Script&lt;/strong&gt;&lt;br /&gt;Seth wrote &lt;a href="http://code.google.com/p/parser-usnjrnl/" target="_blank"&gt;his script&lt;/a&gt; because he had difficulty in running the Enscript -possibly for the reasons described above. I have described how to run the script in my &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2010/07/python.html" target="_blank"&gt;earlier Python post&lt;/a&gt;. The script is useful in validating results ascertained by other means and particularly for the comprehensive way it parses the reason codes (many record entries contain more than one reason code and the way they amalgamate together can be a bit confusing). The script also outputs to a CSV file.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Recovering USN Change Journal Records from unallocated&lt;/strong&gt;&lt;br /&gt;Regular readers will know that I am particularly keen in recovering file system and other data from unallocated. I am pleased to see &lt;a href="http://blogs.sans.org/computer-forensics/2010/05/04/timestamped-registry-ntfs-artifacts-unallocated-space/" target="_blank"&gt;I am not alone&lt;/a&gt;. In many cases because of OS installations over the top of the OS where your evidence was created we have no choice but to recover evidence from unallocated. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh3.ggpht.com/_QfcS6HZ5Sws/TFfMffGCG7I/AAAAAAAABGY/1259JtE16MU/s800/USN_records_in_ua.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh6.ggpht.com/_QfcS6HZ5Sws/TFfNAmIk24I/AAAAAAAABGk/zE5uaRRNDk8/s800/USN_records_in_ua-thumb.png" height="318" align="left" width="500" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;em&gt;It is possible to locate large numbers of deleted USN Change Journal Records in unallocated clusters. There is a clear structure to them&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;To carve these from unallocated I use my file carver of choice &lt;a href="http://www.bladeforensics.com/" target="_blank"&gt;Blade&lt;/a&gt;. I have created a Blade data recovery profile which recovered a very large number of records from my test data.&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt; Profile Description: $UsnJrnl·$J records&lt;br /&gt; ModifiedDate: 2010-07-14 08:32:57&lt;br /&gt; Author: Richard Drinkwater&lt;br /&gt; Version: 1.7.10195&lt;br /&gt; Category: NTFS artefacts&lt;br /&gt; Extension: bin&lt;br /&gt; SectorBoundary: False&lt;br /&gt; HeaderSignature: ..\x00\x00\x02\x00\x00\x00&lt;br /&gt; HeaderIgnoreCase: False&lt;br /&gt; HasLandmark: True&lt;br /&gt; LandmarkSignature: \x00\x3c\x00&lt;br /&gt; LandmarkIgnoreCase: False&lt;br /&gt; LandmarkLocation: Static: Byte Offset&lt;br /&gt; LandmarkOffset: 57&lt;br /&gt; HasFooter: False&lt;br /&gt; Reverse: False&lt;br /&gt; FooterIgnoreCase: False&lt;br /&gt; FooterSignature: \x00&lt;br /&gt; BytesToEOF: 1&lt;br /&gt; MaxByteLength: 1024&lt;br /&gt; MinByteLength: 64&lt;br /&gt; HasLengthMarker: True&lt;br /&gt; UseNextFileSigAsEof: False&lt;br /&gt; LengthMarkerRelativeOffset: 0&lt;br /&gt; LengthMarkerSize: UInt32&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;You may wish to be more discriminatory and carve records relating to just avi and lnk files for example. A small change to the Landmark Signature achieves this.&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt; LandmarkSignature: \x00\x3c\x00[^\x2E]+\x2E\x00[al]\x00[vn]\x00[ik]&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;The next step is to process the recovered records. Given we already have two separate scripts to do this all we have to do is to present the recovered records to the scripts in a form they recognise. This is achieved by concatenating the recovered records contained within the blade output folders&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh6.ggpht.com/_QfcS6HZ5Sws/TFfWlh7Qr6I/AAAAAAAABGw/3g3MNrLiDfw/s800/Blade_output_folders.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh6.ggpht.com/_QfcS6HZ5Sws/TFfzyiEwLlI/AAAAAAAABHM/ozoIXiyllQw/s800/Blade_output_folders-thumb.png" height="391" align="left" width="343" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;This can be achieved at the command prompt, folder by folder &lt;em&gt;&lt;strong&gt;&amp;gt; copy *.bin $USNJRNL•$J&lt;/strong&gt;&lt;/em&gt;. However if you have recovered a very large number of records and have a considerable number of Blade output folders this can be a bit tedious. To assist with this John Douglas over at &lt;a href="http://www.qccis.com/digital-forensics" target="_blank"&gt;QCC&lt;/a&gt; wrote me a neat program to automate the concatenation within the Blade output folders (email me if you would like a copy). John's program Concat creates a concatenated file within each output folder in one go. Once you have the concatenated &lt;em&gt;$USNJRNL•$J &lt;/em&gt;files you can then run either script against them. Please note the folder structure the enscript requires as referred to above.&lt;/p&gt;&lt;p style="clear: both"&gt;Carving individual records in this fashion will result (at least in my test cases) in the recovery of a lot (possibly hundreds of thousands) of records. There will be considerable duplication. Excel 2007 or later will assist with the de-duplication within the scripts output.&lt;/p&gt;&lt;p style="clear: both"&gt;Given the potentially large number of records that are recoverable I found it sensible to&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;run a restricted Blade Recovery profile for just the file types you are interested in (e.g. avi and lnk)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Run John Douglas's concat.exe across Blades output&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In Windows 7 use the search facility to locate each concatenated &lt;em&gt;$USNJRNL•$J &lt;/em&gt;file&lt;br /&gt;&lt;/li&gt;&lt;li&gt;copy them all into one folder allowing Windows to rename the duplicates&lt;br /&gt;&lt;/li&gt;&lt;li&gt;at the command prompt use a for loop to process them along the lines of&lt;br /&gt;&lt;strong&gt;&amp;gt;for /L %a in (1,1,40) do python UsnJrnl-24NOV09.py -f "UsnJrnl&lt;/strong&gt;&lt;em&gt;•&lt;/em&gt;&lt;strong&gt;$J (%a)" output%a -t&lt;/strong&gt;&lt;br /&gt;or&lt;br /&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;strong&gt;for /L %a in (1,1,40) do python UsnJrnl-24NOV09.py -f "UsnJrnl&lt;/strong&gt;&lt;em&gt;•&lt;/em&gt;&lt;strong&gt;$J (%a)" -s &amp;gt;&amp;gt; output.tsv&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;or drag the concatenated files back into Encase as single files and process further with Lance's script.&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://www.opensource.apple.com/source/ntfs/ntfs-64/kext/ntfs_usnjrnl.h?txt" target="_blank"&gt;http://www.opensource.apple.com/source/ntfs/ntfs-64/kext/ntfs_usnjrnl.h?txt&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/msj/0999/journal/journal.aspx" target="_blank"&gt;http://www.microsoft.com/msj/0999/journal/journal.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc976808.aspx " target="_blank"&gt;http://technet.microsoft.com/en-us/library/cc976808.aspx &lt;/a&gt;&lt;br /&gt;&lt;a href="http://wapedia.mobi/en/USN_Journal" target="_blank"&gt;http://wapedia.mobi/en/USN_Journal&lt;/a&gt; &lt;br /&gt;&lt;a href="http://code.google.com/p/parser-usnjrnl/" target="_blank"&gt;http://code.google.com/p/parser-usnjrnl/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.forensickb.com/2008/09/enscript-to-parse-usnjrnl.html" target="_blank"&gt;http://www.forensickb.com/2008/09/enscript-to-parse-usnjrnl.html&lt;/a&gt;  &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-7025347119856517865?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/7025347119856517865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=7025347119856517865' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/7025347119856517865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/7025347119856517865'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2010/08/usn-change-journal.html' title='USN Change Journal'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_QfcS6HZ5Sws/TFfNAmIk24I/AAAAAAAABGk/zE5uaRRNDk8/s72-c/USN_records_in_ua-thumb.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-4079783460255254021</id><published>2010-07-23T13:41:00.000+01:00</published><updated>2010-07-23T13:41:32.440+01:00</updated><title type='text'>Python</title><content type='html'>&lt;p style="clear: both"&gt;As regular readers will know here in the Sausage Factory our primary forensics tool is Encase. From time to time however we need to try out other tools to validate our results. Recently I wanted to utilise two python scripts widely discussed elsewhere and as a result had to figure out the mechanics of getting these scripts to run on a forensic workstation running Windows 7. I thought I'd share the process with you. Now some of you are highly geeky programmer types who write and run scripts for breakfast - if thats you turn away now. This blog post is in no way definitive and is intended for python newbies wishing to run python scripts in their forensicating but who until now didn't know how. &lt;/p&gt;&lt;p style="clear: both"&gt;First off we need to install and configure Python&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;Download &lt;a href="http://www.python.org/download/" target="_blank"&gt;Python&lt;/a&gt; - I downloaded Python 2.7 Window X86-64 installer for my Windows 7 64 bit box&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Run the installer&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Right click on the &lt;em&gt;Computer icon&lt;/em&gt;, select &lt;em&gt;properties&lt;/em&gt;, select &lt;em&gt;Advanced system settings&lt;/em&gt; and click on the &lt;em&gt;Environment Variables&lt;/em&gt; button.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In the System Variables pane you will have a variable entitled Path, select it and click on edit&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Add to the entries already there &lt;em&gt;&lt;strong&gt;;C:\Python27 &lt;/strong&gt;(assuming you installed Python 2.7 to the default location)&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;The two scripts I wanted to run were David Kovar's analyzeMFT and the $USNJRNL parser written by Seth Nazzaro. They are designed to parse MFTs and USN Change Journals respectively which can be copied out of an image or made available via VFS or PDE. More about analyzeMFT can be found at the &lt;a href="http://integriography.wordpress.com/?s=analyzeMFT" target="_blank"&gt;author's blog&lt;/a&gt;. Detailing how I ran these scripts will give a clear indication of how to run these, and many other python scripts, and utilise their output.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;analyzeMFT&lt;/strong&gt;&lt;br /&gt;Download script by visiting &lt;a href="http://www.integriography.com/" target="_blank"&gt;http://www.integriography.com/ &lt;/a&gt; and right clicking on the &lt;em&gt;Downloaded Here&lt;/em&gt; link in the Downloads section (for the source code) and saving the download as a text file. Once downloaded change the file extension to &lt;em&gt;&lt;strong&gt;.py.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;Save it somewhere and then run IDLE (installed with Python) and open the analyzeMFT.py script. Locate the words &lt;strong&gt;noGUI = False&lt;/strong&gt; and edit to read &lt;strong&gt;noGUI = True&lt;/strong&gt; and save.&lt;/p&gt;&lt;p style="clear: both"&gt;To run &lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;open command prompt&lt;br /&gt;&lt;/li&gt;&lt;li&gt;at prompt type &lt;strong&gt;Python C:\Path_to_the_script\analyzeMFT.py -f U:\Path_to_your_extracted_or_mounted_MFT\$MFT -o $MFT_parsed&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The above command runs the script against your extracted or mounted $MFT and outputs the results to a file $MFT_parsed&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Open $MFT_parsed using the text import wizard in Excel selecting the text format for each column.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;Thanks to David Kovar for making this script available.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;$USNJRNL•$J Parser&lt;/strong&gt;&lt;br /&gt;This script can be downloaded at &lt;a href="http://code.google.com/p/parser-usnjrnl/"&gt;http://code.google.com/p/parser-usnjrnl/&lt;/a&gt;. &lt;/p&gt;&lt;p style="clear: both"&gt;To run&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;open command prompt&lt;br /&gt;&lt;/li&gt;&lt;li&gt; at prompt type &lt;strong&gt;Python C:\Path_to_the_script\UsnJrnl.py &lt;/strong&gt;&lt;strong&gt;-f U:\Path_to_your_extracted_or_mounted_&lt;strong&gt;USNJRNL•$J&lt;/strong&gt;\&lt;strong&gt;&lt;strong&gt;USNJRNL•$&lt;/strong&gt;&lt;/strong&gt; -o Output_file -c&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The above command runs the script against your extracted or mounted $USNJRNL•$J and outputs the results to Output_file.csv&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;strong&gt;Notes&lt;/strong&gt;&lt;br /&gt;Typing at the command prompt &lt;strong&gt;Python path_to_script.py &lt;/strong&gt;wil give some help about a scripts options. For example &lt;strong&gt;Python UsnJrnl.py&lt;/strong&gt; results in the output&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt;Usage: UsnJrnl.py [options]&lt;br /&gt;Options:&lt;br /&gt; -h, --help show this help message and exit&lt;br /&gt; -f INFILENAME, --infile=INFILENAME &lt;br /&gt; input file name&lt;br /&gt; -o OUTFILENAME, --outfile=OUTFILENAME&lt;br /&gt; output file name (no extension)&lt;br /&gt; -c, --csv create Comma-Separated Values Output File&lt;br /&gt; -t, --tsv create Tab-Separated Values Output File&lt;br /&gt; -s, --std write to stdout&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;I have installed Python 2.7. There are other (and later) versions available including some that are not completely open source. It is also possible to install Python modules to provide a GUI. I have not installed these - takes the fun out of running scripts!&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-4079783460255254021?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/4079783460255254021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=4079783460255254021' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/4079783460255254021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/4079783460255254021'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2010/07/python.html' title='Python'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-7277585141144188804</id><published>2010-07-19T22:32:00.000+01:00</published><updated>2010-08-06T14:20:52.946+01:00</updated><title type='text'>Gatherer Transaction Log Files - a Windows Search artefact</title><content type='html'>&lt;p style="clear: both"&gt;A recurring theme in many examinations is the prevalence of evidence in unallocated clusters. Reinstallation of the OS is often to blame and a recent case where XP was installed on a drive where the previous OS was Vista further complicated matters. All relevant data had been created during Vista's reign and the challenge was to determine what files and folders existed under this OS. The Encase Recover Folders feature assisted to an extent as did &lt;a href="http://support.digital-detective.co.uk/KB/Default.aspx?ID=KB80038" target="_blank"&gt;Digital Detective's Hstex 3&lt;/a&gt;. Loading the output of Hstex 3 into NetAnalysis allowed me to identify the download of a number of suspect files and some local file access to files within the Downloads folder.&lt;/p&gt;&lt;p style="clear: both"&gt;The next step was to carry out a keyword search utilising the suspect file names as keywords. This is always a good technique and results in the identification of useful evidence in a variety of artefacts (e.g. index.dats, link files, registry entries, NTFS file system artefacts et al) but because in this case every thing was unallocated identifying all the artefacts was a little tricky. A considerable number of the search hits were clearly within some structured data but the data was not an artefact I was familiar with.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh4.ggpht.com/_QfcS6HZ5Sws/TEAXD27IeQI/AAAAAAAABDU/1v8nnbBBfzk/s800/Gather_Log_Entries_in_UA.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh3.ggpht.com/_QfcS6HZ5Sws/TEAcV4YT4FI/AAAAAAAABDo/ygTiWN-kshw/s800/Gather_Log_Entries_in_UA-thumb.png" height="299" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;em&gt;I have highlighted Record Entry Headers to draw attention to the structured nature of the data. This screen shot is of test data where the file names/path are stored as unicode as opposed to ASCII in the case I was investigating.&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;A bit of googling led me to page 42 of &lt;em&gt;Forensic Implications of Windows Vista - Barrie Stewart &lt;/em&gt;which identified the structured data I had located as being part of &lt;em&gt;Gatherer Transaction Log &lt;/em&gt;files created by the search indexer process of &lt;em&gt;Windows Search&lt;/em&gt;. These files have a filename in the format &lt;em&gt;SystemIndex.NtfyX.gthr&lt;/em&gt; where the X is replaced by a decimal number and on a live Vista system can be found at the path &lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;C:\ProgramData\Microsoft\Search\Data\Applications\Windows\Projects\SystemIndex\&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;These files have the words &lt;em&gt;Microsoft Search Gatherer Transaction Log. Format Version 4.9&lt;/em&gt; as a file header. The files are a transaction log of entries committed to the Windows search database indexing queues. The SearchIndexer process monitors the &lt;a href="http://msdn.microsoft.com/en-us/library/aa363798(v=VS.85).aspx" target="_blank"&gt;USN Change Journal&lt;/a&gt; which is part of the NTFS file system used to track changes to a volume. When a change is detected (by the creation of a new file for example) the SearchIndexer is notified and the file (providing it is in an indexable location - mainly User folders) is added to the queue to be indexed. The USN Change Journal is also something that may contain evidentially useful information and I will look at it in more depth in &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2010/08/usn-change-journal.html" target="_blank"&gt;a later blog post&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;Sometimes artefacts are only of academic interest but it was fairly apparent that this data could have some evidential value. Each file or folder has a record entry; parts of which had been deconstructed by &lt;em&gt;Stewart. &lt;/em&gt;I was able to identify two additional pieces of information within each record - the length of the Filename block and a value that is possibly a sequence or index number or used to denote priority. I also observed some variations in some parts of the record that had been constant in &lt;em&gt;Stewart's&lt;/em&gt; test data.&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;Record Header 0x4D444D44 [4 bytes]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Unknown variable data [12 bytes]&lt;/li&gt;&lt;li&gt;FILETIME Entry [8 bytes] &lt;br /&gt;&lt;/li&gt;&lt;li&gt;FILETIME Entry [8 bytes] or a value of 0x[0100]00000000000000&lt;/li&gt;&lt;li&gt;Unknown variable data [12 bytes]&lt;/li&gt;&lt;li&gt;Length of file path following plus 1 byte (or plus 2 bytes if file path stored as unicode) [4 bytes] stored as 32 bit integer&lt;/li&gt;&lt;li&gt;Name and fullpath of file/folder (ASCII or Unicode -version dependant) [variable length]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;0x000000000000000000FFFFFFFF [13 bytes]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;FILETIME Entry [8 bytes] or a value of 0x[0100]00000000000000&lt;br /&gt;&lt;/li&gt;&lt;li&gt;0xFFFFFFFF [4 bytes]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;FILETIME Entry [8 bytes] or a value of 0x[0100]00000000000000&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Unknown variable data [4 bytes]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Sequence or index number? [1 byte] stored as 8 bit integer&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Unknown variable data [15 bytes]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;FILETIME Entry [8 bytes] or a value of 0x[0100]00000000000000&lt;br /&gt;&lt;/li&gt;&lt;li&gt;FILETIME Entry [8 bytes] or a value of 0x[0100]00000000000000&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Unknown variable data [20 bytes]&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Microsoft do not seem to have publicly documented the record structure. To establish how useful this data can be I came to the conclusion that I needed to recover all of these records from unallocated. I needed an enscript and Oliver Smith over at &lt;a href="http://www.cy4or.co.uk" target="_blank"&gt;Cy4or&lt;/a&gt; kindly wrote one for me. I wanted the enscript to parse out the file and path information, sequence or index number, the six time stamps and a hex representation of each unknown range of data into a spreadsheet. The script searches for and parses individual records (from the live systemindex file and unallocated) as opposed to entire files. I was astonished at just how much information the script parsed out - email me if you want a copy. Setting the spreadsheet to use a fixed width font (Courier New) lines up the extracted hex very well should anyone want to reverse engineer these records further. As it stands the file paths and timestamps can provide some useful evidential information, particularly when the recovered records have been recovered from unallocated clusters and relate to a file system older than the current one.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Timestamps&lt;/strong&gt;&lt;br /&gt;Obviously once you have run this enscript or manually examined the records the first question that arises is what are the timestamps. Establishing this has not been as easy as it could be and hopefully a little bit of crowd sourcing will sort this out for all of us. Post a comment if you can help in this regard. One approach is to use the hex 64 bit filetime value as a keyword and see where you get hits. Hits in another timestamp indicates that the timestamp is the same down to the nanosecond. Carrying out this process will result in hits in OS system files and fragments of them. I have found on the limited test data set I have used that Timestamp 3 matched the &lt;a href="http://kcrazy.timeegg.com/Favorites/ntfsdoc.htm#id4752813" target="_blank"&gt;File Modified (File Altered)&lt;/a&gt; date within MFT for the file concerned and the timestamp for the same file in the USN Change Journal. The timestamp in the USN Change Journal record is the absolute system time that the change journal event was logged &lt;a href="http://msdn.microsoft.com/en-us/library/cc232038%28PROT.10%29.aspx" target="_blank"&gt;(1)&lt;/a&gt;. It is worth reminding readers who are Encase users that Encase uses different terminology for the time stamps within the MFT - &lt;a href="http://whereismydata.wordpress.com/2009/04/10/forensics-what-does-entry-modified-mean-in-encase/" target="_blank"&gt;file modified is referred to as Last Written&lt;/a&gt;. I think it likely that timestamps 1 and 2 are linked to the indexing function (e.g. time submitted for indexing) given the journalling nature of the file but can not either prove this by testing or confirm this within Microsoft documentation. I can say that in testing sorting on Timestamp 1 gave a clear timeline of the file system activity I had provoked within User accessible folders.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh5.ggpht.com/_QfcS6HZ5Sws/TEVCEQ0yzZI/AAAAAAAABGQ/304Fnoo-KE8/s800/example_spreadsheet.jpg" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh5.ggpht.com/_QfcS6HZ5Sws/TEVCByCAfVI/AAAAAAAABGM/RPxxtg9BFwI/s800/example_spreadsheet-thumb.jpg" height="229" align="left" width="500" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;&lt;br /&gt;&lt;em&gt;Example CSV output of Enscript (click to enlarge)&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=F8E87C7D-9404-4914-92AE-DDE09389A64E&amp;amp;displaylang=en" target="_blank"&gt;Good citizenship when developing background services for Windows Vista - Microsoft&lt;/a&gt;&lt;br /&gt;&lt;a href="http://whereismydata.files.wordpress.com/2009/09/forensic-implications-of-windows-vista.pdf" target="_blank"&gt;Forensic Implications of Windows Vista - Barrie Stewart&lt;/a&gt;&lt;br /&gt;Forensic Artefacts Present in Microsoft Windows Desktop Search - John Douglas MSc Thesis&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc678933(VS.85).aspx"&gt;Indexing Process in Windows Search - Microsoft MSDN&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc232038%28PROT.10%29.aspx" target="_blank"&gt;(1) http://msdn.microsoft.com/en-us/library/cc232038%28PROT.10%29.aspx&lt;/a&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-7277585141144188804?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/7277585141144188804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=7277585141144188804' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/7277585141144188804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/7277585141144188804'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2010/07/gatherer-transaction-log-files-windows.html' title='Gatherer Transaction Log Files - a Windows Search artefact'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_QfcS6HZ5Sws/TEAcV4YT4FI/AAAAAAAABDo/ygTiWN-kshw/s72-c/Gather_Log_Entries_in_UA-thumb.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-3918805051900646386</id><published>2010-06-28T21:56:00.000+01:00</published><updated>2010-06-28T21:56:47.824+01:00</updated><title type='text'>Safari Internet History round up</title><content type='html'>&lt;p style="clear: both"&gt;The last few posts all concern the recovery of internet history created by the Safari browser. I like to think of internet history in the wider sense and consider any artefact that demonstrates that a user visited a URL at a particular time.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2010/06/recovering-safari-browser-history-from.html" target="_blank"&gt;Recovering Safari browser history from unallocated&lt;/a&gt; deals with history.&lt;br /&gt;&lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2010/06/safari-browser-cache-examination-of.html" target="_blank"&gt;Safari browser cache -examination of Cache.db&lt;/a&gt; deals with the cache.&lt;br /&gt;&lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2010/06/never-mind-cookies-lets-carve-crumbs.html" target="_blank"&gt;Never mind the cookies lets carve the crumbs - Safari Cookie stuff&lt;/a&gt; looks at Cookies.&lt;br /&gt;&lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2010/06/safari-history-spotlight-webhistory.html" target="_blank"&gt;Safari History - spotlight webhistory artefacts&lt;/a&gt; examines Spotlight snapshots of web pages accessed with Safari.&lt;/p&gt;&lt;p style="clear: both"&gt;To round things up I will briefly list some other files or locations that may provide internet history created by the Safari browser (the ~ denotes the path is within a user profile)&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;em&gt;~/Library/Safari/LastSession.plist&lt;/em&gt;&lt;br /&gt;Used to store details of the last browser session allowing a user to select &lt;em&gt;Reopen All Windows from Last Session &lt;/em&gt;from the safari history menu.&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;em&gt;~/Library/Safari/WebpageIcons.db&lt;br /&gt;~/Library/Safari/Icons.db&lt;/em&gt;&lt;br /&gt;Used to store the associations between websites and their favicons.&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;~&lt;em&gt;/Library/Safari/TopSites.plist&lt;br /&gt;~/Library/PubSub/Feeds/............... .xml&lt;br /&gt;~/Library/Caches/com.apple.Safari/Webpage Previews&lt;/em&gt;&lt;br /&gt;&lt;a href="http://www.apple.com/safari/includes/overlay_features1.html#gallery-features1" target="_blank"&gt;TopSites is a gallery&lt;/a&gt; of recently visited web sites. The binary &lt;em&gt;TopSites.plist&lt;/em&gt; details the websites featured in this gallery. The image representing each webpage is stored within the &lt;em&gt;Webpage Previews&lt;/em&gt; folder. This folder also stores any &lt;em&gt;Quicklook&lt;/em&gt; representation of a webpage, for example when managing &lt;em&gt;Bookmarks&lt;/em&gt; or reviewing &lt;em&gt;History&lt;/em&gt;. File names of files in the Webpage Previews folder are the MD5 of the associated URL. Safari monitors whether a page has altered since it was last viewed and appends a blue star to the TopSites view for those sites that have. The xml files in &lt;em&gt;PubSub/Feeds&lt;/em&gt; are connected with the monitoring.&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;em&gt;~/Library/Safari/Downloads.plist&lt;/em&gt;&lt;br /&gt;An xml plist the contents of which are self explanatory.&lt;br /&gt;&lt;em&gt;~/Library/Caches/Metadata/Safari/History/.tracked filenames.plist&lt;/em&gt;&lt;br /&gt;A binary plist that &lt;em&gt;may&lt;/em&gt; be connected to Safari spotlight web history artefacts.&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-3918805051900646386?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/3918805051900646386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=3918805051900646386' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/3918805051900646386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/3918805051900646386'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2010/06/safari-internet-history-round-up.html' title='Safari Internet History round up'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-2015506204853149779</id><published>2010-06-22T09:50:00.000+01:00</published><updated>2010-06-22T09:50:20.554+01:00</updated><title type='text'>Never mind the cookies lets carve the crumbs - Safari Cookie stuff</title><content type='html'>&lt;p style="clear: both"&gt;Safari versions 3, 4 and 5 amalgamates Cookie data into one large file &lt;em&gt;Cookies.plist&lt;/em&gt; stored at the path &lt;em&gt;~/Library/Cookies. &lt;/em&gt;This plist is an XML plist. The Encase Internet History search will parse these files and when set to Comprehensive search will find fragments of them in unallocated. However perhaps due to its lack of granularity this search takes forever to run across a Mac and in my experience often fails to complete&lt;/p&gt;&lt;p style="clear: both"&gt;As is becoming a recurring theme with my Safari examinations I have turned to &lt;a href="http://www.bladeforensics.com/" target="_blank"&gt;Blade&lt;/a&gt; to carve out Safari Cookie data from unallocated. The Cookie.plist consists of an array of dictionary objects. &lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh6.ggpht.com/_QfcS6HZ5Sws/TB9p_jhElwI/AAAAAAAAA_8/L_y4kxCOpZ0/s800/Screen_shot_2010-06-21_at_14.22.20.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh6.ggpht.com/_QfcS6HZ5Sws/TCB5OixfqEI/AAAAAAAABDA/dPBksDKChvE/s800/Screen_shot_2010-06-21_at_14-thumb.22.20.png" height="231" align="left" width="245" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;Using Apple's Property List Editor it can be seen that this Cookie.plist has an array of 7074 Dictionary objects. Each Dictionary object is a Cookie in its own right.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh6.ggpht.com/_QfcS6HZ5Sws/TB9qAo8oBeI/AAAAAAAABAE/Rm7KeU4471w/s800/Screen_shot_2010-06-21_at_14.29.1.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh6.ggpht.com/_QfcS6HZ5Sws/TCB5Q7hqFEI/AAAAAAAABDI/1n3FQIb_3iQ/s800/Screen_shot_2010-06-21_at_14-thumb.29.1.png" height="348" align="left" width="379" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;Looking at the underlying XML you can see how each dictionary object is structured.&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;In creating a recovery profile I considered whether I wanted to carve out deleted cookie plists in their entirety or whether I should carve each dictionary object separately. &lt;em&gt;These dictionary objects are fragments of the cookie.plist - hence the crumb reference in the title -after all fragments of cookies are clearly crumbs.&lt;/em&gt; I decided that it would be a more thorough search if I carved for the dictionary objects themselves and the following Blade data recovery profile did the business (this data is extracted from Blade's audit log -another neat feature).&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt; Profile Description: Safari Cookie records&lt;br /&gt; ModifiedDate: 2010-06-17 06:33:30&lt;br /&gt; Author: Richard Drinkwater&lt;br /&gt; Version: 1.3.10168&lt;br /&gt; Category: Safari artefacts&lt;br /&gt; Extension: plist&lt;br /&gt; SectorBoundary: False&lt;br /&gt; HeaderSignature: \x3C\x64\x69\x63\x74\x3E\x0A\x09\x09\x3C\x6B\x65\x79\x3E\x43\x72\x65\x61\x74\x65\x64\x3C\x2F\x6B\x65\x79\x3E\x0A\x09\x09\x3C\x72\x65\x61\x6C\x3E&lt;br /&gt; HeaderIgnoreCase: False&lt;br /&gt; HasLandmark: True&lt;br /&gt; LandmarkSignature: &amp;lt;key&amp;gt;Expires&amp;lt;/key&amp;gt;&lt;br /&gt; LandmarkIgnoreCase: False&lt;br /&gt; LandmarkLocation: Floating&lt;br /&gt; LandmarkOffset: 0&lt;br /&gt; HasFooter: True&lt;br /&gt; Reverse: False&lt;br /&gt; FooterIgnoreCase: False&lt;br /&gt; FooterSignature: \x3C\x2F\x73\x74\x72\x69\x6E\x67\x3E\x0A\x09\x3C\x2F\x64\x69\x63\x74\x3E\x0A&lt;br /&gt; BytesToEOF: 19&lt;br /&gt; MaxByteLength: 9728&lt;br /&gt; MinByteLength: 200&lt;br /&gt; HasLengthMarker: False&lt;br /&gt; UseNextFileSigAsEof: True&lt;br /&gt; LengthMarkerRelativeOffset: 0&lt;br /&gt; LengthMarkerSize: UInt16&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Processing the Carved Files&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;If your case is anything like mine you will carve out thousands and thousands of individual cookies (or at least the cookie data represented in XML). There are a number of options to process this data further.&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Option 1&lt;/strong&gt;&lt;br /&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;Drag output into Encase as single files. &lt;/li&gt;&lt;li&gt;Run Encase Comprehensive Internet History search.&lt;/li&gt;&lt;li&gt;View results on records tab.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;There are two issues with this method. Firstly Encase does not parse the Cookie created date which is stored as an CFAbsolute timestamp. Secondly there is the issue of duplicates. You will have thousands and thousands of duplicates. These can be managed by hashing the carved files. I would also recommend running the data recovery profile over any live cookie.plists, loading the output into Encase as single files, hashing the output and then creating a hash set. This hash set will allow you to spot additional cookies over and above those in the live cookie plists in any cookies carved from unallocated.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Option 2&lt;/strong&gt;&lt;br /&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;Concatenate the contents of each output folder by navigating to the folder at the command prompt and executing the command &lt;strong&gt;copy *.plist combined.plist.&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;With a text editor add the plist header and array tag at the beginning of &lt;strong&gt;combined.plist &lt;/strong&gt;and the closing plist and array tags at the end.&lt;/li&gt;&lt;li&gt;Make sure the formatting of &lt;strong&gt;combined.plist&lt;/strong&gt; looks OK with a text editor.&lt;/li&gt;&lt;li&gt;Process &lt;strong&gt;combined.plist&lt;/strong&gt; with &lt;a href="http://jafat.sourceforge.net/files.html" target="_blank"&gt;Jake Cunningham's safari cookie plist parser&lt;/a&gt;. &lt;br /&gt;&lt;/li&gt;&lt;li&gt;The utility is run from the command prompt using a command in the form&lt;br /&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;em&gt;[path to Safari_cookies.exe] [path to combined.plist] &amp;gt; cookies.txt&lt;/em&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;This parses the plist into the file &lt;em&gt;cookies.txt&lt;/em&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;This text file may contain many thousands of Cookies. Ideally it would be nicer to port this data into a spreadsheet. To do this I (&lt;em&gt;there is probably a far more elegant way to do this BTW&lt;/em&gt;) open &lt;em&gt;cookies.txt&lt;/em&gt; in a hex editor (PSPad Hex) and delete all the carriage returns 0D0A. I then find the string &lt;em&gt;Path&lt;/em&gt; [50617468] and replace it with 0D0A7C50617468 -in other words preface path with a carriage return and the pipe symbol |. I then find and replace the strings &lt;em&gt;Domain, Name, Created, Expires&lt;/em&gt; and &lt;em&gt;Value&lt;/em&gt; and replace each in turn with the same string prefaced with | (e.g. &lt;em&gt;|Domain, |Name&lt;/em&gt; etc. etc.)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I then use Excel's text import wizard to import the edited &lt;em&gt;cookies.txt&lt;/em&gt; setting the delimiter to the pipe symbol | only.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;This results in each row relating to one cookie. You can then utilise Excel's very powerful duplicate removal tool.&lt;/li&gt;&lt;/ul&gt;Both the Mac and Windows versions work OK and the utility converts the CFAbsolute formatted cookie created timestamp.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-2015506204853149779?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/2015506204853149779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=2015506204853149779' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/2015506204853149779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/2015506204853149779'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2010/06/never-mind-cookies-lets-carve-crumbs.html' title='Never mind the cookies lets carve the crumbs - Safari Cookie stuff'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_QfcS6HZ5Sws/TCB5OixfqEI/AAAAAAAABDA/dPBksDKChvE/s72-c/Screen_shot_2010-06-21_at_14-thumb.22.20.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-804181426211900613</id><published>2010-06-15T10:59:00.000+01:00</published><updated>2010-06-15T10:59:50.396+01:00</updated><title type='text'>Safari History - spotlight webhistory artefacts</title><content type='html'>&lt;p style="clear: both"&gt;June is Safari month here in the Sausage Factory and this post is the third in the series. Just imagine having an observation point in the house across the road from your suspect. When the suspect surfs the internet the man in the OP (with the help of a good pair of binoculars) makes notes of what he reads on screen (OK.. he may use a long lens instead of binoculars and take photos but bear with me). Essentially this is exactly what Spotlight does when a user utilises the Safari web browser (versions 3,4 and 5) to view web pages - it writes the URL, Web Page Title and all the text content in the web page into a file. &lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;These files filenames are in the format &lt;em&gt;URL.webhistory&lt;/em&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Their internal structure is that of a binary plist with three strings to each record Full Page Text, Name and URL&lt;/li&gt;&lt;li&gt;They are stored at the path ~/Library/Caches/Metadata/Safari/History&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The file created date of these files represents the time that the URL was first visited (since History was last cleared)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The file modified date represents the time that the URL was last visited&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;It can be seen that it is possible to deduce information from these files that amounts to internet history and therefore it it may be appropriate to consider this data along with records extracted from history.plist and cache.db files.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Recovery from Unallocated&lt;/strong&gt;&lt;br /&gt;These files are deleted when a user clears Safari history. However it is possible to recover these files from unallocated. Using my file carver of choice - &lt;a href="http://www.bladeforensics.com/" target="_blank"&gt;Digital Detective's Blade&lt;/a&gt; I wrote an appropriate Data Recovery Profile (which I will happily share with you upon request)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh5.ggpht.com/_QfcS6HZ5Sws/TBYd2VEZjeI/AAAAAAAAA9M/xPd4K7JXMwQ/s800/webhistory_Recovery_profile_screenshot.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh3.ggpht.com/_QfcS6HZ5Sws/TBY-8GnoS6I/AAAAAAAAA_g/_LL5H3nceVI/s800/webhistory_Recovery_profile_screenshot-thumb.png" height="324" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;&lt;em&gt;Click on image for larger version&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Running this profile resulted in the recovery of over ten thousand files. I then added the recovered files into Encase as single files. I noticed that a small percentage of these files had the text content stored as ascii and not unicode text. I am at this stage not sure why.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Investigation of Live and Recovered Spotlight Webhistory Files using Encase&lt;/strong&gt;&lt;br /&gt;If you review these files using Encase you will see in the View (bottom) pane the relevant data -the URL is at the start of the file, followed by the text in unicode and then the webpage title near the end of the file. If the content is relevant reporting on it is a pain -potentially three sweeping bookmarks are required using two different text styles. The unicode text sweeping bookmark is also likely to be truncated due its length. Therefore reviewing any number of these files this way is not a good plan.&lt;/p&gt;&lt;p style="clear: both"&gt;The eagle eyed amongst you will have observed that in my Blade Data Recovery Profile I gave the recovered files a plist file extension (as opposed to a webhistory file extension). This because these files have a binary plist structure and I use Simon Key's binary &lt;a href="https://support.guidancesoftware.com/forum/downloads.php?do=file&amp;amp;id=865" target="_blank"&gt;Plist Parser v3.5&lt;/a&gt; enscript to parse them. This excellent enscript allows the option to create a logical evidence file which creates a file for each plist name/value pair. I run the enscript with this option, add the logical evidence file back into my case and the review the contents with just a unicode text style selected and bookmark as appropriate. This method is much quicker and removes the need to mess about with unicode formatting. It also makes keyword searching easier. For example to view all URLs green plate (set include) your logical evidence file, apply a sort to the name column in the table pane, scroll down to cause each URL to appear in turn in the view pane. Use a similar method for the Full Page Text and Name items.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh6.ggpht.com/_QfcS6HZ5Sws/TBY8ydwS_aI/AAAAAAAAA-k/eA_e71tQGm0/s800/Encase_plist_parser_l01.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh6.ggpht.com/_QfcS6HZ5Sws/TBY-9-cYB_I/AAAAAAAAA_o/kKulCP1Ao90/s800/Encase_plist_parser_l01-thumb.png" height="393" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;em&gt;Click on image for larger version&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Miscellaneous Information in relation to the webhistory file format&lt;/strong&gt;&lt;br /&gt;Prior to considering the Plist Parser enscript to parse these files I briefly looked at its format with a view to tempting some programming friends to write me a parser. I established that&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;The file is a binary plist. I do not want to too far into the intricacies of how these plists are assembled. We are interested in objects within the object table. Binary plists use marker bytes to indicate object type and size. The objects we are interested in are strings, either ASCII or unicode. Looking at &lt;a href="http://opensource.apple.com/source/CF/CF-550/CFBinaryPList.c" target="_blank"&gt;Apple's release of the binary plist format&lt;/a&gt; (scroll about a fifth of the way down the page) it can be seen that the Object Format Marker byte for ASCII strings found in this file is in binary 01011111, followed by an integer count byte. In hex these marker bytes as seen in this file are 5Fh 10h. The Object Format Marker byte for unicode strings found in this file is in binary 01101111, followed by an integer count byte. In hex these marker bytes as seen in this file are 6Fh 11h.&lt;/li&gt;&lt;li&gt;The byte immediately prior to the URL (generally starting http) and after the marker 5Fh 10h decoded as an 8 bit integer denotes the length of the URL. However if the URL is longer than 255 bytes the marker will be 5Fh 11h indicating the following two bytes are used to store the length decoded as 16 bit big endian&lt;/li&gt;&lt;li&gt;Following the URL there is a marker 6Fh 11h - the next two bytes decoded 16 bit big endian is the number of characters of text extracted from the web page - multiply by 2 to calculate the length of the unicode text element of the record&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Following the unicode text element is a marker 5Fh 10h -the next byte immediately prior to the webpage title decoded as an 8 bit integer denotes the length of the webpage title&lt;/li&gt;&lt;li&gt;the last four bytes of the file formatted 32 bit big endian is the record size (detailing the number of bytes from the start of the URL to the end of the fifth byte from the end of the file)&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh4.ggpht.com/_QfcS6HZ5Sws/TBY1VBptS-I/AAAAAAAAA90/1UREgx0MzEg/s800/webhistory_file_structure.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh4.ggpht.com/_QfcS6HZ5Sws/TBY-_stzKHI/AAAAAAAAA_w/CFwPlhRVj4A/s800/webhistory_file_structure-thumb.png" height="498" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;em&gt;Example file format&lt;/em&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;Click on image for larger version&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br /&gt;http://opensource.apple.com/source/CF/CF-550/CFBinaryPList.c&lt;br /&gt;http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/PropertyLists/AboutPropertyLists/AboutPropertyLists.html#//apple_ref/doc/uid/10000048i-CH3-SW2&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-804181426211900613?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/804181426211900613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=804181426211900613' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/804181426211900613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/804181426211900613'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2010/06/safari-history-spotlight-webhistory.html' title='Safari History - spotlight webhistory artefacts'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_QfcS6HZ5Sws/TBY-8GnoS6I/AAAAAAAAA_g/_LL5H3nceVI/s72-c/webhistory_Recovery_profile_screenshot-thumb.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-9165480921140878375</id><published>2010-06-08T19:06:00.000+01:00</published><updated>2010-06-12T06:50:37.637+01:00</updated><title type='text'>Safari browser cache - examination of Cache.db</title><content type='html'>&lt;p style="clear: both"&gt;Following on from &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2010/06/recovering-safari-browser-history-from.html" target="_blank"&gt;my post about Safari browser history&lt;/a&gt; I want to touch upon Safari cache. My suspect is running Mac OSX 10.5.6 Leopard and Safari 3.2.1. This version stores browser cache in an sqlite3 database ~/Users/User_Name&lt;user_name&gt;/Library/Caches/com.apple.Safari/Cache.db. Earlier versions of Version 3 and Version 1 and 2 store cache in a different format, and/or a different place. The &lt;a href="http://insidethecore.com/Show%20Notes/show_notes.html" target="_blank"&gt;Episode 3 Shownotes &lt;/a&gt;of the Inside the Core Podcast cover this succinctly so I will not repeat it here but FWIW I have cached Safari artefacts in all three forms on the box I have examined. Currently Netanalysis and Encase do not parse the Safari Cache.db file so another method is required. &lt;br /&gt;&lt;/user_name&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Safari Cache.db basics&lt;/strong&gt;&lt;br /&gt;What follows I believe relates to versions 3, 4 and 5 of Safari running in Mac OSX.&lt;br /&gt;The file contains lots of information including the cached data, requesting URL and timestamps. The file is a Sqlite3 database file which has become a popular format to store cached browser data. The cache.db database contains four tables. For the purposes of this post think of each table as a spreadsheet with column headers (field names) and rows beneath representing individual records.&lt;br /&gt;Two tables are of particular interest:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;&lt;strong&gt;cfurl_cache_blob_data&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;cfurl_cache_response&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;strong&gt;cfurl_cache_blob_data &lt;/strong&gt;contains one very notable field and a number of slightly less useful ones. The notable field is &lt;em&gt;receiver_data &lt;/em&gt;which is used to store the cached item itself (e.g. cached jpgs, gifs, pngs, html et al ) as a BLOB. A BLOB is a &lt;strong&gt;B&lt;/strong&gt;inary &lt;strong&gt;L&lt;/strong&gt;arge &lt;strong&gt;OB&lt;/strong&gt;ject. Two other fields &lt;em&gt;request_object&lt;/em&gt; and &lt;em&gt;response_object &lt;/em&gt;contain information relating to the http request/response cycle also stored as a BLOB which when examined further are in fact xml plists. The &lt;em&gt;entry_ID&lt;/em&gt; field is the primary key in this table which will allow us to relate the data in this table to data stored in other tables.&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;strong&gt;cfurl_cache_response &lt;/strong&gt;contains two notable fields - &lt;em&gt;request_key &lt;/em&gt;and &lt;em&gt;time_stamp&lt;/em&gt;. The &lt;em&gt;request_key&lt;/em&gt; field is used to contain the URL of the cached item. The &lt;em&gt;time_stamp&lt;/em&gt; field is used to store the time (UTC) the item was cached. The &lt;em&gt;entry_ID&lt;/em&gt; field is the primary key in this table which will allow us to relate the data in this table to data stored in cfurl_cache_blob_data.&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;In a nutshell &lt;strong&gt;cfurl_cache_blob_data &lt;/strong&gt;contains the cached item and &lt;strong&gt;cfurl_cache_response &lt;/strong&gt;contains metadata about the cached item.&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Safari cache.db examination methods&lt;/strong&gt;&lt;br /&gt;I would like to share three different methods using SQL queries and a few different tools.&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;Safari cache.db examination methods - contents &lt;em&gt;quick and dirty&lt;/em&gt; &lt;br /&gt;Safari cache.db examination methods - metadata &lt;em&gt;quick and dirty&lt;/em&gt;&lt;br /&gt;Safari cache.db examination methods - contents and metadata&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Safari cache.db examination methods - contents &lt;/strong&gt;&lt;em&gt;&lt;strong&gt;quick and dirty&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;Depending on what you wish to achieve there are a number of different methods you can adopt. As regular readers will know I work on many IPOC cases. If all you want to do is quickly review the contents of cache.db (as opposed to the associated meta data) I can not recommend any application more highly than &lt;a href="http://echoone.com/filejuicer/" target="_blank"&gt;File Juicer&lt;/a&gt;. This application runs on the Mac platform (which I know is a gotcha for some) and parses out all cached items into a neat folder structure. &lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh4.ggpht.com/_QfcS6HZ5Sws/TA4XAab08lI/AAAAAAAAA5w/rmHSVXcomvo/s800/Screen_shot_2010-06-08_at_11.08.56.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh4.ggpht.com/_QfcS6HZ5Sws/TA4cdMvFw6I/AAAAAAAAA6c/3fHqTj5bpgU/s800/Screen_shot_2010-06-08_at_11-thumb.08.56.png" height="287" width="194" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;/a&gt;I drag the File Juicer output folders into Encase as single files and examine the contents further there. File Juicer is not a forensic tool &lt;em&gt;per se&lt;/em&gt; but the developer has at &lt;a href="http://echoone.com/filejuicer/forensics" target="_blank"&gt;least considered the possibility&lt;/a&gt; that it may be used as such. If using a Mac is not an option a Windows app &lt;a href="http://www.sqlimageviewer.com/" target="_blank"&gt;SQL Image Viewer&lt;/a&gt; may suffice (with the caveat that I have not actually tested this app).&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Safari cache.db examination methods - metadata quick and dirty&lt;/strong&gt;&lt;br /&gt;Sometimes overlooked is the fact that most caches contain internet history in the form of urls relating to the cached item. The cfurl_cache_response table contains two fields - request_key and time_stamp containing useful metadata. We can use an SQL query to parse data out of these fields. I use (for variety more than anything else) two different tools (i.e. one or the other) to carry out a quick review of meta data.&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;Method A using Sqlite3 itself (&lt;a href="http://www.sqlite.org/download.html" target="_blank"&gt;http://www.sqlite.org/download.html&lt;/a&gt; scroll down to the Precompiled Binaries for Windows section) &lt;br /&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;extract your cache.db file into a folder&lt;br /&gt;&lt;/li&gt;&lt;li&gt;copy sqlite3.exe into the same folder [to cut down on typing paths etc.]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;launch a command prompt and navigate to your chosen folder&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Type &lt;em&gt;&lt;strong&gt;sqlite3 cache.db&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;then at the &lt;em&gt;sqlite&lt;/em&gt; prompt type &lt;strong&gt;&lt;em&gt;.output Cache_metadata.txt &lt;/em&gt;&lt;/strong&gt;[this directs any further output to the file Cache_metadata.txt]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;at &lt;em&gt;sqlite&lt;/em&gt; prompt type &lt;strong&gt;&lt;em&gt;Select time_stamp, request_key from cfurl_cache_response; &lt;/em&gt;&lt;/strong&gt;[don't forget the semi colon]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;allow a moment or three for the query to complete the output of it's results&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Launch Microsoft Excel and start the Text Import Wizard selecting (step by step) delimited data, set the delimiters to &lt;strong&gt;Other | &lt;/strong&gt;[pipe symbol] and set the Column data format to Text&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Click on Finish then OK and bobs your uncle!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh3.ggpht.com/_QfcS6HZ5Sws/TA4wrD9QkmI/AAAAAAAAA6o/G-kmqNWgByA/s800/sqlite_cmd_prompt.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh6.ggpht.com/_QfcS6HZ5Sws/TA5Vy-VUOfI/AAAAAAAAA84/d0s_QLq9Pmk/s800/sqlite_cmd_prompt-thumb.png" height="121" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;em&gt;Click image to view full size&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;Method B using &lt;a href="http://sqlitebrowser.sourceforge.net/index.html" target="_blank"&gt;SQLite Database Browser&lt;/a&gt; as a viewer in Encase&lt;br /&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;from your Encase case send the Cache.db to SQLite Database Browser&lt;br /&gt;&lt;/li&gt;&lt;li&gt;on the Execute SQL tab type in the SQL string field enter &lt;strong&gt;&lt;em&gt;Select time_stamp, request_key from cfurl_cache_response&lt;/em&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Review results in the Data returned pane&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Or&lt;br /&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;from your Encase case send the Cache.db to SQLite Database Browser&lt;br /&gt;&lt;/li&gt;&lt;li&gt;File/Export/Table as CSV file&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Select the &lt;strong&gt;&lt;em&gt;cfurl_cache_response&lt;/em&gt;&lt;/strong&gt; Table name&lt;/li&gt;&lt;li&gt;Open exported CSV in Excel and adjust time_stamp column formatting (a custom date format is required to display seconds)&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Safari cache.db examination methods - contents and metadata&lt;/strong&gt;&lt;br /&gt;What we need to do here is extract the related data from both tables - in other words be able to view the time stamp, URL and the cached object at the same time. This can be done using &lt;a href="http://osenxpsuite.net/?xp=3" target="_blank"&gt;SQLite2009 Pro Enterprise Manager&lt;/a&gt;. This program has a built in BLOB viewer that will allow you to view the BLOB data in hex and via a image (as in picture) viewer if appropriate.&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;Once you have launched the program open your extracted Cache.db file&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In the Query box type (or copy and paste) all in one go&lt;br /&gt;&lt;strong&gt;&lt;em&gt;SELECT cfurl_cache_blob_data.entry_ID,cfurl_cache_blob_data.receiver_data, cfurl_cache_response.request_key,cfurl_cache_response.time_stamp &lt;br /&gt;FROM cfurl_cache_blob_data, cfurl_cache_response &lt;br /&gt;WHERE cfurl_cache_blob_data.entry_ID=cfurl_cache_response.entry_ID&lt;/em&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Then key&lt;strong&gt; F5 &lt;/strong&gt;to execute the query&lt;/li&gt;&lt;li&gt;This will populate the results tab with the results&lt;br /&gt;&lt;/li&gt;&lt;li&gt;To view the cached object BLOB data in the &lt;em&gt;receiver_data &lt;/em&gt;field highlight the record of interest with your mouse (but don't click on &lt;em&gt;BLOB&lt;/em&gt; in the&lt;em&gt; receiver_data&lt;/em&gt; field). This will populate the hex viewer (bottom left) and the BLOB viewer (bottom right).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;To view a full sized version of a cached image click with your mouse on &lt;em&gt;BLOB&lt;/em&gt; in the&lt;em&gt; receiver_data&lt;/em&gt; field which launches a separate viewing window&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh6.ggpht.com/_QfcS6HZ5Sws/TA5JyBZHXkI/AAAAAAAAA7w/nAES5CDrnHY/s800/SQLITEPro2009screenshot1.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh6.ggpht.com/_QfcS6HZ5Sws/TA5V0QnWKDI/AAAAAAAAA9A/VM3SnNgiGYc/s800/SQLITEPro2009screenshot1-thumb.png" height="279" align="left" width="378" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;em&gt;Click on image to view full size&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://www.sqlite.org/fileformat.html" target="_blank"&gt;SQLite Database File Format&lt;/a&gt;&lt;br /&gt;Sindro.me weblog - &lt;a href="http://sindro.me/2008/1/20/extracting-data-from-apple-safari-s-cache" target="_blank"&gt;Extracting data from Apple Safari's cache&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.devx.com/dbzone/Article/17403/1954" target="_blank"&gt;http://www.devx.com/dbzone/Article/17403/1954&lt;/a&gt;&lt;br /&gt;&lt;a href="http://insidethecore.com/Show%20Notes/show_notes.html" target="_blank"&gt;Inside the Core Episode 3 Show Notes&lt;/a&gt;&lt;br /&gt;&lt;a href="http://articles.techrepublic.com.com/5100-10878_11-5141049.html" target="_blank"&gt;Define relationships between database tables -Techrepublic&lt;/a&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-9165480921140878375?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/9165480921140878375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=9165480921140878375' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/9165480921140878375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/9165480921140878375'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2010/06/safari-browser-cache-examination-of.html' title='Safari browser cache - examination of Cache.db'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_QfcS6HZ5Sws/TA4cdMvFw6I/AAAAAAAAA6c/3fHqTj5bpgU/s72-c/Screen_shot_2010-06-08_at_11-thumb.08.56.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-2353433234754020137</id><published>2010-06-06T14:29:00.000+01:00</published><updated>2010-06-08T09:04:35.544+01:00</updated><title type='text'>Recovering Safari browser history from unallocated</title><content type='html'>&lt;p style="clear: both"&gt;One of my cases involves the examination of an Apple Mac running Mac OSX 10.5.6 Leopard . The primary web browser in use is Safari version 3.2.1. Typically with Safari I run the Comprehensive Internet History search in Encase but in this case the search would not complete so I had to consider another method to recover and review internet history. Browsing history is stored in a binary plist ~ /Users/User_Name/Library/Safari/History.plist however the live one was empty. I recalled from a much earlier case that you can carve deleted plists from unallocated. I had documented a method for doing this over at www.forensicwiki.com but at the time of writing this resource is still offline.&lt;/p&gt;&lt;p style="clear: both"&gt;One of the best file carvers around is &lt;a href="http://www.bladeforensics.com/" target="_blank"&gt;Blade&lt;/a&gt; and I decided to use it to recover the deleted History.plists. Blade has a number of pre-configured built in Recovery Profiles but there wasn't one for Safari. However one of the neat things about Blade is that you can &lt;a href="http://wordpress.bladeforensics.com/?p=110" target="_blank"&gt;write your own profiles&lt;/a&gt; and &lt;a href="http://wordpress.bladeforensics.com/?p=90" target="_blank"&gt;share them with others&lt;/a&gt;. In conversation I had found out that Craig Wilson had written a Safari history.plist recovery profile which he kindly made available to me (after all why re-invent the wheel). I imported it into my copy of Blade and I was then good to go.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh6.ggpht.com/_QfcS6HZ5Sws/TAub9GliNeI/AAAAAAAAA5Q/uCWd9nDfAcc/s800/Recovery_profile_screenshot.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh6.ggpht.com/_QfcS6HZ5Sws/TAuirhCQbcI/AAAAAAAAA5k/kwFSPerz3ow/s800/Recovery_profile_screenshot-thumb.png" height="258" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;em&gt;Click image for a full size version&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Another really neat feature with Blade is that you can run it across the Encase evidence files without having to mount them. Having done this in my case Blade recovered over three thousand deleted History.plist files. I then loaded the recovered plist files into &lt;a href="http://www.digital-detective.co.uk/netanalysis.asp" target="_blank"&gt;Netanalysis 1.51&lt;/a&gt; resulting in over 300,000 internet history records to review. Cool.&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-2353433234754020137?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/2353433234754020137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=2353433234754020137' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/2353433234754020137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/2353433234754020137'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2010/06/recovering-safari-browser-history-from.html' title='Recovering Safari browser history from unallocated'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_QfcS6HZ5Sws/TAuirhCQbcI/AAAAAAAAA5k/kwFSPerz3ow/s72-c/Recovery_profile_screenshot-thumb.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-4799710086425861984</id><published>2010-05-27T11:14:00.000+01:00</published><updated>2010-05-27T11:14:27.164+01:00</updated><title type='text'>Prefetch and User Assist</title><content type='html'>&lt;p style="clear: both"&gt;It seems to me that more and more cases I see only have evidence within unallocated clusters. It is also a frustration that the CPS seem less and less interested in any artefact found there. They seem to have the view that any thing currently living in unallocated clusters somehow magically arrived there and has nothing whatever to do with the computer's user.&lt;/p&gt;&lt;p style="clear: both"&gt;Obviously we try and address this misconception, by trying to investigate how the evidence in question came to be on the computer, and to a lesser extent how it came to be deleted. Which brings me on to another frustration - file wiping software. This is another thing I see more and more. Properly configured file wiping software eliminates the little fragments of evidence we use to piece our cases together. &lt;/p&gt;&lt;p style="clear: both"&gt;Recently I was faced with this scenario - evidence could only be found in unallocated and there was file wiping software sat there in program files. Sentencing Advisory Panel guidelines allude to the presence of file wiping software being an aggravating factor to consider when sentencing. But in this case it occurred to me that it would be evidentially useful to know just how often my suspect used the file wiping software concerned. File time stamps may indicate when the program was last executed and installation dates can be discerned from a variety of locations (registry entries, folder creation dates and so on) but where do you establish how often the program was used? You never know -it may write to a log file or create event log entries but many don't. In my case the answer lay in two areas - Prefetch and User Assist.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Prefetch&lt;/strong&gt;&lt;br /&gt;My suspect was using Microsoft Windows XP. This OS (as the later Vista and Windows 7) performs application and boot prefetching. This process is designed to speed up the loading of applications (with regards to application prefetching) by storing data required by the program during the first ten seconds of use in a file - a prefetch file. These files are stored in the Windows/Prefetch folder and have a .pf file extension. The file names are a combination of the applications name and a hash of its file path. The hash may be useful in some cases because it could indicate that an application lives in more than one location (which is often suspicious). Some work on analysing the hash algorithm has been carried out by &lt;a href="https://42llc.net/index.php?option=com_myblog&amp;amp;show=Prefetch-Hash-Algorithm.html&amp;amp;Itemid=39" target="_blank"&gt;Yogesh Khatri at 42llc&lt;/a&gt;. The files themselves contain some useful information including last time of execution, the number of times the program was run and references to files and the file system utilised by the program in its first ten seconds of use. Unfortunately prefetch files are not differentiated by user. In my case the file wiping software had a prefetch file. There are a number of options open to us to analyse the prefetch file.&lt;/p&gt;&lt;p style="clear: both"&gt;If all you need is the time of last execution and number of time the application was run for just one file you may as well do it manually. For Windows XP at file offset 120 an 8 byte Windows Filetime is stored which is the Last Execution Time. At file offset 144 the number of executions is stored as a four byte Dword. For Vista and Windows 7 the offsets are different - 128 and 152 respectively.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh4.ggpht.com/_QfcS6HZ5Sws/S_414vVPTII/AAAAAAAAA2A/A1Ph5eRAHFo/s800/execution_date.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh3.ggpht.com/_QfcS6HZ5Sws/S_5F-klGHoI/AAAAAAAAA48/LXhy1khhSU0/s800/execution_date-thumb.png" height="201" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;Bookmarking Last Execution Time and Date&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh5.ggpht.com/_QfcS6HZ5Sws/S_415tm0rmI/AAAAAAAAA2I/ra1-qeX90VU/s800/number_of_executions.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh3.ggpht.com/_QfcS6HZ5Sws/S_5F_V33cUI/AAAAAAAAA5E/QbzCOpV1LQ8/s800/number_of_executions-thumb.png" height="302" align="left" width="324" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt; Bookmarking number of times the application was run&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;If you have a number of prefetch files to analyse or you wish to corroborate your findings you could try the &lt;a href="https://42llc.net/index.php?option=com_myblog&amp;amp;show=Prefetch-Hash-Algorithm.html&amp;amp;Itemid=39" target="_blank"&gt;Mitec Windows File Analyzer&lt;/a&gt; program or run an enscript. Guidance Software's download center has two enscripts that fit the bill. &lt;a href="https://support.guidancesoftware.com/forum/downloads.php?do=file&amp;amp;id=427" target="_blank"&gt;PfDump.Enpack&lt;/a&gt; and &lt;a href="https://support.guidancesoftware.com/forum/downloads.php?do=file&amp;amp;id=649" target="_blank"&gt;Prefetch File Analysis&lt;/a&gt;. Pfdump outputs to the console and the Prefetch File Analysis enscript outputs to bookmarks.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;UserAssist&lt;/strong&gt;&lt;br /&gt;UserAssist is a method used to populate a user's start menu with frequently used applications. This is achieved by maintaining a count of application use in each users NTUSER.DAT registry file. I use Access Data's Registry Viewer application to parse and decode this information. Simon Key has written a cool enscript which is bang up to date with Windows 7 support. Detailed information, including the changes introduced with Windows 7, and the script can be found within GSI's &lt;a href="https://support.guidancesoftware.com/forum/downloads.php?do=file&amp;amp;id=832" target="_blank"&gt;download center&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;In my case I encountered a possible anomaly in that the Prefetch and UserAssist run counts were different. With multiple users you would expect this as the Prefetch run count is not user specific. I had only one user in my case and the UserAssist count was significantly greater albeit that both were four figure numbers. A possible explanation is that if the application's prefetch file is deleted when the application is next used the prefetch run count starts again from 1.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br /&gt;&lt;a href="https://42llc.net/index.php?option=com_myblog&amp;amp;show=Prefetch-Files-Revisited.html&amp;amp;Itemid=39" target="_blank"&gt;https://42llc.net/index.php?option=com_myblog&amp;amp;show=Prefetch-Files-Revisited.html&amp;amp;Itemid=39 &lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Prefetcher" target="_blank"&gt;http://en.wikipedia.org/wiki/Prefetcher &lt;/a&gt;&lt;br /&gt;&lt;a href="http://members.rushmore.com/~jsky/id14.html" target="_blank"&gt;http://members.rushmore.com/~jsky/id14.html &lt;/a&gt;&lt;br /&gt;&lt;a href="http://members.rushmore.com/~jsky/id37.html" target="_blank"&gt;http://members.rushmore.com/~jsky/id37.html &lt;/a&gt;&lt;br /&gt;&lt;a href="http://jessekornblum.com/presentations/dodcc08-2.pdf" target="_blank"&gt;http://jessekornblum.com/presentations/dodcc08-2.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-4799710086425861984?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/4799710086425861984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=4799710086425861984' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/4799710086425861984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/4799710086425861984'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2010/05/prefetch-and-user-assist.html' title='Prefetch and User Assist'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_QfcS6HZ5Sws/S_5F-klGHoI/AAAAAAAAA48/LXhy1khhSU0/s72-c/execution_date-thumb.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-3676095575364545051</id><published>2010-05-11T06:37:00.000+01:00</published><updated>2010-05-11T06:38:01.344+01:00</updated><title type='text'>C4P Import to Encase enscript and Lost Files</title><content type='html'>&lt;p style="clear: both"&gt;Many C4P users experience problems when importing bookmarks back into Encase from C4P. A common problem is that files bookmarked in Unallocated Clusters don't match up to actual picture data. Almost always the cause of this problem is that the user has run the Recovered Folders process in Encase after running the C4P Graphics Extractor enscript thus altering the amount of unallocated clusters (as calculated by Encase). Trevor has a two page pdf on the C4P website addressing all the potential issues.&lt;/p&gt;&lt;p style="clear: both"&gt;I have noticed another problem. A large number of my notable files are in Lost Files. Lost Files in Encase on an NTFS volume are files that have an MFT entry but their parent folder has been deleted. It is possible to have a number of files in the virtual Lost Files folder that have the same file name (and path). In my current case where I have duplicate file names in Lost Files the C4P Import enscript has not always bookmarked the correct file, bookmarking another file with the same name and path instead. This is sometimes further complicated by the incorrect file being deleted and overwritten.&lt;/p&gt;&lt;p style="clear: both"&gt;The symptoms of this problem are easy to detect. Viewing your C4P import within the Encase bookmarks tab in gallery view results in a number of pictures not being displayed. When checking the bottom pane in text view you see that the bookmarked data for the non displaying pictures does not relate to a picture. Alternatively the picture you see does not relate to the C4P category it should be. To review this I am currently selecting (blue ticking) all non displaying pictures or wrongly bookmarked pictures and then tagging these selected files. Having done this in Entries view I am sorting by selection (blue tick) then highlighting a blue ticked file, then sorting by name. This brings all the other files with the same name together in Entries view. I am then checking the others to find the file that was meant to be bookmarked. &lt;/p&gt;&lt;p style="clear: both"&gt;The underlying problem is a small bug in the C4P Import v2 enscript. Trevor has now kindly fixed it for me and will no doubt circulate the revised script. However in the meantime to fix the script &lt;/p&gt;&lt;p style="clear: both"&gt;Find the following file in the import script folder: &lt;strong&gt;&lt;em&gt;..\include\ProcessReportClass.EnScript&lt;/em&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;In there, find the following function:&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;&lt;em&gt;EntryClass FindByFullPath(ImportRecordClass irc, CaseClass c)&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;It’s a short function, only eight lines – highlight them, and replace with the following: &lt;/p&gt;&lt;p style="clear: both"&gt; &lt;em&gt; &lt;/em&gt;&lt;strong&gt;&lt;em&gt;EntryClass FindByFullPath(ImportRecordClass irc, CaseClass c){&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;&lt;em&gt; EntryClass e = c.EntryRoot();&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;&lt;em&gt; e = e.Find(irc.DeviceName + "\\" + irc.Path);&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;&lt;em&gt; if(e){&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;&lt;em&gt; if(e.PhysicalLocation() == irc.PhysicalLocation)&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;&lt;em&gt; return e;&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;&lt;em&gt; else&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;&lt;em&gt; return null;&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;&lt;em&gt; }&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;&lt;em&gt; else&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;&lt;em&gt; return null;&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;&lt;em&gt; }&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; &lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Save and update.&lt;/p&gt;&lt;p style="clear: both"&gt;HTH someone :)&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-3676095575364545051?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/3676095575364545051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=3676095575364545051' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/3676095575364545051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/3676095575364545051'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2010/05/c4p-import-to-encase-enscript-and-lost.html' title='C4P Import to Encase enscript and Lost Files'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-111873287414855208</id><published>2010-04-13T15:56:00.000+01:00</published><updated>2010-04-13T19:32:45.778+01:00</updated><title type='text'>Volume Shadow Copy Forensics - the Robocopy method Part 2</title><content type='html'>&lt;p style="clear: both"&gt;Without further ado this post will build upon&lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2010/04/volume-shadow-copy-forensics-robocopy.html" target="_blank"&gt; Volume Shadow Copy Forensics - the Robocopy method Part 1&lt;/a&gt;. In part one we looked at using Robocopy to extract data from a single shadow copy at a time. We will now look at a method to extract data from a range of shadow copies in one go. I will also cover some slightly more advanced options.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;What are we going to need?&lt;/strong&gt;&lt;br /&gt;For what follows we will need a Windows 7 box (real or a VM), Encase with the PDE module and some storage space formatted NTFS. Robocopy is pre-installed within Windows 7.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Method&lt;/strong&gt;&lt;br /&gt;You will already have an Encase image of the drive you wish to investigate. When this is loaded up into an Encase case you need to gather some information in respect to the shadow copies you wish to investigate further. You will need to note the File Creation dates and if you wish to be more precise establish the Shadow Copy IDs stored at File Offset 144 for 16 bytes - bookmark as a GUID in Encase. Next you will have to mount the volume containing the shadow copies as an emulated disk using the Encase PDE module with caching enabled. On my box the mounted volume was allocated the drive letter J. I am using a Windows 7 box - if you are using a Windows 7 VM add the PDE mounted disk to the VM as an additional hard disk. Then on your box or in the VM: &lt;/p&gt;&lt;p style="clear: both"&gt;Run a Command Prompt as Administrator and type the command (substituting J for the drive letter allocated to your mounted volume and G:\Shadows with the path of your export directory):&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;em&gt;vssadmin list shadows /for=J:&lt;/em&gt; &lt;em&gt;&amp;gt; G:\Shadows\list_of_shadow_copies.txt&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;This will create a text file containing a list of available shadow copies. From the list we can identify a range of shadow copies that we wish to investigate further. We now need to create symbolic links to them using the command:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;em&gt;for /l %i in (22,1,24) do mklink /d c:\Users\Richard\Desktop\Symbolic\SC%i \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy%i\&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;note: there is not a space after the ?&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;This command will create symbolic links for all shadow copy IDs starting at 22 up to 24. Obviously vary the (22,1,24) part to suit - 22 is the start, 1 increments by 1 and 24 is the end value. The symbolic links in this example are being created in a folder &lt;em&gt;C:\Users\Richard\Desktop\Symbolic &lt;/em&gt;that I have allocated for this purpose. Many walk throughs, including ones I have prepared, often create the symbolic links at the root of C. Vista and Windows 7 do not like files being stored there so I think it is better practise to create the symbolic links in a user area.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;OR&lt;/strong&gt;&lt;br /&gt;If you do not wish to process a range of shadow copies but need to process more than one or two you can instead use the command:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;em&gt;for %i in (18 20 22) do mklink /d c:\Users\Richard\Desktop\Symbolic\SC%i \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy%i\&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;note: there is not a space after the ?&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;In this example the command process only shadow copy IDs 18, 20 and 22.&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;Next we will run robocopy over the range of shadow copies we have selected:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;em&gt;for /l %i in (22,1,24) do robocopy c:\Users\Richard\Desktop\Symbolic\SC%i\Users G:\Shadows\SC%i *.jpg *.txt /S /COPY:DAT /XJ /w:0 /r:0 /LOG:G:\Shadows\Robocopy_log_SC%i.txt&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;strong&gt;OR&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;for %i in (18 20 22) do robocopy c:\Users\Richard\Desktop\Symbolic\SC%i\Users G:\Shadows\SC%i *.jpg *.txt /S /COPY:DAT /XJ /w:0 /r:0 /LOG:G:\Shadows\Robocopy_log_SC%i.txt&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;where you are interested in just specific shadow copies.&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh3.ggpht.com/_QfcS6HZ5Sws/S8NMLL9_YpI/AAAAAAAAA1Q/65ddVrWI-Qw/s800/shadows_folder_screenshot.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh3.ggpht.com/_QfcS6HZ5Sws/S8NScJ53hCI/AAAAAAAAA1s/L6gWA3OO7rs/s800/shadows_folder_screenshot-thumb.png" height="250" align="left" width="172" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;This command will create output folders named after each selected shadow copy along with a log of what has been copied. These items are being stored within an export folder prepared for the purpose. In this example I have drilled down to just the Users folder and copied out only jpg and txt files. Please see &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2010/04/volume-shadow-copy-forensics-robocopy.html" target="_blank"&gt;Part 1&lt;/a&gt; for a detailed explanation of the options used in the command. The output folders can be dragged into Encase as single files. All paths and timestamps have been preserved.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Network Shares instead of Symbolic Links alternative&lt;/strong&gt;&lt;br /&gt;In &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2010/04/volume-shadow-copy-forensics-robocopy.html" target="_blank"&gt;part 1&lt;/a&gt; I touched upon possible permission and copying errors. Troy Larson from Microsoft commented that creating shares instead of symbolic links may overcome some issues. So as an alternative the command:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;em&gt;for /l %i in (22,1,24) do net share SC%i=\\.\HarddiskVolumeShadowCopy%i\&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;will create network shares entitled SC22, SC23 and SC24 for the shadow copy IDs 22-24. We can now use robocopy to copy data out of these shares:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;em&gt;for /l %i in (22,1,24) do robocopy \\localhost\SC%i\Users G:\Shadows\SC%i *jpg *.txt /S /COPY:DAT /XJ /w:0 /r:0 /LOG:G:\Shadows\Robocopy_log_SC%i.txt&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;In this example I am accessing the shares on the same box hence &lt;em&gt;localhost&lt;/em&gt; but of course you can run this across a network. The resulting data is as before.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Incorrect Function&lt;/strong&gt;&lt;br /&gt;You may run into what I think is a permission related error - clicking on the symbolic link results in&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh4.ggpht.com/_QfcS6HZ5Sws/S8NPxQLH5iI/AAAAAAAAA1o/tFAAQwstXiA/s800/incorrect_function.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh3.ggpht.com/_QfcS6HZ5Sws/S8NScw7MZZI/AAAAAAAAA10/sD97AQgS6zo/s800/incorrect_function-thumb.png" height="164" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;or you see&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;em&gt;2010/04/12 15:25:28 ERROR 1 (0x00000001) Accessing Source Directory c:\Users\Richard\Desktop\Symbolic\SC22\Users\Incorrect function.&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;in your log file.&lt;/p&gt;&lt;p style="clear: both"&gt;I have tried myriad ways to overcome this - trying to take ownership of the Shadow Copies using &lt;a href="http://en.wikipedia.org/wiki/Cacls" target="_blank"&gt;cacls&lt;/a&gt;, &lt;em&gt;icacls&lt;/em&gt; and everything else but the kitchen sink. However I did eventually find a workaround. In &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2010/02/volume-shadow-copy-forensics-cannot-see.html" target="_blank"&gt;Volume Shadow Copy Forensics.. cannot see the wood for the trees?&lt;/a&gt; I discussed imaging shadow copies using &lt;a href="http://gmgsystemsinc.com/fau/" target="_blank"&gt;George Garner's Forensic Acquisition Utility&lt;/a&gt;. This utility appears not to have this issue so the command&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;em&gt;for /l %i in (22,1,24) do dd if=\\.\HarddiskVolumeShadowCopy%i of=G:\Shadows\%i.img bs=512 count=1 --localwrt&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;will image just one sector of each shadow copy in our range. This takes just a few seconds. Then after imaging make your symbolic links or network shares. The Incorrect Function issue is overcome. Don't ask me why.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Cleaning Up&lt;/strong&gt;&lt;br /&gt;At the conclusion of your investigations you will want to remove the symbolic links or network shares you have created.&lt;/p&gt;&lt;p style="clear: both"&gt;To remove the symbolic links&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;em&gt;for /l %i in (22,1,24) do rd c:\Users\Richard\Desktop\Symbolic\SC%i&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;To remove the shares&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;em&gt;for /l %i in (22,1,24) do net share SC%i /delete&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Dealing with the storage issues&lt;/strong&gt;&lt;br /&gt;If you want to copy substantial amounts out of a large number of shadow copies you are faced with the problem of where you can store it. In &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2010/02/volume-shadow-copy-forensics-cannot-see.html" target="_blank"&gt;Volume Shadow Copy Forensics.. cannot see the wood for the trees?&lt;/a&gt; I observed that there is considerable duplication of files in each shadow copy. I have found that a utility like &lt;a href="http://malich.ru/duplicate_searcher.aspx" target="_blank"&gt;Duplicate and Same Files Searcher&lt;/a&gt; can be useful. This utility can search across your export folders and identify duplicates. You can then opt to retain the first file and then create &lt;a href="http://en.wikipedia.org/wiki/Hard_link" target="_blank"&gt;hard links&lt;/a&gt; for all the duplicate files. This utility can also move duplicate files, thus allowing you to focus on just the unique files.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br /&gt;Windows 7: Current Events in the World of Windows Forensics &lt;em&gt;Harlen Carvey, Troy Larson&lt;/em&gt;&lt;br /&gt;&lt;a href="http://www.qccis.com/whitepapers" target="_blank"&gt;Reliably recovering evidential data from Volume Shadow Copies in Windows Vista and Windows 7 QCC&lt;/a&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-111873287414855208?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/111873287414855208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=111873287414855208' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/111873287414855208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/111873287414855208'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2010/04/volume-shadow-copy-forensics-robocopy_13.html' title='Volume Shadow Copy Forensics - the Robocopy method Part 2'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_QfcS6HZ5Sws/S8NScJ53hCI/AAAAAAAAA1s/L6gWA3OO7rs/s72-c/shadows_folder_screenshot-thumb.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-4993310732157675648</id><published>2010-04-06T16:33:00.000+01:00</published><updated>2010-04-14T15:15:50.990+01:00</updated><title type='text'>Volume Shadow Copy Forensics - the Robocopy method Part 1</title><content type='html'>&lt;p style="clear: both"&gt;There is always more than one way to skin a cat and so I make no apologies for discussing another approach to processing volume shadow copies. This approach - I'll call it the Robocopy method - has been researched and developed by the chaps over at &lt;a href="http://www.qccis.com/digital-forensics" target="_blank"&gt;QCC&lt;/a&gt;, John Douglas, Gary Evans and James Crabtree and they have kindly let me crib from their notes. This post is Part 1 - I have simplified QCC's approach but have also removed some functionality. In &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2010/04/volume-shadow-copy-forensics-robocopy_13.html" target="_blank"&gt;Part 2&lt;/a&gt; I will expand on the simplified approach and add back in some functionality.&lt;/p&gt;&lt;p style="clear: both"&gt;Robocopy is a robust file copying utility developed by Microsoft. This method allows us to copy out folders and files of interest from any notable shadow copies. The process will preserve folder and file paths and timestamps. The key advantages are that it is efficient -both in storage and speed.&lt;/p&gt;&lt;p style="clear: both"&gt;This blog post complements my previous posts &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2009/08/vista-volume-shadow-copy-issues.html"&gt;Vista Volume Shadow Copy issues&lt;/a&gt; and &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2010/02/volume-shadow-copy-forensics-cannot-see.html"&gt;Volume Shadow Copy Forensics.. cannot see the wood for the trees?&lt;/a&gt; and the method documented below is similar in the early stages. &lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;What are we going to need?&lt;/strong&gt;&lt;br /&gt;For what follows we will need a Windows 7 box (real or a VM), Encase with the PDE module and some storage space formatted NTFS. Robocopy is pre-installed within Windows 7.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Method&lt;/strong&gt;&lt;br /&gt;You will already have an Encase image of the drive you wish to investigate. When this is loaded up into an Encase case you need to gather some information in respect to the shadow copies you wish to investigate further. You will need to note the File Creation date and if you wish to be more precise establish the Shadow Copy ID stored at File Offset 144 for 16 bytes - bookmark as a GUID in Encase. Next you will have to mount the volume containing the shadow copies as an emulated disk using the Encase PDE module with caching enabled. On my box the mounted volume was allocated the drive letter I. I am using a Windows 7 box - if you are using a Windows 7 VM add the PDE mounted disk to the VM as an additional hard disk. Then on your box or in the VM:&lt;/p&gt;&lt;p style="clear: both"&gt;Run a Command Prompt as Administrator and type the command (substituting I for the drive letter allocated to your mounted volume)&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;em&gt;vssadmin list shadows /for=I:&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;This will result in a list of all available shadow copies on the selected volume&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;em&gt;vssadmin 1.1 - Volume Shadow Copy Service administrative command-line tool&lt;br /&gt;(C) Copyright 2001-2005 Microsoft Corp.&lt;br /&gt;&lt;br /&gt;Contents of shadow copy set ID: {2202d8a9-1326-4254-9818-252ece858b17}&lt;br /&gt; Contained 1 shadow copies at creation time: 10/12/2009 14:41:25&lt;br /&gt; Shadow Copy ID: {ad2e71d0-48d6-44b9-9715-f5ff6b5a5643}&lt;br /&gt; Original Volume: (I:)\\?\Volume{34e5a98a-1a1d-11df-a259-00236cb6de69}\&lt;br /&gt; Shadow Copy Volume: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy5&lt;br /&gt; Originating Machine: Richard-MBP-Vis&lt;br /&gt; Service Machine: Richard-MBP-Vis&lt;br /&gt; Provider: 'Microsoft Software Shadow Copy provider 1.0'&lt;br /&gt; Type: ClientAccessibleWriters&lt;br /&gt; Attributes: Persistent, Client-accessible, No auto release, Differentia&lt;br /&gt;l, Auto recovered&lt;br /&gt;&lt;br /&gt;Contents of shadow copy set ID: {e13bb9d9-c522-422b-b92a-37f6d12363d9}&lt;br /&gt; Contained 1 shadow copies at creation time: 15/12/2009 12:17:37&lt;br /&gt; Shadow Copy ID: {d0e1c613-7892-47e1-9b7e-f638adac9d16}&lt;br /&gt; Original Volume: (I:)\\?\Volume{34e5a98a-1a1d-11df-a259-00236cb6de69}\&lt;br /&gt; Shadow Copy Volume: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy6&lt;br /&gt; Originating Machine: Richard-MBP-Vis&lt;br /&gt; Service Machine: Richard-MBP-Vis&lt;br /&gt; Provider: 'Microsoft Software Shadow Copy provider 1.0'&lt;br /&gt; Type: ClientAccessibleWriters&lt;br /&gt; Attributes: Persistent, Client-accessible, No auto release, Differentia&lt;br /&gt;l, Auto recovered&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;&lt;div style="clear: both;"&gt;Marry up your bookmarked GUID to the Shadow Copy ID number to identify the Shadow Copy Volume you wish to process. The next step is to create a symbolic link to the selected shadow copy (ShadowCopy6 in this example) by typing the command&lt;/div&gt;&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;em&gt;mklink /d C:\shadow_copy6 \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy6\&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;which results in the output&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;em&gt;symbolic link created for C:\shadow_copy6 &amp;lt;&amp;lt;===&amp;gt;&amp;gt; \\?\GLOBALROOT\Device\Harddisk&lt;br /&gt;VolumeShadowCopy6\&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;We are now going to use robocopy to copy out data from the mounted shadow copy - for this example I have created a folder called SC6 on my export volume. The command I used for this example is&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;em&gt;robocopy C:\shadow_copy6\Users\Richard G:\SC6 /S /XJ /COPY:DAT /NFL /NDL /w:0 /r:0&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;This results in robocopy outputting a Job Header to the console&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;em&gt;---------------------------------------------------------------------------&lt;br /&gt; ROBOCOPY :: Robust File Copy for Windows&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt; Started : Mon Apr 05 11:23:18 2010&lt;br /&gt; Source : C:\shadow_copy6\Users\Richard\&lt;br /&gt; Dest : G:\SC6\&lt;br /&gt; Files : *.*&lt;br /&gt; Options : *.* /NDL /NFL /S /COPY:DAT /XJ /R:0 /W:0&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;The header usefully sums up what I have asked robocopy to do. &lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;I am copying only the Richard user profile (Users\Richard) to my export folder SC6&lt;/li&gt;&lt;li&gt; *.* indicates that I am copying all files&lt;/li&gt;&lt;li&gt;/NDL suppresses directory listings to the console&lt;/li&gt;&lt;li&gt;/NFL suppresses file listings to the console&lt;/li&gt;&lt;li&gt;/S copies the source folder and all sub folders and files&lt;/li&gt;&lt;li&gt;/COPY:DAT copies data, attributes and timestamps&lt;/li&gt;&lt;li&gt;/XJ exclude junction points&lt;/li&gt;&lt;li&gt;/R:0 number of retries on failed copies (in other words -do not re try)&lt;/li&gt;&lt;li&gt;/W:0 wait between retries&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;Nothing much happens at the command prompt now unless a failed file copy is encountered when you will receive output to the console similar to &lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;em&gt;2010/04/06 11:24:48 ERROR 5 (0x00000005) Copying File C:\shadow_copy6\Users\Rich&lt;br /&gt;ard\AppData\Local\Temp\~DFA2ED.tmp&lt;br /&gt;Access is denied.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;When the copying is completed a summary is outputted to the console&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh4.ggpht.com/_QfcS6HZ5Sws/S7tUJfEf_PI/AAAAAAAAA04/xHNUsOYjhJY/s800/Screen_shot_2010-04-06_at_16-full.29.46.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh5.ggpht.com/_QfcS6HZ5Sws/S7tUXVuMVtI/AAAAAAAAA08/lBK-3sTvlBo/s800/Screen_shot_2010-04-06_at_16-thumb.29.46.png" height="151" align="left" width="377" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;It can be seen that 17 directories have been skipped. This means they have not been copied -probably because of permission issues. Also notable is the copying speed which is much quicker than imaging. &lt;/p&gt;&lt;p style="clear: both"&gt;The output folder now contains a copy of the&lt;em&gt; Richard&lt;/em&gt; users profile. Drag the contents of the export folder into Encase which processes the contents as &lt;em&gt;single files&lt;/em&gt;. You may wish to create a logical evidence file of these single files.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Alternative Robocopy Configuration&lt;/strong&gt;&lt;br /&gt;As inferred from the Job Header above it is possible to take a fairly granular approach to what is copied out of your shadow copy. For example the command &lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;em&gt;robocopy C:\shadow_copy6\Users G:\SC6 *.jpg *.bmp *.png /S /XJ /COPY:DAT /NFL /NDL /w:0 /r:0&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;will copy out all jpg, bmp and png files from all User profiles. With reference to the two examples in this post and the robocopy &lt;a href="http://technet.microsoft.com/en-gb/library/cc733145(WS.10).aspx" target="_blank"&gt;manual&lt;/a&gt; it is possible to configure the copy operation in many different ways. For example you could just copy files that have timestamps in a particular range or files that are greater than a particular size.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Incorrect Function&lt;/strong&gt;&lt;br /&gt;If you play with VSCs often you will run into this rather helpful Microsoft error message. Tips to overcome it in Part 2.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br /&gt;Windows Vista/7 Recovering evidential data from Volume Shadow Copies &lt;em&gt;John Douglas&lt;/em&gt;&lt;br /&gt;&lt;a href="http://technet.microsoft.com/en-gb/library/cc733145(WS.10).aspx" target="_blank"&gt;http://technet.microsoft.com/en-gb/library/cc733145(WS.10).aspx&lt;/a&gt;&lt;br style="text-decoration: underline;" /&gt;&lt;a href="http://blogs.sans.org/computer-forensics/2009/01/08/robocopy-–-a-computer-forensics-tool/" target="_blank"&gt;http://blogs.sans.org/computer-forensics/2009/01/08/robocopy-–-a-computer-forensics-tool/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://42llc.net/index.php?option=com_myblog&amp;amp;task=tag&amp;amp;category=robocopy&amp;amp;Itemid=39" target="_blank"&gt;http://42llc.net/index.php?option=com_myblog&amp;amp;task=tag&amp;amp;category=robocopy&amp;amp;Itemid=39&lt;/a&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-4993310732157675648?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/4993310732157675648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=4993310732157675648' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/4993310732157675648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/4993310732157675648'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2010/04/volume-shadow-copy-forensics-robocopy.html' title='Volume Shadow Copy Forensics - the Robocopy method Part 1'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_QfcS6HZ5Sws/S7tUXVuMVtI/AAAAAAAAA08/lBK-3sTvlBo/s72-c/Screen_shot_2010-04-06_at_16-thumb.29.46.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-2829073143412261811</id><published>2010-03-22T18:38:00.000Z</published><updated>2010-03-23T19:15:39.043Z</updated><title type='text'>Internet History Examination Tools - you generally get what you pay for</title><content type='html'>&lt;p style="clear: both"&gt;My &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2010/03/flock-shepherds-in-life-of-grime.html" target="_blank"&gt;digital Life of Grime case&lt;/a&gt; and another ongoing case have caused me to look more closely at the tools we use to analyse internet history. Life of Grime's suspect had a penchant for the Flock browser and the other ongoing case involves Firefox 3.0.1 running on an Apple iBook. The version of Flock in use is built on Firefox 3 also. It seems to me that I am seeing Firefox as the browser of choice in the majority of my cases. I know that most &lt;a href="http://en.wikipedia.org/wiki/Usage_share_of_web_browsers#W3Counter_.28May_2007_to_present.29" target="_blank"&gt;available statistics&lt;/a&gt; still put Internet Explorer in top spot but I still maintain Firefox has overtaken IE in my cases. Certainly Firefox is (worryingly?) by far the most popular browser used to read this blog.&lt;/p&gt;&lt;p style="clear: both"&gt;Now as far as the data we think of as internet history is concerned, Firefox 3.x.x stores this data in a Sqlite database, &lt;em&gt;places.sqlite&lt;/em&gt; and sometimes additionally &lt;em&gt;places.sqlite-journal&lt;/em&gt;. However in the wider sense internet history can also be determined from the Firefox cache because the page elements stored there contain each elements URL and associated times and dates. Firefox stores it's cache in a folder entitled Cache within the xxxxxxxx.default folder (it is possible for a user to have more than one profile -so there may be other profile names not having the word default appended). Cached items may be stored in a file by itself (albeit renamed without a file extension) or more often within cache block files (e.g. _CACHE_001_). These cache block files can contain many cached items and therefore an index file is needed to record where an item is stored in the cache. This index is called a cache map and is the file _CACHE_MAP_.&lt;/p&gt;&lt;p style="clear: both"&gt;Many of us have made use of a number of free utilities to examine Firefox 3 internet history. These tools have become popular due to our mainstream, paid for, tools falling a little behind the curve and not supporting Firefox 3. These free utilities include:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;http://www.firefoxforensics.com/&lt;/li&gt;&lt;li&gt;http://forensic-software.co.uk/foxanalysis.aspx &lt;/li&gt;&lt;li&gt;http://www.machor-software.com/firefox_forensics &lt;/li&gt;&lt;li&gt;http://www.nirsoft.net/web_browser_tools.html&lt;/li&gt;&lt;li&gt;http://www.woany.co.uk/firefoxforensics/&lt;/li&gt;&lt;li&gt;http://manuel.santander.name/wbf.html &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;All bar the Nirsoft tool can not parse any data out of Firefox cache. Now for me that is a problem -not necessarily with the tools, but with the methodology I am going to use in a production line forensics environment. I know there are other approaches -substituting the suspects profile into a test installation of Firefox for example but ideally I would prefer a one stop shop approach.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Regular readers will know that I work in an Encase shop and the Encase 6.15 comprehensive internet search will parse out live Firefox records from cache. However in both the cases I am working on now, the cache map file is zeroed out. In this situation Encase does not parse records still recorded within the cache block files (and for that matter neither does the Nirsoft utility). &lt;/p&gt;&lt;p style="clear: both"&gt;Which brings me to NetAnalysis. As our more experienced readers will know NetAnalysis is the industry standard, tried and tested tool for the analysis of browser history and cache, particularly Internet Explorer history and cache. NetAnalysis has always supported other browser artefacts but until now not Firefox version 3. &lt;a href="http://www.digital-detective.co.uk/netanalysis.asp" target="_blank"&gt;NetAnalysis 1.50&lt;/a&gt; and the associated program &lt;a href="http://support.digital-detective.co.uk/KB/Default.aspx?ID=KB80038" target="_blank"&gt;HstEx 3&lt;/a&gt; now support Firefox 3 &lt;em&gt;and then some.&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;In both my cases I have copied out the profile folders and quickly added them to a NetAnalysis workspace using the &lt;em&gt;Open all history from folder &lt;/em&gt;option. Because the cache map file is empty the cache is effectively deleted which is where HstEx 3 comes in. HstEx 3 is a deleted history record extractor which can locate deleted records from physical disks, raw images and new to this version, directly from Encase evidence files. In both my cases HstEx 3 was able to parse records from the cache block files that none of my other tools, including Encase 6.15, could do. The advantage of being able to run HstEx 3 directly over Encase evidence files can not be over stated. By running multiple sessions of Hstex 3, productivity can be considerably enhanced and at the same time freeing up image mounting tools for other uses. &lt;/p&gt;&lt;p style="clear: both"&gt;NetAnalysis 1.50 also introduces many other new features -probably the headline one being the significantly enhanced cached web page rebuilding feature. This is &lt;em&gt;very&lt;/em&gt; cool. Simply load in your suspects browser cache, press F6 and the workspace filters cached webpages that can be rebuilt. Double clicking on them displays the page in a viewer and within an export folder the underlying html and associated page elements can be found. Each rebuilt page folder can be copied for use in an html report for example. I can't do this feature justice here but a Digital Detective &lt;a href="http://support.digital-detective.co.uk/KB/Default.aspx?ID=KB80023" target="_blank"&gt;knowledge base article&lt;/a&gt; covers it in more detail. Other enhancements include the provision of an extensive audit log. I think this facility is anticipating the tightening of regulation here in the UK with the advent of the Forensic Science Regulator. More immediately it allows the creation of cracking contemp notes. Another notable addition is the ability to provide more information about redirect and referral URLs.&lt;/p&gt;&lt;p style="clear: both"&gt;As a final thought, we all love free tools, many of them written by Harlan Carvey, Mark Woan, Tim Coakley, John Douglas and others we know and respect. But we do need to be careful - one or two of the free tools I have referred to above have been written by people who, for whatever reason, have had to obfuscate their identity. I do not doubt any of these tools, but what if a new tool was released that extracted data that none of our current tools could. If we do not know who is behind it how do we know that the said tool was not on a certain date in the future going to scour our forensic network and modify all the Encase evidence files it came across? As I said at the start you generally get what you pay for. Till next time.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-2829073143412261811?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/2829073143412261811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=2829073143412261811' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/2829073143412261811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/2829073143412261811'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2010/03/internet-history-examination-tools-you.html' title='Internet History Examination Tools - you generally get what you pay for'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-3581564144499587418</id><published>2010-03-21T13:11:00.000Z</published><updated>2010-03-21T13:11:09.429Z</updated><title type='text'>Flock shepherds in a Life of Grime</title><content type='html'>&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;After writing that title I am wondering if I wouldn't be better employed writing crossword clues. Back at the sausage factory I am bogged down investigating a digital &lt;a href="http://en.wikipedia.org/wiki/A_Life_of_Grime" target="_blank"&gt;Life of Grime&lt;/a&gt;. You probably have done a case like it - there are several hard drives in the suspect's box all with multiple partitions. Every nook and cranny is stuffed with IPoC and IVoC in a semi organised way. Almost as if all the material was neatly stored at one time until my suspect got lazy and started storing stuff on the floor, in the hall, under the table, that sort of thing. There are new folders after new folders -you don't see a &lt;em&gt;New Folder (13)&lt;/em&gt; everyday. Not content with filling up his hard drives my suspect had also felt the need to back his stuff up to CD-R or DVD. Repeatedly.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;div style="clear: both;"&gt;The sheer quantity of files and folders in this case presents many problems and I thought I would share a few of them with you. Most of the problems are linked to pictures, that is the vast quantity of pictures, all of which have to be categorised and counted.&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;div style="clear: both;"&gt;As many of my readers will know in a case like this &lt;a href="http://www.e-crime.on.ca/software/C4P4/" target="_blank"&gt;C4P&lt;/a&gt; is an essential tool (going off at a tangent -googling C4P led to the discovery that c4p dot com is an online community for swingers - and now having said that we better watch out for some dodgy google ads appearing to the right -&amp;gt;&amp;gt; but hey they might improve my minuscule return from them ;-) ). C4P stores the results of categorisation, whilst the case is being worked on, in an Access database that has a 2GB file size limit. Now depending on how deeply your MDP folder is buried within your case folder structure this equates to about 1.9 million picture files. A long standing problem has been that if the c4p graphics extractor enscript carves out more than about 1.9 million picture files C4P itself would fail to create a case, due to the underlying Access database maxing out. In this case well over 2.1 million images were carved from the optical media alone and I was pleased to discover that C4P version 4.01 at least dealt with the maxing out issue fairly gracefully by creating a .c4p4 file and then a second .c4p4 file for the overspill. Case creation failed but I was subsequently able to create a new case by opening the double clicking on the first c4p4 file, which is associated with C4P. Doing this gave me a case with exactly 1,900,000 pictures which when viewed pragmatically is better than starting again. It is clear that the Access database problem will become more of a problem as main stream hard disks become bigger and bigger and I was pleased to discover that a beta version (4.03) of C4P is available that utilises an SQLite database (and whilst at it, runs happily on 64 bit boxes). This version does not limit the number of pictures you can have in one case.&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;div style="clear: both;"&gt;In a case like this another C4P bugbear also rears its ugly head. The latest C4P graphics extractor enscript (4.03) carves out embedded thumbnails within jpgs, so for every picture file potentially you may have three carved images- the original, a thumbnail and a preview image. I am not sure why the latest script does this as a feature of earlier scripts was that it didn't carve embedded images to avoid duplication. It is that word -duplication- that is the problem. C4P will allow you to create a report directly from the program but if you need to compile statistics (how many Level 1s, 2s etc.) the report will be inaccurate. I do not use C4P for reporting and instead use the C4P Import enscript to bring back the C4P results into my Encase case. Once in Encase, sorting the C4P bookmarks by file offset provides a good indicator of how many embedded images there are. Luckily it is a fairly simple exercise to remove the duplicate bookmarking -simply selecting (blue checking) each category folder in turn and tagging selected files, and then from Entries view rebookmarking the files concerned will effectively sort out most duplication. Obviously different considerations will apply to pictures embedded into files for other reasons.&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Moving away from C4P another issue in this case is establishing where the pictures came from. Obviously establishing which browsers are being used is a job that need doing and an &lt;a href="http://www.woanware.co.uk/webbrowserinformationfinder/"&gt;Enscript that does just that&lt;/a&gt; has been written by Mark Woan over at Woanware. The &lt;em&gt;WebBrowserInformationFinder&lt;/em&gt; enscript outputs to the console enabling you to copy and paste into your contemporaneous notes -very neat. Talking of contemp notes I use John Douglas's &lt;a href="http://www.qccis.com/pages/forensic-tools" target="_blank"&gt;Case Notes&lt;/a&gt; - another very neat program. Looking at the problem a little wider it is worth considering some other angles to this problem, the registry contains a few pointers too, Harlan Carvey's post &lt;a href="http://windowsir.blogspot.com/2010/01/browser-stuff.html" target="_blank"&gt;Browser Stuff&lt;/a&gt; covers this in more detail.&lt;/p&gt;&lt;p style="clear: both"&gt;As it turned out my suspect used &lt;a href="http://www.flock.com/"&gt;Flock&lt;/a&gt; as his default browser. This browser is built upon Firefox 3 and stores internet history and cache in a profile in the same way as Firefox. In the XP box I was looking at the profile folder was stored at the path C:\Documents and Settings\USER_NAME\Application Data\Flock\Browser\Profiles\xxxxxxxx.default. I have analysed this with NetAnalysis 1.50. More on NetAnalysis, Firefox 3 and the tools available to analyse this browser's artefacts in my next post.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-3581564144499587418?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/3581564144499587418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=3581564144499587418' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/3581564144499587418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/3581564144499587418'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2010/03/flock-shepherds-in-life-of-grime.html' title='Flock shepherds in a Life of Grime'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-1372889036992446881</id><published>2010-02-19T23:07:00.006Z</published><updated>2010-06-16T16:42:25.853+01:00</updated><title type='text'>Volume Shadow Copy Forensics.. cannot see the wood for the trees?</title><content type='html'>&lt;p style="clear: both"&gt;There has been a great deal written about volume shadow copy forensics lately, much of it very technical. The purpose of this post is to provide some of this information in an abridged form and to document a methodology to investigate them that works for me. I work in an Encase shop so much of what follows is tailored for Encase users. It is a followup to my &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2009/08/vista-volume-shadow-copy-issues.html"&gt;earlier post&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;What is a Volume Shadow Copy?&lt;/strong&gt;&lt;br /&gt;It is a snapshot of a NTFS formatted volume. Typically they are created every day or two in Vista and on a weekly basis in Windows 7. Both operating systems will also create volume shadow copies prior to the installation of new software (including Windows updates). The Volume Shadow Copy Service (VSS) monitors all the changes made to a volume from the time that a shadow copy was created until the creation of the next one. For the purpose of monitoring a volume is divided into 16 kilobyte blocks. When a block is about to be overwritten it is backed up in the shadow copy. Only changed blocks are backed up. If there is a requirement to revert to a snapshot the original blocks are restored, replacing the changed ones, in a sense reconstituting the volume back to its state when the snapshot was taken. Certain versions of Vista and Windows 7 allow users to revert to previous versions of files and folders, not just at the volume level.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Where are Volume Shadow Copies stored?&lt;/strong&gt;&lt;br /&gt;In the System Volume Information folder stored at the root of each protected volume.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Why might I need to investigate the contents of a Volume Shadow Copy?&lt;/strong&gt;&lt;br /&gt;You might not, but I am seeing many cases now where the Shadow Copies contain relevant evidence. For instance, during your IPOC cases the file finder or the C4P graphics extractor enscript or Blade have identified pictures within the shadow copy file which do not exist on the live volume. At that stage you simply do not know for example, whether these pictures were part of a web page accidentally viewed and then immediately closed down, embedded within an unsolicited email message, or there as a result of the intended actions of your suspect. Or you may have experienced cases where Encase lists many files as deleted and overwritten but that have very very dodgyfile names.&lt;/p&gt;&lt;p style="clear: both"&gt;The following screenshot is from an Encase case which contains a live volume and images of two shadow copies of the same volume. Four deleted and overwritten files are listed, the metadata of which has been recovered by Encase from the MFT on the live volume. It can be seen that these files are intact within the shadow copies which allows your file carver of choice to recover them.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://4.bp.blogspot.com/_QfcS6HZ5Sws/S36TXVHyJHI/AAAAAAAAAyY/dXHCokSkRxc/s1600-h/Encase3deletedoverwritten.png" class="image-link"&gt;&lt;img src="http://4.bp.blogspot.com/_QfcS6HZ5Sws/S36TXVHyJHI/AAAAAAAAAyY/dXHCokSkRxc/s640/Encase3deletedoverwritten.png" height="532" align="left" width="640" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;&lt;br style="clear: both" /&gt;&lt;div style="clear: both;"&gt;There are of course many other scenarios and examples I could give but the long and the short of it is that if deleted data from the live volume could be relevant to your case, you may need to investigate the shadow copies.&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;Which shadow copies should I look at further?&lt;/strong&gt;&lt;br /&gt;It has been suggested that, because each shadow copy is effectively a volume in it's own right which mirrors the size of the source volume, that if you have twenty shadow copies you will have to investigate twenty times as much data. In Production Line forensics this simply is not going to happen. Therefore we need to make some educated guesses as to which shadow copies to look at. Have our file carvers flagged any as meriting further investigation? Do keyword searches point to any? Were any shadow copies created just before or just after a particular event we are looking at? Are there a rash of shadow copies created within a short time of each other by software installation or windows updates which we can exclude? Once we have made our choices we can proceed further but it is not the case that the amount of data to be investigated is a multiplied by the number of shadow copies you chose to investigate. This is because the majority of data within each shadow copy is exactly the same as the data on the live volume. We are really only interested in the differences and I will discuss a method to do this later in this blog post.&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;strong&gt;What are we going to need?&lt;/strong&gt;&lt;br /&gt;For what follows we will need a Windows 7 box, Encase with the PDE module and some storage space formatted NTFS and ideally with File and Folder compression enabled. We will also need George Garner's &lt;a href="http://www.gmgsystemsinc.com/fau/03ddecb5-8262-4022-aaff-6559424ff8fc/fau-1.3.0.2390a.zip" title="" target="_blank"&gt;Forensic Acquisition Utility&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Method&lt;/strong&gt;&lt;br /&gt;You will already have an Encase image of the drive you wish to investigate. When this is loaded up into an Encase case you need to gather some information in respect to the shadow copies you wish to investigate further. You will need to note the File Creation date and if you wish to be more precise establish the Shadow Copy ID stored at File Offset 144 for 16 bytes - bookmark as a GUID in Encase.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://4.bp.blogspot.com/_QfcS6HZ5Sws/S36ipMbze_I/AAAAAAAAAyg/WQbzU3F0yAc/s1600-h/shadowIDFO144L16.png" class="image-link"&gt;&lt;img src="http://4.bp.blogspot.com/_QfcS6HZ5Sws/S36ipMbze_I/AAAAAAAAAyg/WQbzU3F0yAc/s640/shadowIDFO144L16.png" border="0" height="92" align="left" width="640" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://2.bp.blogspot.com/_QfcS6HZ5Sws/S36i_jV_3QI/AAAAAAAAAyo/agVAb-pjF20/s1600-h/guid_bookmark_shadowID.png" class="image-link"&gt;&lt;img src="http://2.bp.blogspot.com/_QfcS6HZ5Sws/S36i_jV_3QI/AAAAAAAAAyo/agVAb-pjF20/s400/guid_bookmark_shadowID.png" border="0" height="341" align="left" width="400" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;&lt;br style="clear: both" /&gt;&lt;div style="clear: both;"&gt;Next you will have to mount the volume containing the shadow copies as an emulated disk using the Encase PDE module. On my box the mounted volume was allocated the drive letter I.&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;I am using Windows 7 - every thing that follows &lt;em&gt;should&lt;/em&gt; work in Vista and has worked for many people. However for me, in testing using Vista it did not always work as expected -generating various permissions related errors -so far - touch wood- Windows 7 just works.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Run a Command Prompt as Administrator and type the command (substituting I for the drive letter allocated to your mounted volume)&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;vssadmin list shadows /for=I:&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;This will result in a list of all available shadow copies on the selected volume&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;vssadmin 1.1 - Volume Shadow Copy Service administrative command-line tool&lt;br /&gt;(C) Copyright 2001-2005 Microsoft Corp.&lt;br /&gt;&lt;br /&gt;Contents of shadow copy set ID: {2202d8a9-1326-4254-9818-252ece858b17}&lt;br /&gt;Contained 1 shadow copies at creation time: 10/12/2009 13:41:25&lt;br /&gt;Shadow Copy ID: {ad2e71d0-48d6-44b9-9715-f5ff6b5a5643}&lt;br /&gt;Original Volume: (?)\\?\Volume{34e5a98a-1a1d-11df-a259-00236cb6de69}\&lt;br /&gt;Shadow Copy Volume: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy4&lt;br /&gt;Originating Machine: Richard-MBP-Vis&lt;br /&gt;Service Machine: Richard-MBP-Vis&lt;br /&gt;Provider: 'Microsoft Software Shadow Copy provider 1.0'&lt;br /&gt;Type: ClientAccessibleWriters&lt;br /&gt;Attributes: Persistent, Client-accessible, No auto release, Differentia&lt;br /&gt;l, Auto recovered&lt;br /&gt;&lt;br /&gt;Contents of shadow copy set ID: {e13bb9d9-c522-422b-b92a-37f6d12363d9}&lt;br /&gt;Contained 1 shadow copies at creation time: 15/12/2009 11:17:37&lt;br /&gt;Shadow Copy ID: &lt;strong&gt;{d0e1c613-7892-47e1-9b7e-f638adac9d16}&lt;/strong&gt;&lt;br /&gt;Original Volume: (?)\\?\Volume{34e5a98a-1a1d-11df-a259-00236cb6de69}\&lt;br /&gt;Shadow Copy Volume: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy5&lt;br /&gt;Originating Machine: Richard-MBP-Vis&lt;br /&gt;Service Machine: Richard-MBP-Vis&lt;br /&gt;Provider: 'Microsoft Software Shadow Copy provider 1.0'&lt;br /&gt;Type: ClientAccessibleWriters&lt;br /&gt;Attributes: Persistent, Client-accessible, No auto release, Differentia&lt;br /&gt;l, Auto recovered&lt;br /&gt;&lt;br /&gt;Contents of shadow copy set ID: {4db5347c-214a-4e5c-b785-0fd993f1dc33}&lt;br /&gt;Contained 1 shadow copies at creation time: 15/12/2009 11:18:25&lt;br /&gt;Shadow Copy ID: {b7621ae2-5efb-4929-aa35-39af3d6e39ac}&lt;br /&gt;Original Volume: (?)\\?\Volume{34e5a98a-1a1d-11df-a259-00236cb6de69}\&lt;br /&gt;Shadow Copy Volume: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy6&lt;br /&gt;Originating Machine: Richard-MBP-Vis&lt;br /&gt;Service Machine: Richard-MBP-Vis&lt;br /&gt;Provider: 'Microsoft Software Shadow Copy provider 1.0'&lt;br /&gt;Type: ClientAccessibleWriters&lt;br /&gt;Attributes: Persistent, Client-accessible, No auto release, Differentia&lt;br /&gt;l, Auto recovered&lt;br /&gt;&lt;br /&gt;Contents of shadow copy set ID: {2445d9b6-58fd-4ac6-b73e-7bd0ebbec6cc}&lt;br /&gt;Contained 1 shadow copies at creation time: 15/12/2009 12:14:44&lt;br /&gt;Shadow Copy ID: {709f74d5-ded2-4294-a292-c7cc4db0e67b}&lt;br /&gt;Original Volume: (?)\\?\Volume{34e5a98a-1a1d-11df-a259-00236cb6de69}\&lt;br /&gt;Shadow Copy Volume: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy7&lt;br /&gt;Originating Machine: Richard-MBP-Vis&lt;br /&gt;Service Machine: Richard-MBP-Vis&lt;br /&gt;Provider: 'Microsoft Software Shadow Copy provider 1.0'&lt;br /&gt;Type: ClientAccessibleWriters&lt;br /&gt;Attributes: Persistent, Client-accessible, No auto release, Differentia&lt;br /&gt;l, Auto recovered&lt;br /&gt;&lt;br /&gt;Contents of shadow copy set ID: {c9e7850a-87db-4dbc-9d72-40749665d80d}&lt;br /&gt;Contained 1 shadow copies at creation time: 09/02/2010 07:26:39&lt;br /&gt;Shadow Copy ID: {2a871fe5-21f7-4fb6-b8e9-65e194a62901}&lt;br /&gt;Original Volume: (?)\\?\Volume{34e5a98a-1a1d-11df-a259-00236cb6de69}\&lt;br /&gt;Shadow Copy Volume: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy8&lt;br /&gt;Originating Machine: Richard-MBP-Vis&lt;br /&gt;Service Machine: Richard-MBP-Vis&lt;br /&gt;Provider: 'Microsoft Software Shadow Copy provider 1.0'&lt;br /&gt;Type: ClientAccessibleWriters&lt;br /&gt;Attributes: Persistent, Client-accessible, No auto release, Differentia&lt;br /&gt;l, Auto recovered&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;It can be seen that the Shadow Copy ID number I bookmarked as a GUID is identified by VSSAdmin as &lt;strong&gt;HarddiskVolumeShadowCopy5&lt;/strong&gt;. The next step is to image this shadow copy using the Forensic Acquisition Utility (a version of dd that works in Windows). At the command prompt navigate to the path of the utility and type the command&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;C:\FAU.x64&amp;gt;&lt;strong&gt;dd if=\\.\HarddiskVolumeShadowCopy5 of=G:\shadow5.img --localwrt&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;It can be seen that the input file is referenced as &lt;strong&gt;\\.\HarddiskVolumeShadowCopy5&lt;/strong&gt; and the output file which I chose to name &lt;strong&gt;shadow5.img&lt;/strong&gt; is located on G:. This volume is an NTFS formatted volume with file and folder compression enabled. &lt;strong&gt;--localwrt&lt;/strong&gt; is a switch required to allow the utility to write to the G drive. The response at the command prompt will be similar to&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;The VistaFirewall Firewall is active with exceptions.&lt;br /&gt;Copying \\.\HarddiskVolumeShadowCopy5 to G:\shadow5.img&lt;br /&gt;Output: G:\shadow5.img&lt;br /&gt;44048285696/57868808192 bytes (compressed/uncompressed)&lt;br /&gt;55187+1 records in&lt;br /&gt;55187+1 records out&lt;br /&gt;57868808192 bytes written&lt;br /&gt;&lt;br /&gt;Succeeded!&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Enabling file and folder compression reduced the dd image from about 59GB to 44GB. Whilst imaging make sure that you have carried out an hash analysis in Encase of your source volume and create a hash set from it. Add &lt;strong&gt;only&lt;/strong&gt; this hash set to your library.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;div style="clear: both;"&gt;Once imaging completes add the image to Encase (via the add raw image option) and carry out a hash analysis. Create a condition which filters out files that match a hash set.&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;The following screen shot shows that there are 237024 files contained within the image of HarddiskVolumeShadowCopy5 (broadly the same as the source volume)&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh6.ggpht.com/_QfcS6HZ5Sws/S37Adq4pUYI/AAAAAAAAAy0/muhOravdn9E/s800/Encasetotalfilesinshadow5.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh5.ggpht.com/_QfcS6HZ5Sws/S37DhHOO68I/AAAAAAAAAzQ/67YkHEMvC9w/s800/Encasetotalfilesinshadow5-thumb.png" height="78" align="left" width="339" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;Apply the condition which filters out files that have the same hash value as those in the original image and it can be seen that the amount of new or different files is considerably reduced to 7864 files (with the caveat that some of the original files may have been moved -which may or may not be relevant in your case).&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh3.ggpht.com/_QfcS6HZ5Sws/S37AehkahfI/AAAAAAAAAy8/bYMnQThoQTA/s800/Encasereducenumberfilesshadow5.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh4.ggpht.com/_QfcS6HZ5Sws/S37DijgPHtI/AAAAAAAAAzY/MHrSkbs9ghw/s800/Encasereducenumberfilesshadow5-thumb.png" height="184" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;I think it can be seen therefore that it is possible to reduce the number of files you need to consider by filtering out the duplication between the original volume and the shadow copy.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;A Note of Caution about the Shadow Copy Images&lt;/strong&gt;&lt;br /&gt;When you image a Shadow Copy and add it into an Encase case as described above it is easy to think of the image as a point in time snapshot of the entire volume including the areas of the volume we refer to as unallocated clusters. Unfortunately it does not appear to be. However your forensic tool (Encase in my case) is likely to process it as if it was the entire volume. In my test case used to illustrate this blog post I imaged at 14:47hrs on 9th February 2010 two shadow copies -one created at 15/12/2009 11:17:37 and one created at 09/02/2010 07:26:39. At 15/12/2009 11:35 I copied a folder entitled Sony from an external device to the desktop of my user account on this Vista box. It can be seen in the screen shot below. It is a live folder containing files and has not been deleted.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://1.bp.blogspot.com/_QfcS6HZ5Sws/S37dWzp1raI/AAAAAAAAA0A/ED7LSmUH8ko/s1600-h/sony_original_volume.png" class="image-link"&gt;&lt;img src="http://1.bp.blogspot.com/_QfcS6HZ5Sws/S37dWzp1raI/AAAAAAAAA0A/ED7LSmUH8ko/s640/sony_original_volume.png" border="0" height="102" align="left" width="640" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;It can also be seen within the shadow copy created on 9th February 2010 as expected.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://1.bp.blogspot.com/_QfcS6HZ5Sws/S37diadjj1I/AAAAAAAAA0I/szwCrjfrWrg/s1600-h/sony_shadow8.png" class="image-link"&gt;&lt;img src="http://1.bp.blogspot.com/_QfcS6HZ5Sws/S37diadjj1I/AAAAAAAAA0I/szwCrjfrWrg/s640/sony_shadow8.png" border="0" height="86" align="left" width="640" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;&lt;div style="clear: both;"&gt;And as expected it &lt;strong&gt;cannot&lt;/strong&gt; be seen in the earlier shadow copy created prior to the folder being copied.&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://1.bp.blogspot.com/_QfcS6HZ5Sws/S37dutBKE8I/AAAAAAAAA0Q/6Zm15qwn7P0/s1600-h/no_sony_shadow5.png" class="image-link"&gt;&lt;img src="http://1.bp.blogspot.com/_QfcS6HZ5Sws/S37dutBKE8I/AAAAAAAAA0Q/6Zm15qwn7P0/s640/no_sony_shadow5.png" border="0" height="74" align="left" width="640" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;&lt;br style="clear: both" /&gt;&lt;div style="clear: both;"&gt;However unexpectedly when I ran the Encase Recover Folders feature across the HarddiskShadowcopy5 volume it found traces of the Sony folder and in fact many other files post dating the creation of the shadow copy.&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://2.bp.blogspot.com/_QfcS6HZ5Sws/S37d6-325ZI/AAAAAAAAA0Y/AavuvxdXock/s1600-h/sony_shadow5.png" class="image-link"&gt;&lt;img src="http://2.bp.blogspot.com/_QfcS6HZ5Sws/S37d6-325ZI/AAAAAAAAA0Y/AavuvxdXock/s640/sony_shadow5.png" border="0" height="76" align="left" width="640" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;The Encase Recover Folders feature parses unallocated clusters looking for folder metadata. It seems that it found data in unallocated clusters relating to the current volume. Therefore I believe that any deleted but recoverable data within the shadow copies needs to be treated with caution.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Other Methods&lt;/strong&gt;&lt;br /&gt;So far in this post I have discussed imaging the shadow copy pseudo-device. It is possible to mount the shadow copy as a symbolic link. There are various methods discussed using VMs etc. The most streamlined approach seems to me to be:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;Mount shadow copy with Encase PDE&lt;/li&gt;&lt;li&gt;create a symbolic link (in this example at the root of C) using the command&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;&lt;em&gt;mklink /d c:\shadow_copy5 \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy5\&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;drag the created symbolic link into a separate instance of Encase (for me using the same instance as the one running PDE blue screened my box) which causes Encase to treat the files and folders accessed via the symbolic link as Single files&lt;/li&gt;&lt;li&gt;Create a logical evidence file of these Single files (you may encounter some permissions issues along the way)&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;&lt;div&gt;Methods involving accessing the shadow copies via Symbolic links will only provide access to the logical contents. It may be that the object you are seeking is deleted but recoverable (but note warning above).&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://blogs.sans.org/computer-forensics/2008/10/10/shadow-forensics/"&gt;http://blogs.sans.org/computer-forensics/2008/10/10/shadow-forensics/&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;a href="http://www.digital-detective.co.uk/cgi-bin/digitalboard/YaBB.pl?num=1251461771"&gt;http://www.digital-detective.co.uk/cgi-bin/digitalboard/YaBB.pl?num=1251461771&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;a href="http://blog.szynalski.com/2009/11/23/volume-shadow-copy-system-restore/"&gt;http://blog.szynalski.com/2009/11/23/volume-shadow-copy-system-restore/&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;a href="http://windowsir.blogspot.com/2009/11/working-with-volume-shadow-copies.html"&gt;http://windowsir.blogspot.com/2009/11/working-with-volume-shadow-copies.html&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;a href="http://blogs.technet.com/filecab/archive/2006/09/01/452845.aspx"&gt;http://blogs.technet.com/filecab/archive/2006/09/01/452845.aspx&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;a href="http://en.wikipedia.org/wiki/Shadow_Copy"&gt;http://en.wikipedia.org/wiki/Shadow_Copy&lt;/a&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-1372889036992446881?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/1372889036992446881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=1372889036992446881' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/1372889036992446881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/1372889036992446881'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2010/02/volume-shadow-copy-forensics-cannot-see.html' title='Volume Shadow Copy Forensics.. cannot see the wood for the trees?'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_QfcS6HZ5Sws/S36TXVHyJHI/AAAAAAAAAyY/dXHCokSkRxc/s72-c/Encase3deletedoverwritten.png' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-584887583546168626</id><published>2010-01-21T11:52:00.001Z</published><updated>2010-01-21T11:56:15.932Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tableau'/><category scheme='http://www.blogger.com/atom/ns#' term='TIM'/><category scheme='http://www.blogger.com/atom/ns#' term='Imaging'/><title type='text'>TIM released - first test</title><content type='html'>&lt;p style="clear: both"&gt;Tableau have released their &lt;a href="http://www.tableau.com/index.php?pageid=products&amp;amp;model=TSW-TIM" target="_blank"&gt;Tableau high performance software imaging product&lt;/a&gt; today.&lt;/p&gt;&lt;p style="clear: both"&gt;To install it you first must have installed the latest &lt;a href="http://www.tableau.com/index.php?pageid=products&amp;amp;model=TSW-TFU" target="_blank"&gt;Tableau firmware updater&lt;/a&gt;. Once installed the interface is fairly simple to use. I found some of the terminology in the GUI a bit odd. For example the types of compression selectable for Encase e.01 files are &lt;em&gt;No Compression, Fast Compression &lt;/em&gt;or &lt;em&gt;Good Compression&lt;/em&gt; whilst Encase provides the options &lt;em&gt;none, good &lt;/em&gt;or&lt;em&gt; best. &lt;/em&gt;It seems that &lt;em&gt;fast&lt;/em&gt; maps to &lt;em&gt;good&lt;/em&gt; and &lt;em&gt;good&lt;/em&gt; maps to &lt;em&gt;best&lt;/em&gt;. There also does not seem to be the ability to actually name the created e.01 files- just their containing folders, again a little strange.&lt;/p&gt;&lt;p style="clear: both"&gt;Now as far as performance is concerned in our environment it is slightly faster. We image to a mapped network drive on a san across a gigabit ethernet network. I imaged a Hitachi 80GB sata laptop hard disk via a Tableau T35i write blocker using FTK Imager 2.5.5 using the Encase e.01 format - imaging completed in 51 minutes. Using TIM to image the same drive took 44 minutes. In both cases &lt;em&gt;maximum compression &lt;/em&gt;was selected. Obviously at this stage this testing is far from scientific but TIM seems to be between 10 to 15% faster. I will report how it goes on with larger 3.5 inch sata hard drives later.&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-584887583546168626?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/584887583546168626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=584887583546168626' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/584887583546168626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/584887583546168626'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2010/01/tim-released-first-test.html' title='TIM released - first test'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-5315759495693249705</id><published>2010-01-07T11:36:00.000Z</published><updated>2010-01-07T11:36:10.784Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='C4P'/><title type='text'>C4P, MySQL and Windows 7</title><content type='html'>&lt;p style="clear: both"&gt;I can just about remember the thrill of upgrading to a new OS. When I was the new kid on the block I couldn't wait to upgrade from Windows 98SE to XP Pro (somehow we missed out Windows ME). Anyhow the newer kids on the block have migrated to Windows 7 (it is prettier, more stable, blah blah). Now I am a dinosaur with XP Pro 64 bit!&lt;/p&gt;&lt;p style="clear: both"&gt;Anyway I had a call today about getting various aspects of C4P to play nicely with MySQL on a Vista 64 bit box. In our office we don't actually use Vista on any of our forensic boxes so I thought I'd check out the issues on one of Windows 7 64 bit boxes. As you know (because if you are still reading this you probably use C4P along with a MySQL DB) C4P interacts with the MySQL database in two areas:&lt;/p&gt;&lt;ol style="clear: both"&gt;&lt;li&gt;within Encase at Enscript level if the pre categorization option is selected&lt;br /&gt;&lt;/li&gt;&lt;li&gt;or via &lt;em&gt;Data Migration/ Special/ Update Case Direct from C4P Hash Database &lt;/em&gt;within the Categorizer for Pictures program itself.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="clear: both"&gt;Both of these connections require an MySQL ODBC connector driver to communicate with the running MYSQL C4P hash database using a suitable database connection string. Essentially in this scenario we have a choice of four MySQL ODBC drivers:&lt;/p&gt;&lt;ol style="clear: both"&gt;&lt;li&gt;&lt;a href="http://dev.mysql.com/downloads/mirror.php?id=376347#mirrors" target="_blank"&gt;MySQL ODBC 5.1 64 bit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://dev.mysql.com/downloads/mirror.php?id=376346#mirrors" target="_blank"&gt;MySQL ODBC 5.1 32bit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://dev.mysql.com/downloads/mirror.php?id=367512#mirrors" target="_blank"&gt;MySQL ODBC 3.51 64 bit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://dev.mysql.com/downloads/mirror.php?id=367506#mirrors" target="_blank"&gt;My SQL ODBC 3.51 32 bit&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="clear: both"&gt;All bar the 3.51 64 bit driver are installed via a Windows installer. The 3.51 64 bit driver is slightly trickier to install - you need to unpack the zip, run a command prompt as administrator, navigate the command prompt to your unpacked zip folder and then run the command &lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Install 0&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;&lt;strong&gt;Enscript level communication&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;At Enscript level it is possible to modify the database connection string which allows you to specify which ODBC connector driver to use. In testing on a Windows 7 64 bit box I have found that both the 3.51 and 5.1 64 bit drivers work (if the drivers fail you generally get a long unintelligible error message). The C4P 4.02 enscript allows the user to configure their own database connection string. The string that works for me is:&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh3.ggpht.com/_QfcS6HZ5Sws/S0RA3ndIFVI/AAAAAAAAAyU/8VmMHj4GU8U/s800/ODBC.jpg" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh3.ggpht.com/_QfcS6HZ5Sws/S0RA2RPFWII/AAAAAAAAAyQ/BqyQ1GIBlu0/s800/ODBC-thumb.jpg" height="129" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;Provider=MSDASQL;DRIVER={MySQL ODBC 3.51 Driver};SERVER=Your_server_name_or_IP_address;DATABASE=c4p_hash;UID=c4p_user;PASSWORD=password;OPTION=3&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Simply change 3.51 to 5.1 if you are using the later driver.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Categorizer for Pictures communication&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;The database connection string used by this program is hard coded and not user configurable. The program requires the 3.51 driver. However I could not get the &lt;em&gt;Data Migration/ Special/ Update Case Direct from C4P Hash Database&lt;/em&gt; option to work on the Windows 7 64 bit box using the 3.51 64 bit driver. I suspect this is due to a permissions issue and tried to run C4P as administrator but I still failed to connect to the MySQL C4P hash db. However I was able to get the &lt;em&gt;Data Migration/ Special/ Update Case Direct from C4P Hash Database&lt;/em&gt; option to work using the MySQL ODBC 3.51 32 bit driver.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Other combinations may work but on a Windows 7 64 bit box I recommend installing the MySQL ODBC 5.1 64 bit driver and the MySQL ODBC 3.51 32 bit driver to get C4P and the C4P graphics extractor enscript to play nicely with the MySQL C4P hash database.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-5315759495693249705?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/5315759495693249705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=5315759495693249705' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/5315759495693249705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/5315759495693249705'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2010/01/c4p-mysql-and-windows-7.html' title='C4P, MySQL and Windows 7'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_QfcS6HZ5Sws/S0RA2RPFWII/AAAAAAAAAyQ/BqyQ1GIBlu0/s72-c/ODBC-thumb.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-7862331631662776093</id><published>2010-01-05T12:07:00.001Z</published><updated>2010-01-05T12:27:58.875Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mac OSX'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Web Browser Session Restore Forensics</title><content type='html'>&lt;p style="clear: both"&gt;As this is the first post of the year I would like to wish you a happy new year.&lt;/p&gt;&lt;p style="clear: both"&gt;The posting title is the title of an excellent paper written by Harry Parsonage relating to Session Restore files created by the latest Mozilla (Firefox) and Internet Explorer 8 browsers. These files may contain enough information to allow the browser to display a users workspace exactly as it was prior to a forced restart. Obviously these files may contain significant evidence. I am not going to steal Harry's thunder so download his paper from &lt;a href="http://computerforensics.parsonage.co.uk/other/other.htm" target="_blank"&gt;http://computerforensics.parsonage.co.uk/other/other.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;I know that Harry is not keen on blogs simply regurgitating information found elsewhere so I will try and add a little value. &lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Safari v4&lt;/strong&gt;&lt;br /&gt;Session Restore functionality is now a must have in modern browsers. Another browser to have similar functionality is Safari v4. The last session information is contained in a file entitled &lt;em&gt;LastSession.plist&lt;/em&gt;&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;In Mac OSX 10.6 this file is stored at &lt;em&gt;&lt;strong&gt;/Users/&amp;lt;user name&amp;gt;/Library/Safari&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;In XP this file is stored at &lt;em&gt;&lt;strong&gt;C:\Documents and Settings\&amp;lt;User name&amp;gt;\Application Data\Apple Computer\Safari&lt;/strong&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;I use the mac application - property list editor to review plists, there are windows applications to do this as well.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Firefox v3.5.6 running in Mac OSX 10.6&lt;/strong&gt;&lt;br /&gt;Harry's paper applies here in the main.&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;The sessionstore.js file is stored at &lt;strong&gt;&lt;em&gt;/Users/&amp;lt;User Name&amp;gt;/Library/Application Support/Firefox/Profiles/XXXXXXX.default&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-7862331631662776093?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/7862331631662776093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=7862331631662776093' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/7862331631662776093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/7862331631662776093'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2010/01/web-browser-session-restore-forensics.html' title='Web Browser Session Restore Forensics'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-5136841631334215112</id><published>2009-12-13T09:53:00.000Z</published><updated>2010-01-07T11:53:50.513Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Satnav'/><category scheme='http://www.blogger.com/atom/ns#' term='GPS'/><category scheme='http://www.blogger.com/atom/ns#' term='Navman'/><title type='text'>Navman S30 Satnav device</title><content type='html'>&lt;p style="clear: both"&gt;I have seen a number of different Navman models now. All of them have subtle variations on how to process them. Although the underlying OS is Microsoft WinCE.NET 5.0 Core Version I did not have to access this device via Mobile Device Centre. After applying some write blocking to my USB port this device was accessible as a mass storage device allowing me to image it with Encase. I ended up with 114,759 sectors being imaged.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh3.ggpht.com/_QfcS6HZ5Sws/Sx4Wisoi0eI/AAAAAAAAAno/cUaCgoTMbOY/s800/navman-s-series-manual-en_gb-30.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh3.ggpht.com/_QfcS6HZ5Sws/Sx5GmgMmegI/AAAAAAAAAxM/gSXAye1GfQw/s800/navman-s-series-manual-en_gb-30-thumb.png" height="149" align="left" width="263" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;&lt;br /&gt;The next step I took was to track down and consult a manual for the device in order to establish its capabilities. I expect all devices to have saved Home, Favourites and Recent destinations and this device was no exception. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh6.ggpht.com/_QfcS6HZ5Sws/Sx4WkP6T-DI/AAAAAAAAAn8/EW9WM8jztU0/s800/navman-s-series-manual-en_gb-132.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh4.ggpht.com/_QfcS6HZ5Sws/Sx5GoKgd43I/AAAAAAAAAxg/nMFC4rPrFgs/s800/navman-s-series-manual-en_gb-132-thumb.png" height="148" align="left" width="260" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;&lt;br /&gt;In addition however this device can save trip logs, pre-planned itineraries, pictures and be paired with a mobile phone.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Almost all the relevant data is stored within xml formatted files. Microsoft Excel 2007 is an excellent tool for examining these files and subsequently reporting on them. I use the &lt;em&gt;Get External Data / From Other Sources / From XML Data Import &lt;/em&gt;option via the data tab and allow Excel to sort out the formatting.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh5.ggpht.com/_QfcS6HZ5Sws/Sx4hFijQkzI/AAAAAAAAAqI/eVSTcAT_KVc/s800/Navman_base_paths.jpg" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh6.ggpht.com/_QfcS6HZ5Sws/Sx5GpHR7hEI/AAAAAAAAAx0/pgl0vggH7F4/s800/Navman_base_paths-thumb.jpg" height="208" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;&lt;br /&gt;A good place to start is the file &lt;em&gt;paths.xml &lt;/em&gt;stored at the root of the partition. This file details the location of some of the relevant files.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;This is a more definitive list:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;MyFavouriteLocations.xml - used to store the home location and favourites&lt;/li&gt;&lt;li&gt;MyRecentLocations.xml - used to store Recents and also Journey Starts&lt;br /&gt;&lt;/li&gt;&lt;li&gt;MyMultiStopLocations.xml - used to store saved multi stop journeys&lt;/li&gt;&lt;li&gt;MyRoute.xml - used to store the current journey which is in effect the last journey -on the device I examined this file was deleted but recoverable&lt;br /&gt;&lt;/li&gt;&lt;li&gt;UserSettings.xml – used to store device settings including where the unit was turned off&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;When a user enters a new address the menu shows previously entered towns or cities, road names and postcodes. This data is stored in the following files:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;DWRecentPocode.xml – Previously entered postcodes, most recent first&lt;br /&gt;&lt;/li&gt;&lt;li&gt;DWRecentRoad.xml – Previously entered road names, most recent first&lt;br /&gt;&lt;/li&gt;&lt;li&gt;DWRecentPlace.xml – Previously entered towns or cities, most recent first&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;There are a number of presumably back up files also containing the same (as far as I could see) xml formatted data:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;MyFavouriteLocations_bak.xml &lt;/li&gt;&lt;li&gt;MyRecentLocations_bak.xml &lt;br /&gt;&lt;/li&gt;&lt;li&gt;MyMultiStopLocations_bak.xml &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;There are also two files that appear to be temporary files which were deleted but recoverable, containing xml formatted data:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;MyRecentLocations_New.xml &lt;br /&gt;&lt;/li&gt;&lt;li&gt;MyMultiStopLocations_New.xml&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;All of the above mentioned xml files are parsed very tidily using Microsoft Excel 2007. I use the same program to create an html version of the worksheet after a little tidying up. The longitude and latitude values need to be divided by 100,000. I populate a new column using the formula:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;=HYPERLINK("http://maps.google.co.uk/maps?q="&amp;amp;(K3/100000)&amp;amp;"+"&amp;amp;(L3/100000)&amp;amp;"","Click here to view in Google Maps")&lt;br /&gt;The cell K3 contains the Latitude and L3 the Longitude. The formula creates a clickable hyperlink to the Lat/Long in google maps.&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;There are one or two other files of interest:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;destdata.dat - which contains the address used for the last navigated journey&lt;br /&gt;&lt;/li&gt;&lt;li&gt;gpslog.ini - detailing the location of trip log data&lt;br /&gt;&lt;/li&gt;&lt;li&gt;default_settings.xml -which in the FAVOURITES/ RECENTS/ MULTI-STOP section appears to detail the maximum number of &lt;em&gt;favourites&lt;/em&gt; and &lt;em&gt;recents&lt;/em&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;hex&gt;.pcd - on the unit I examined I could not locate a .pcd file however I understand from &lt;a href="http://www.forensicnavigation.com/" target="_blank"&gt;Andy Sayers&lt;/a&gt; that this file if it exists contains the phonebook from a paired mobile phone&lt;br /&gt;&lt;/hex&gt;&lt;/li&gt;&lt;li&gt;Log001.log - again I did not see this file but if it exists it contains GPS track logs&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;Because we have physical access there is also a possibility of recovering relevant data from unallocated clusters. I located records in unallocated using the keyword &lt;em&gt;&amp;lt;lat&amp;gt; .&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;&lt;lat&gt;&lt;/lat&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://www.forensicnavigation.com/#/downloads/4527959036" target="_blank"&gt;Sat Nav Examination Guidance Notes&lt;/a&gt; (Andy Sayers)&lt;br /&gt;&lt;a href="http://www.navman.com/docs/manuals/navman-s-series-manual-en_gb.pdf" target="_blank"&gt;Navman S-Series (S30, S50, S70 &amp;amp; S90i) User Manual&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-5136841631334215112?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/5136841631334215112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=5136841631334215112' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/5136841631334215112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/5136841631334215112'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/12/navman-s30-satnav-device.html' title='Navman S30 Satnav device'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_QfcS6HZ5Sws/Sx5GmgMmegI/AAAAAAAAAxM/gSXAye1GfQw/s72-c/navman-s-series-manual-en_gb-30-thumb.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-1305435365439476999</id><published>2009-12-07T19:43:00.001Z</published><updated>2009-12-10T22:16:14.245Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Navigo'/><category scheme='http://www.blogger.com/atom/ns#' term='Satnav'/><category scheme='http://www.blogger.com/atom/ns#' term='GPS'/><category scheme='http://www.blogger.com/atom/ns#' term='Binatone'/><title type='text'>Binatone X350 UK&amp;ROI 2nd edition GPS</title><content type='html'>&lt;p style="clear: both"&gt;This device can be purchased very cheaply now from places like Asda and ebuyer. It runs &lt;a href="http://www.astrob.com/en/index/index.asp" target="_blank"&gt;Astrob&lt;/a&gt; Turbodog4 satellite navigation software within a Microsoft WinCE.NET 5.0 Core Version OS. Although I have not examined one I believe a number of Navigo devices run similar software. It has an SD card slot which was unpopulated in the one I looked at. The internal memory can be accessed like many similar devices via &lt;a href="http://www.microsoft.com/windowsmobile/en-us/downloads/microsoft/device-center-download.mspx" target="_blank"&gt;Mobile Device Centre in Vista&lt;/a&gt; which makes available a volume entitled &lt;em&gt;ResidentFlash. &lt;/em&gt;I disable writing to USB devices by modifying the registry (there are many utilities about to do this). Simply paste the text below into a text file, give it a .reg file extension and then execute it and then reboot.&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies]&lt;br /&gt;"WriteProtect"=dword:00000001&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;After copying and creating a logical evidence file of &lt;em&gt;ResidentFlash &lt;/em&gt;I found three notable files within the &lt;em&gt;MobileNavigator &lt;/em&gt;folder:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;RecentDest.dat&lt;br /&gt;&lt;/li&gt;&lt;li&gt;FAV.DAT&lt;br /&gt;&lt;/li&gt;&lt;li&gt;SystemSet.dat&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;&lt;em&gt;RecentDest.dat&lt;/em&gt; stores up to fifty of the recently navigated to locations. These locations are stored in records of 104 bytes in length. The first record starts at the first byte of &lt;em&gt;RecentDest.dat&lt;/em&gt;, so by viewing the file in Encase with the view pane set to hex and dragging the view to show 104 bytes per line (assuming you have twin monitors), it is possible to see all the relevant data. Each location record stores Longitude and Latitude as 8 byte &lt;a href="http://en.wikipedia.org/wiki/Double_precision_floating-point_format" target="_blank"&gt;doubles&lt;/a&gt; which unfortunately Encase does not natively decode. The data interpreter in Winhex can do this. The hex editor 0xED on a mac can also do this but rounds up to fewer decimal places than Winhex. So given a fully populated &lt;em&gt;RecentDest.dat&lt;/em&gt; file you have one hundred doubles to decode. I turned to my friend Oliver Smith over at &lt;a href="http://www.cy4or.co.uk/" target="_blank"&gt;Cy4or&lt;/a&gt; who wrote me an enscript which parses out the records to a csv file. Email me with a brief note about who you are for a copy &lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh4.ggpht.com/_QfcS6HZ5Sws/Sx0ZNuJ80cI/AAAAAAAAAl0/CVWSN3yCV-8/s800/Binatone_GPS_X350II_Manual__Turbo_Dog__-_20080910-1.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh5.ggpht.com/_QfcS6HZ5Sws/Sx0edmXR-tI/AAAAAAAAAmA/XHaGzdsoC2E/s800/Binatone_GPS_X350II_Manual__Turbo_Dog__-_20080910-1-thumb.png" height="240" align="left" width="320" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;Recent Destinations also log the time entered, so very unusually some meaningful time and date information may be extracted. Providing these times have been recorded whilst the device can see satellites they are accurate and stored at the configured time zone. If a destination is entered when the unit can not see the sky and if the battery had been previously discharged it appears that the recorded time and date would be soon after 00:00 hours 1st January 2007.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh5.ggpht.com/_QfcS6HZ5Sws/Sx0efOcvGAI/AAAAAAAAAmM/wmS6UFU4Pk8/s800/Binatone_GPS_X350II_Manual__Turbo_Dog__-_20080910-84.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh5.ggpht.com/_QfcS6HZ5Sws/Sx0eetD1NTI/AAAAAAAAAmI/5agJ3BJLEDo/s800/Binatone_GPS_X350II_Manual__Turbo_Dog__-_20080910-84-thumb.png" height="240" align="left" width="320" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;&lt;br /&gt;I have decoded each 104 byte record as shown in &lt;em&gt;figure 1&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh5.ggpht.com/_QfcS6HZ5Sws/Sx0eg_YUqZI/AAAAAAAAAmU/YXyOCHSuy8c/s800/Screen_shot_2009-12-07_at_14.52.1.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh6.ggpht.com/_QfcS6HZ5Sws/Sx0egEp4d5I/AAAAAAAAAmQ/bmS-gkH8rGg/s800/Screen_shot_2009-12-07_at_14-thumb.52.1.png" height="305" align="left" width="378" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;&lt;em&gt;Figure 1 (click on image for larger version)&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;FAV.DAT&lt;/em&gt; contains user configured Favourites stored in 536 byte records. Once again the Longitude/Latitude are stored as eight byte doubles in the first sixteen bytes of each record.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;SystemSet.dat&lt;/em&gt; appears to store the users Home location and again the Longitude/Latitude are stored as eight byte doubles.&lt;/p&gt;&lt;p style="clear: both"&gt;Within the &lt;em&gt;MobileNavigator&lt;/em&gt; folder there is a folder entitled &lt;em&gt;Trace. &lt;/em&gt;This was empty in the one I looked out however the manual states:&lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;The unit is capable of logging all positioning information received from the GPS satellites during navigation. It then uses this information to draw a track of the route on the map. This enables you to review the route information at a later time.&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;I imagine that should this feature be enabled a file of some sort will be stored in this folder.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh5.ggpht.com/_QfcS6HZ5Sws/Sx1aXtTh5bI/AAAAAAAAAmk/fkDgI0X1Osk/s800/Binatone_GPS_X350II_Manual__Turbo_Dog__-_20080910-2.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh5.ggpht.com/_QfcS6HZ5Sws/Sx1axa0CR7I/AAAAAAAAAmw/RO7Ckksktw4/s800/Binatone_GPS_X350II_Manual__Turbo_Dog__-_20080910-2-thumb.png" height="104" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://binatonegps.com/gps/download/manual/X350II%20User%20Guide%20(Turbo%20Dog)%20-%2020080910.pdf" target="_blank"&gt;http://binatonegps.com/gps/download/manual/X350II%20User%20Guide%20(Turbo%20Dog)%20-%2020080910.pdf&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;a href="http://en.wikipedia.org/wiki/Double_precision_floating-point_format" target="_blank"&gt;http://en.wikipedia.org/wiki/Double_precision_floating-point_format&lt;/a&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-1305435365439476999?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/1305435365439476999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=1305435365439476999' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/1305435365439476999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/1305435365439476999'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/12/binatone-x350-uk-2nd-edition-gps.html' title='Binatone X350 UK&amp;amp;ROI 2nd edition GPS'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_QfcS6HZ5Sws/Sx0edmXR-tI/AAAAAAAAAmA/XHaGzdsoC2E/s72-c/Binatone_GPS_X350II_Manual__Turbo_Dog__-_20080910-1-thumb.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-2320060340374178439</id><published>2009-11-13T09:30:00.000Z</published><updated>2009-12-08T06:33:52.125Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='PlayStation'/><category scheme='http://www.blogger.com/atom/ns#' term='PSP'/><category scheme='http://www.blogger.com/atom/ns#' term='Sony'/><title type='text'>Sony PSP internet history</title><content type='html'>&lt;p style="clear: both"&gt;A recent case resulted from an entry in a compromised web server log. The GET request included the string "Mozilla/4.0 (PSP (PlaySation Portable); 2.00)". Our suspect had used a PSP to do dodgy stuff and the PSP eventually came my way. I looked around for some information but did not find a large amount of information, essentially the most useful items were an &lt;a href="https://support.guidancesoftware.com/forum/showthread.php?t=33057&amp;amp;highlight=PSP" target="_blank"&gt;Encase Message Board post&lt;/a&gt; and &lt;a href="http://www.springerlink.com/content/978-3-642-04154-9" target="_blank"&gt;Chapter 9 of a book entitled Advances in Digital Forensics V&lt;/a&gt; which I read via &lt;a href="http://books.google.com/books?id=3VtsJTyRNpMC&amp;amp;pg=PA119&amp;amp;dq=Forensic+Analysis+Playstation+Portable&amp;amp;ei=73X6Sq2AHqCCygT-7J36Dg&amp;amp;client=safari#v=onepage&amp;amp;q=Forensic%20Analysis%20Playstation%20Portable&amp;amp;f=false" title="" target="_blank"&gt;Google Books&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;Sony PlayStation Portable hand held consoles have an inbuilt wi-fi adaptor and can therefore connect to the internet. The device utilises the &lt;a href="http://en.wikipedia.org/wiki/NetFront" target="_blank"&gt;Netfront browser&lt;/a&gt;. There are a number of different versions and firmware versions. The one I looked at had a label indicating that it was a PSP1001. This &lt;a href="http://www.edepot.com/reviews_sony_psp.html" target="_blank"&gt;site&lt;/a&gt; details the many different types available. A PSP1001 is known as a PSP Fat (as opposed to a PSP Slim). The one I looked had version 4.05 firmware. These type of PSPs have a small amount of internal NAND flash memory and a Memory Stick ProDuo flash media card.&lt;/p&gt;&lt;p style="clear: both"&gt;As far as I can ascertain it is not possible to examine the internal NAND memory of devices beyond 1.5 firmware because you would require hacked firmware and &lt;a href="http://www.pandorabatteryco.com/" target="_blank"&gt;modified hardware&lt;/a&gt; to do it. The browser does store its cache in this area but I believe as a default only 512KB is used for this purpose. Some information can be derived from the internal memory via a manual exam. Essentially then, we are left with the Memory Stick ProDuo flash media card. Our Tableau USB write blocker would not recognise the card I had however I was able to image it using our &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2009/05/helix-imaging-pc.html" target="_blank"&gt;Helix imaging box&lt;/a&gt; and Guymager. The card had a FAT16 file system and was examinable with Encase.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;&lt;strong&gt;Files of interest&lt;/strong&gt;&lt;br /&gt;On the card I looked at only two files were of interest both in the folder \PSP\SYSTEM\BROWSER. &lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;bookmarks.html&lt;/em&gt; contained what you would expect -user created bookmarks&lt;br /&gt;&lt;em&gt;historyv.dat &lt;/em&gt;contained internet history&lt;/p&gt;&lt;p style="clear: both"&gt;Scott Conrad, Carlos Rodriguez, Chris Marberry and Philip Craiger's &lt;a href="http://books.google.com/books?id=3VtsJTyRNpMC&amp;amp;pg=PA119&amp;amp;dq=Forensic+Analysis+Playstation+Portable&amp;amp;ei=73X6Sq2AHqCCygT-7J36Dg&amp;amp;client=safari#v=onepage&amp;amp;q=Forensic%20Analysis%20Playstation%20Portable&amp;amp;f=false" target="_blank"&gt;paper&lt;/a&gt; within &lt;em&gt;Advances in Digital Forensics V &lt;/em&gt;refer to two further files of interest &lt;em&gt;historyi.dat &lt;/em&gt;and &lt;em&gt;historys.dat. &lt;/em&gt;I got my hands on a test PSP1001 with the same firmware as my suspects (4.05) and in testing I was not able to populate these files with any data. The files existed but I was not able to cause details of either Google Searches or user typed URLs to be stored in these files. My suspects card had an unpopulated &lt;em&gt;historyi.dat&lt;/em&gt; file and no &lt;em&gt;historys.dat&lt;/em&gt; file. As noted by &lt;em&gt;Conrad et al &lt;/em&gt;I found in testing that I could only cause writes to &lt;em&gt;historyv.dat&lt;/em&gt; by shutting the browser down gracefully. Simply turning off the PSP without shutting down the browser did not commit that sessions history to &lt;em&gt;historyv.dat&lt;/em&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Structure of historyv.dat&lt;/strong&gt;&lt;br /&gt;The structure of &lt;em&gt;historyv.dat&lt;/em&gt; is discussed by Conrad &lt;em&gt;et al &lt;/em&gt;however they suggest that elements of the file were best decoded by introducing the data into a test PSP for decoding. For example the date of each history entry could be ascertained this way. I would prefer to carry out a completely static examination if possible, not least because on my suspects card I had recovered a number history records in slack space and a manual examination can be a little laborious. I have therefore decoded the records a little bit further as shown below at &lt;em&gt;Figure 2&lt;/em&gt; and &lt;em&gt;Figure 3&lt;/em&gt;. Each &lt;em&gt;historyv.dat&lt;/em&gt; file is headed with 66 bytes of data starting with the string &lt;em&gt;&lt;strong&gt;Ver.01&lt;/strong&gt;. &lt;/em&gt;Within this 66 bytes are two further bits of plain text - &lt;em&gt;&lt;strong&gt;NFPKDDAT&lt;/strong&gt; &lt;/em&gt;and &lt;em&gt;&lt;strong&gt;BrowserVisit&lt;/strong&gt;. &lt;/em&gt;Immediately following &lt;em&gt;BrowserVisit &lt;/em&gt;is the first history record. The most recent record is listed first, the oldest last. Each record can be located using a GREP expression to search for the header - in Encase &lt;strong&gt;\x03\x00\x01\x00 -&lt;/strong&gt;see &lt;em&gt;Figure 1&lt;/em&gt; below. Records can be found in slack space and unallocated clusters.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh5.ggpht.com/_QfcS6HZ5Sws/SvwZzLLw62I/AAAAAAAAAlc/egdUwlU024w/s800/Encase_histoyv_screenshot1.jpg" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh5.ggpht.com/_QfcS6HZ5Sws/Svwbcb3H8_I/AAAAAAAAAlo/HWF2hiUXRFg/s800/Encase_histoyv_screenshot1-thumb.jpg" height="312" align="left" width="379" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;Click on image for larger version&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;Figure 1&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh3.ggpht.com/_QfcS6HZ5Sws/SvuzzLmn9KI/AAAAAAAAAkU/fnFB3ZqmSY4/s800/Record_Decode3.jpg" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh4.ggpht.com/_QfcS6HZ5Sws/Svu4wjDmHbI/AAAAAAAAAlA/aIB92ai_rto/s800/Record_Decode3-thumb1.jpg" height="477" align="left" width="379" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh3.ggpht.com/_QfcS6HZ5Sws/Svuz0EDzzzI/AAAAAAAAAkc/fqfY7XmO2z8/s800/Record_Decode4.jpg" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh6.ggpht.com/_QfcS6HZ5Sws/Svu4xkwsmWI/AAAAAAAAAlI/itBuzDAyU08/s800/Record_Decode4-thumb.jpg" height="426" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;&lt;em&gt;Figure 2&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh6.ggpht.com/_QfcS6HZ5Sws/Svuz2EYibDI/AAAAAAAAAkk/Ek1L0kTtj0s/s800/Example_Records.jpg" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh6.ggpht.com/_QfcS6HZ5Sws/Svu4yzyX9LI/AAAAAAAAAlQ/4E9FnwiMUsU/s800/Example_Records-thumb.jpg" height="460" align="left" width="376" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;br style="clear: both" /&gt;&lt;em&gt;Figure 3&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;A significant addition to the research of Conrad &lt;em&gt;et al&lt;/em&gt; is the decoding of the date for each record. The date is recorded in the two bytes following the URL and is stored Little Endian. In Encase sweep these two bytes and right click, select &lt;em&gt;Go To &lt;/em&gt;and check Little-endian. The value is the number of days since the &lt;a href="http://en.wikipedia.org/wiki/Unix_time" target="_blank"&gt;Unix epoch&lt;/a&gt; (1st January 1970). This &lt;a href="http://www.timeanddate.com/date/dateadd.html" target="_blank"&gt;web site&lt;/a&gt; provides a good date calculator.&lt;br /&gt;&lt;strong&gt;IMPORTANT NOTE&lt;/strong&gt; re dates: the dates stored are in accordance with the PSPs internal clock. The clock resets when the battery is exhausted. With the firmware I looked at the reset date was 1st January 2008. This date is 13879 days from the Unix epoch. I speculate that the average user is unlikely to reset the date each time the battery exhausts, therefore I would expect to see a lot of dates in January 2008.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;References and thanks&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://www.edepot.com/reviews_sony_psp.html" target="_blank"&gt;http://www.edepot.com/reviews_sony_psp.html&lt;/a&gt;&lt;br style="text-decoration: underline;" /&gt;&lt;a href="http://en.wikipedia.org/wiki/PlayStation_Portable#Web_browser" target="_blank"&gt;http://en.wikipedia.org/wiki/PlayStation_Portable#Web_browser&lt;/a&gt;&lt;br /&gt;&lt;a href="http://books.google.com/books?id=3VtsJTyRNpMC&amp;amp;pg=PA119&amp;amp;dq=Forensic+Analysis+Playstation+Portable&amp;amp;ei=73X6Sq2AHqCCygT-7J36Dg&amp;amp;client=safari#v=onepage&amp;amp;q=Forensic%20Analysis%20Playstation%20Portable&amp;amp;f=false" target="_blank"&gt;Forensic Analysis of the Sony Playstation Portable&lt;/a&gt; - Scott Conrad, Carlos Rodriguez, Chris Marberry and Philip Craiger&lt;br /&gt;&lt;a href="https://support.guidancesoftware.com/forum/showthread.php?t=33057&amp;amp;highlight=psp" target="_blank"&gt;https://support.guidancesoftware.com/forum/showthread.php?t=33057&amp;amp;highlight=psp&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;a href="http://www.computerforensicsworld.com/modules.php?name=Forums&amp;amp;file=viewtopic&amp;amp;t=654&amp;amp;highlight=psp" target="_blank"&gt;http://www.computerforensicsworld.com/modules.php?name=Forums&amp;amp;file=viewtopic&amp;amp;t=654&amp;amp;highlight=psp&lt;/a&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Thanks to Pete Lewis-Jones and Simon Maher for their help brain storming the date problem&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-2320060340374178439?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/2320060340374178439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=2320060340374178439' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/2320060340374178439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/2320060340374178439'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/11/sony-psp-internet-history.html' title='Sony PSP internet history'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_QfcS6HZ5Sws/Svwbcb3H8_I/AAAAAAAAAlo/HWF2hiUXRFg/s72-c/Encase_histoyv_screenshot1-thumb.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-9154563981393036814</id><published>2009-11-01T08:44:00.000Z</published><updated>2009-12-08T06:06:52.359Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Garmin'/><category scheme='http://www.blogger.com/atom/ns#' term='Satnav'/><category scheme='http://www.blogger.com/atom/ns#' term='GPS'/><title type='text'>Garmin Streetpilot C510</title><content type='html'>&lt;p style="clear: both"&gt;I &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2009/04/garmin-nuvi-200-sat-nav-device.html" target="_blank"&gt;blogged earlier this year about the Garmin Nüvi 200 Sat Nav device&lt;/a&gt; and I have now had a crack at a Garmin Streetpilot C510.&lt;/p&gt;&lt;p style="clear: both"&gt;The Streetpilot like the Nüvi 200 stores waypoints in a file &lt;em&gt;Current.gpx &lt;/em&gt;found within the &lt;em&gt;Garmin &lt;/em&gt;folder. This folder is accessible when the device is connected to a computer due to the fact that the device is designed to act as a mass storage device. It is probably worth expanding on what a waypoint is. &lt;a href="http://www8.garmin.com/support/faqs/faq.jsp?faq=19" target="_blank"&gt;Garmin's FAQs&lt;/a&gt; define them as &lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;Waypoints may be defined and stored in the unit manually, by taking coordinates for the waypoint from a map or other reference. This can be done before ever leaving home. Or more usually, waypoints may be entered directly by taking a reading with the unit at the location itself, giving it a name, and then saving the point. &lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;Essentially as far as both the Garmin devices discussed here are concerned the waypoints recovered from &lt;em&gt;Current.gpx&lt;/em&gt; are the users &lt;em&gt;favourites&lt;/em&gt; and &lt;em&gt;home&lt;/em&gt; location&lt;em&gt;. &lt;/em&gt;Apologies for teaching granny to suck eggs but it is probably worth stating that waypoints are not &lt;em&gt;&lt;a href="http://www8.garmin.com/support/faqs/faq.jsp?faq=21" target="_blank"&gt;Track Logs&lt;/a&gt;. &lt;/em&gt;Most Streetpilots and Nüvi 200s do not store any tracking information (there is an unsupported hack which allows the modification of some units firmware to store tracking information).&lt;/p&gt;&lt;p style="clear: both"&gt;As commented in my previous posting and within the &lt;a href="http://www.digital-detective.co.uk/cgi-bin/digitalboard/YaBB.pl?num=1193231898" target="_blank"&gt;SatNav forensics forum over at Digital Detective&lt;/a&gt; these Garmin devices do store other data not contained in &lt;em&gt;Current.gpx&lt;/em&gt;. This data is the &lt;em&gt;Recently Found&lt;/em&gt; locations which are effectively the last fifty locations a user chose to navigate to (or at least look at on the device). Evidentially this data may be useful. Up to now a manual exam using something like &lt;a href="http://www.fernico.com/zrt.html" target="_blank"&gt;Fernico ZRT&lt;/a&gt; has been the answer. I have tried out a slightly different methodology.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Suggested Methodology for the examination of Garmin Streetpilot C510&lt;/strong&gt;&lt;br /&gt;(May work with other models)&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;&lt;a href="http://www8.garmin.com/software/USBDrivers_221.exe" target="_blank"&gt;Download Garmin USB drivers&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www8.garmin.com/software/xImage_23.exe" target="_blank"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www8.garmin.com/software/xImage_23.exe" target="_blank"&gt;Download Garmin xImage version 2.3&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.gpsinformation.org/ronh/g7towin.htm" target="_blank"&gt;Download G7toWin&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/li&gt;&lt;li&gt;Install Ximage on your workstation&lt;/li&gt;&lt;li&gt;Turn on Garmin sat nav and press and hold your finger over the onscreen battery symbol for about 10 seconds&lt;/li&gt;&lt;li&gt;This should take you into a hidden diagnostics menu&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh6.ggpht.com/_QfcS6HZ5Sws/Sumzt8Ud1CI/AAAAAAAAAdE/lt7COXcyx50/s800/test1.jpg" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh5.ggpht.com/_QfcS6HZ5Sws/Sum6th9lbAI/AAAAAAAAAd4/drZKr3E3z6E/s800/test1-thumb.jpg" height="240" width="320" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;On your Forensic Examination workstation run the Garmin USB drivers executable and work through to this screen&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh4.ggpht.com/_QfcS6HZ5Sws/Sum2qb0ZItI/AAAAAAAAAdU/ufdtBuIQQog/s800/Garmin_USB_driver_install_screen_1.jpg" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh5.ggpht.com/_QfcS6HZ5Sws/Sum6uKdjbKI/AAAAAAAAAeA/xhIFjyqLcxE/s800/Garmin_USB_driver_install_screen_1-thumb.jpg" height="285" width="380" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;Connect Garmin sat nav to your Forensic Workstation and complete the USB driver installation (the sat nav must be displaying the hidden service mode - if it isn't it will act as a mass storage device)&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh4.ggpht.com/_QfcS6HZ5Sws/Sum2rVU9WrI/AAAAAAAAAdc/nURbWslUOCE/s800/Garmin_USB_driver_install_screen_2.jpg" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh6.ggpht.com/_QfcS6HZ5Sws/Sum6vEoofgI/AAAAAAAAAeI/DI5_wPMgqMI/s800/Garmin_USB_driver_install_screen_2-thumb.jpg" height="328" width="380" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;Run G7toWin on your workstation (it does not need to be installed) and adjust the configuration to allow communication via USB&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh3.ggpht.com/_QfcS6HZ5Sws/Su5_53qt22I/AAAAAAAAAeU/h_KV9z0vOME/s800/g7towinconfig.jpg" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh4.ggpht.com/_QfcS6HZ5Sws/Su6eMrlPOKI/AAAAAAAAAgg/luxguTMdvjE/s800/g7towinconfig-thumb.jpg" height="301" width="380" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;Within G7toWin via the menu bar select &lt;em&gt;GPS/Download from GPS/ All&lt;/em&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;All available waypoints will display&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Via &lt;em&gt;File/Save As&lt;/em&gt; you can save the data to your filetype of choice (e.g. .gpx, .kml, .xml)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;It is possible that one of the fields may contain an illegal character - in my testing the comment field did. I dealt with this in my exported kml and xml files with a decent text editor (PSPad) and the find and replace feature. Applications that support xml and Google Earth are not usually tolerant of any illegal characters/formatting.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;Downloading of the waypoints is now taken care of. Next I want to deal with the &lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;Recently Found &lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;locations. I am going to suggest two approaches, which although relatively simple I have not seen documented elsewhere. The version of the device you are using may dictate which approach you try.&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;&lt;strong&gt;Approach 1&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You should still be at the Diagnostics Menu - press the Exit icon&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Via the main navigation menu select &lt;em&gt;Where to?/ Recently Found&lt;/em&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You should now see the first five&lt;em&gt; Recently Found&lt;/em&gt; locations&lt;br /&gt;&lt;/li&gt;&lt;li&gt;On your Forensics Workstation launch &lt;em&gt;xImage&lt;/em&gt;, your device should appear in the &lt;em&gt;Device&lt;/em&gt; field then click &lt;em&gt;Next&lt;/em&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Select &lt;em&gt;Get Images from the GPS&lt;/em&gt; then click &lt;em&gt;Next&lt;/em&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Set&lt;em&gt; Image Type&lt;/em&gt; to &lt;em&gt;Screen Shot&lt;/em&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Clicking Next will allow you to save a screen shot of the currently displayed screen on the device&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Using this method you can quickly screenshot all the screens you would have photographed in a manual exam, after each screenshot click &lt;em&gt;back&lt;/em&gt; to prepare for the next one&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh6.ggpht.com/_QfcS6HZ5Sws/Su6Ym3To0KI/AAAAAAAAAe8/i2zkyIA5Flg/s800/ximage_output2.jpg" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh3.ggpht.com/_QfcS6HZ5Sws/Su6eOAcw7uI/AAAAAAAAAgs/cwLZIo0ALnM/s800/ximage_output2-thumb.jpg" height="286" width="378" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;/a&gt;Approach 2 is more invasive, however I think principal 2 of ACPO guidelines applies.&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;&lt;strong&gt;Approach 2&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You don't initially have to have your device connected to your workstation for this to work&lt;br /&gt;&lt;/li&gt;&lt;li&gt;On the device select &lt;em&gt;Settings/ Display&lt;/em&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In the Display menu enable &lt;em&gt;Screen Shot&lt;/em&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;This will cause a small camera icon to appear in the top right of the display&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Pressing this icon will cause a screen shot to be saved into the &lt;em&gt;Garmin/scrn&lt;/em&gt; folder upon the device&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Screen shot all the screens you would have photographed in a manual exam&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Connect device to workstation as mass storage device and cut and paste screenshots from it&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh3.ggpht.com/_QfcS6HZ5Sws/Su6Ynna2j1I/AAAAAAAAAfE/NjhKRZInldI/s800/camera_iconj.jpg" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh5.ggpht.com/_QfcS6HZ5Sws/Su6ePFBKlxI/AAAAAAAAAg0/S-uHN7e6gIg/s800/camera_iconj-thumb.jpg" height="240" width="320" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh4.ggpht.com/_QfcS6HZ5Sws/Su6asgfrq8I/AAAAAAAAAf8/gDj2u8g67p8/s800/scrn_folder_screenshot.jpg" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh5.ggpht.com/_QfcS6HZ5Sws/Su6eP-yv_sI/AAAAAAAAAg8/h6Pb255ZUlo/s800/scrn_folder_screenshot-thumb.jpg" height="240" width="346" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;/a&gt;&lt;strong&gt;UPDATE RE GARMIN Nüvi 310&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://www.blogger.com/profile/05769447299537779948" target="_blank"&gt;Artemus&lt;/a&gt; has been looking at a Garmin Nüvi 310. He tried &lt;em&gt;Approach 1&lt;/em&gt; above and found that to enter the diagnostics mode he had to push and hold the top right of the display (as opposed to the battery symbol). HOWEVER he then encountered a message asking if he wished to delete all user data, so I guess for Nüvi 310 &lt;em&gt;Approach 1&lt;/em&gt; is a no go. So he tried &lt;em&gt;Approach 2&lt;/em&gt;. He enabled the Screen Shot feature however on this device no camera icon appears. Screen shots are created by pressing the power button. Screen shots are saved into a folder entitled &lt;em&gt;Screenshot&lt;/em&gt; on the media card.&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-9154563981393036814?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/9154563981393036814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=9154563981393036814' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/9154563981393036814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/9154563981393036814'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/11/garmin-streetpilot-c510.html' title='Garmin Streetpilot C510'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_QfcS6HZ5Sws/Sum6th9lbAI/AAAAAAAAAd4/drZKr3E3z6E/s72-c/test1-thumb.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-9188710647363918838</id><published>2009-10-26T10:00:00.000Z</published><updated>2009-12-08T06:28:44.216Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Imaging'/><title type='text'>TIM</title><content type='html'>&lt;p style="clear: both"&gt;TIM is an acronym for Tableau Imager which unsurprisingly is new imaging software developed by Tableau. Tableau promise &lt;em&gt;astounding&lt;/em&gt; imaging speeds. Apparently it will be available in beta form anytime soon. Given the quality of the Tableau write blockers I think this software is definitely worth watching out for. The latest info can be found &lt;a href="http://www.tableau.com/index.php?pageid=products&amp;amp;model=TIM" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-9188710647363918838?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/9188710647363918838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=9188710647363918838' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/9188710647363918838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/9188710647363918838'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/10/tim.html' title='TIM'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-2984060798213094805</id><published>2009-10-11T07:26:00.001+01:00</published><updated>2009-12-08T06:36:53.676Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Triage'/><category scheme='http://www.blogger.com/atom/ns#' term='Enscript'/><category scheme='http://www.blogger.com/atom/ns#' term='Encase'/><title type='text'>Video triage revisited</title><content type='html'>&lt;p style="clear: both"&gt;Back in &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2009/07/video-triage.html" target="_blank"&gt;July 2009 I blogged&lt;/a&gt; about the potential of video triage. I was commenting on its effectiveness and had used a program written by John Douglas to explore what was possible. Mark Woan added a &lt;a href="https://www.blogger.com/comment.g?blogID=5057815281194312844&amp;amp;postID=3171617691720486632" target="_blank"&gt;very interesting comment&lt;/a&gt; to that post, introducing a program he had written - &lt;a href="http://www.woanware.co.uk/forensic-video-triage-fvt/" target="_blank"&gt;Forensic Video Triage&lt;/a&gt;. I have now tried out a series of enscripts written by Oliver Höpli which aim to provide the same functionality as both John and Mark's programs.&lt;/p&gt;&lt;p style="clear: both"&gt;Essentially all three approaches utilise a third party video playing and manipulation program to create and store thumbnails of frames at set intervals throughout a video clip. The investigator can then triage the video clip by reviewing the thumbnails as opposed to playing the video. The gallery feature in Encase for example makes reviewing the thumbnails a considerably quicker experience than playing the videos. &lt;/p&gt;&lt;p style="clear: both"&gt; John's program utilises &lt;a href="http://www.videolan.org/vlc/" target="_blank"&gt;VLC&lt;/a&gt;, Mark's uses &lt;a href="http://ffmpeg.org/" target="_blank"&gt;ffmpeg&lt;/a&gt; and Oliver's enscript calls upon &lt;a href="http://www.mplayerhq.hu/design7/info.html" target="_blank"&gt;mplayer&lt;/a&gt; for thumbnail creation. Each of these video utilities have inbuilt codecs and their capabilities may vary - in other words a video clip may play with one and not the others.&lt;/p&gt;&lt;p style="clear: both"&gt;Oliver Höpli has integrated the process much more closely with Encase with his suite of enscripts, and for me this can only be a good thing. If you are an Encase shop the pre-processing is considerably reduced and the whole process is more seamless leading to greater productivity. The main enscript runs across selected (as in blue checked) movie files within your case and parses out thumbnails into a logical evidence file. Another enscript creates a folder structure within the Encase bookmarks tab based on the contents of the logical evidence file. Each video clip has a folder within bookmarks making it an easy process to review the thumbnails. &lt;/p&gt;&lt;p style="clear: both"&gt;To get it all working the main enscript needs a little configuration which I found a little fiddly. Ahead of time you need to install a version of mplayer suitable for Windows, the installer I used was MPUI.2009-07-24.Full-Package.exe. This appears to have been superseded by MPUI.2009-10-12.Full-Package.exe which is available &lt;a href="http://mulder.dummwiedeutsch.de/home/?page=projects#mplayer" target="_blank"&gt;here&lt;/a&gt; (at least today - download locations seem to change quite often). Oliver directs you to the standard mplayer site which I found a bit difficult to navigate. Once mplayer is installed you need to configure the main enscript by editing it to include the location of mplayer.exe and the location of a suitably large temp directory. On my box the lines of the enscript are (note the double \\)&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;////////////////////////////////////////// Configuration ///////////////////////////&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt; //Path to MPClassic.exe&lt;br /&gt;mpclassic = "C:\\Program Files (x86)\\MPlayer for Windows\\mplayer";&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt; //Tempfolder which will be used to extract the movies and create the thumbnails&lt;br /&gt;expDir = "C:\\Temp";&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt; //time interlace between to frames&lt;br /&gt;//films under 1 minute&lt;br /&gt;OneU = 5;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt; //films between 1 and 5 minutes&lt;br /&gt;FiveU = 10;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt; //films between 5 and 30 minutes&lt;br /&gt;BetweenFiveAndThirty = 20;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt; //films over 30 minutes&lt;br /&gt;ThirtyU = 30;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;///////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="https://support.guidancesoftware.com/forum/downloads.php?do=file&amp;amp;id=767" target="_blank"&gt;Oliver's enscript&lt;/a&gt; can be found in the Guidance Software Download Center and comes with a Readme which needs reading.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-2984060798213094805?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/2984060798213094805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=2984060798213094805' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/2984060798213094805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/2984060798213094805'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/10/video-triage-revisited.html' title='Video triage revisited'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-1389725099947280652</id><published>2009-09-20T11:42:00.000+01:00</published><updated>2009-09-20T11:45:40.090+01:00</updated><title type='text'>Windows Photo Gallery</title><content type='html'>&lt;p style="clear: both"&gt;&lt;a href="http://www.microsoft.com/windows/windows-vista/features/photo-gallery.aspx" target="_blank"&gt;Windows Photo Gallery&lt;/a&gt; is built in to all Vista editions and allows the management of photographs and other pictures together with the ability to carry out a number of basic photo editing tasks. Two forensic artefacts of this program are discussed in this post.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Original Images Folder&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;The program allows users to revert to the original picture with one click should they not like the results of their editing. This feature provides investigators with a very useful artefact. When a picture has been edited the original unmodified version is stored at &lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;%LOCALAPPDATA%\Microsoft\Windows Photo Gallery\Original Images&lt;/em&gt; &lt;/p&gt;&lt;p style="clear: both"&gt;The file name of this original unmodified version is renamed - the &lt;a href="http://support.microsoft.com/default.aspx/kb/944370"&gt;relevant Microsoft Knowledge Base Article&lt;/a&gt; details the file name construction &lt;/p&gt;&lt;blockquote style="clear: both"&gt;&lt;p&gt;When the original unmodified version of the image is saved, the image file is renamed by using a combination of a unique ID and the original file name. The unique ID is determined by the&lt;strong&gt;System.Image.ImageID&lt;/strong&gt; file property. If there is no &lt;strong&gt;System.Image.ImageID&lt;/strong&gt; file property value, a GUID is created. The following is the new file name construction: &lt;br /&gt; '{' + unique ID + '}' + '-' + file name&lt;br /&gt;The following is an example of a renamed original file:&lt;br /&gt;{198EB054-44E6-441e-87C8-9B29C5198DE6}-image1.jpg &lt;/p&gt;&lt;/blockquote&gt;&lt;p style="clear: both"&gt;To example this I have edited and renamed the Windows sample picture Toro-toucan.jpg (quite apt considering the &lt;a href="http://www2.guinness.com/en-ie/Pages/250-arthurs_day_d.aspx"&gt;forthcoming Arthur's day&lt;/a&gt;) using Windows Photo Gallery&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh5.ggpht.com/_QfcS6HZ5Sws/SrXpYEfTy0I/AAAAAAAAAYs/IenGAO2oDOA/s800/Screen_shot_2009-09-20_at_09-full.00.30.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh4.ggpht.com/_QfcS6HZ5Sws/SrYHGX90XCI/AAAAAAAAAco/Tuo3kBRiR-M/s800/Screen_shot_2009-09-20_at_09-thumb.00.30.png" height="372" width="380" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Original Images folder is created the first time a picture is edited with the application and is a &lt;em&gt;hidden&lt;/em&gt; folder. From a forensic point of view we might need to identify the edited picture which may have been renamed. We can locate the edited picture by searching for the unique ID referred to above. Essentially take the original file name:&lt;br /&gt; {1F7BA35C-33F2-499E-92A1-0FBE9477C8CA}-Toco Toucan in my example)&lt;/p&gt;&lt;p style="clear: both"&gt;and strip it down to &lt;/p&gt;&lt;p style="clear: both"&gt;1F7BA35C33F2499E92A10FBE9477C8CA&lt;/p&gt;&lt;p style="clear: both"&gt;This value is embedded within metadata stored within the edited file known as an XMP Message block and also in one further location. Using FTK Imager we can see this value stored in the two locations within the edited file (click on screenshots to see a larger version)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh4.ggpht.com/_QfcS6HZ5Sws/SrXyDskcV7I/AAAAAAAAAZU/8Xw48U1z4AE/s800/Screen_shot_2009-09-20_at_09.47.2.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh5.ggpht.com/_QfcS6HZ5Sws/SrYHIQGpoRI/AAAAAAAAAcw/pDIE-NDNqJk/s800/Screen_shot_2009-09-20_at_09-thumb.47.2.png" height="181" width="378" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;/a&gt;&lt;u&gt;&lt;/u&gt;&lt;a href="http://support.microsoft.com/default.aspx/kb/944370" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh4.ggpht.com/_QfcS6HZ5Sws/SrXyGh9obKI/AAAAAAAAAZc/NC_UGnXtUqI/s800/Screen_shot_2009-09-20_at_10.11.29.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh4.ggpht.com/_QfcS6HZ5Sws/SrYHKmSDNNI/AAAAAAAAAc4/77rwQfNYhJE/s800/Screen_shot_2009-09-20_at_10-thumb.11.29.png" height="285" width="380" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;/a&gt;In the second screenshot part of the XMP message block can be seen. The editing application is also detailed.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Pictures PD4&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Windows Photo Gallery stores metadata about the pictures indexed by it in a database file &lt;em&gt;Pictures.PD4&lt;/em&gt; at the location &lt;br /&gt;&lt;br /&gt;&lt;em&gt;C:\Users\YourUser\AppData\Local\Microsoft\Windows Photo Gallery&lt;/em&gt;. &lt;/p&gt;&lt;p style="clear: both"&gt;Tim Coakley's Simple Carver Suite contains a program &lt;a href="http://www.simplecarver.com/tool.php?toolname=WPG%20Viewer"&gt;Windows Photo Gallery Viewer&lt;/a&gt; to parse this file. I have found that substituting a test Pictures.PD4 file (in a Vista VM lets say) with your suspects Pictures.PD4 file can produce some meaningful results. I found that the best results can be achieved when the test Windows Photo Gallery is set to display &lt;em&gt;tiles&lt;/em&gt; view. Although a blog discussing the transfer of &lt;em&gt;Pictures.PD4&lt;/em&gt; files from machine to machine suggests that the test machines Volume Serial Number needs to match that of the suspects. This can be done with the Windows Sysinternals utility &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb897436.aspx"&gt;Volume ID v2.0&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://support.microsoft.com/default.aspx/kb/944370" style="text-decoration: none;" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://support.microsoft.com/default.aspx/kb/944370" style="text-decoration: none;" target="_blank"&gt;http://support.microsoft.com/default.aspx/kb/944370&lt;/a&gt;&lt;br style="text-decoration: underline;" /&gt;&lt;a href="http://blogs.msdn.com/pix/archive/2006/08/16/702780.aspx" target="_blank"&gt;http://blogs.msdn.com/pix/archive/2006/08/16/702780.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.adobe.com/devnet/xmp/pdfs/XMPSpecificationPart3.pdf"&gt;http://www.adobe.com/devnet/xmp/pdfs/XMPSpecificationPart3.pdf&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;a href="http://aaron-kelley.net/blog/2008/03/migrating-vistas-windows-photo-gallery-database/"&gt;http://aaron-kelley.net/blog/2008/03/migrating-vistas-windows-photo-gallery-database/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-1389725099947280652?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/1389725099947280652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=1389725099947280652' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/1389725099947280652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/1389725099947280652'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/09/windows-photo-gallery.html' title='Windows Photo Gallery'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_QfcS6HZ5Sws/SrYHGX90XCI/AAAAAAAAAco/Tuo3kBRiR-M/s72-c/Screen_shot_2009-09-20_at_09-thumb.00.30.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-6686698622275353733</id><published>2009-08-17T19:59:00.001+01:00</published><updated>2010-01-13T19:28:19.875Z</updated><title type='text'>Vista Volume Shadow Copy issues</title><content type='html'>&lt;div style="clear: both;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Shadow_Copy" target="_blank"&gt;Volume shadow copies&lt;/a&gt; in Vista are often the elephant sat in the corner in many cases. We know they exist and we know they can contain lots of data, but we often choose to ignore them.&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;A recent case required some keyword searches and an examination of picture files. A the completion of the keyword search most of the hits were within files with names similar to&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;em&gt;{bab9c293-d150-12dc-a44f-021d253da909}{3708876a-d176-4f38-b7bb-05036c6bb821}&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;The view pane within Encase 6.14 displayed the contents in a nice light blue colour which I now know is a new feature in 6.14 to indicate the contents of uninitialised files. The files were all located within the &lt;em&gt;System Volume Information&lt;/em&gt; folder on the root of the volume and are the Vista Volume Shadow Copies. By default 15% of the capacity of the volume is allocated by Vista to store these copies. The C4P graphics extractor enscript carved most of the notable pictures out shadow copies also.&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;At this stage I have known examiners report their findings alluding to the fact that that the notable artefacts are within the file {bab9c293-d150-12dc-a44f-021d253da909}{3708876a-d176-4f38-b7bb-05036c6bb821}. In most cases I think you need to drill down further. In order to do this I mounted my Vista image with Encase PDE and used &lt;a href="http://liveview.sourceforge.net/" target="_blank"&gt;Liveview 0.7b&lt;/a&gt; to create a working VM using VMWare Workstation 6. Having logged into my suspects account I ran a command prompt as administrator and entered the command &lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;em&gt;vssadmin list shadows /for=c:\&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;This provided a nice list of available shadow copies. Having selected one I entered the command (updated 13th Jan 2010)&lt;br /&gt;&lt;br /&gt;&lt;em&gt;mklink /d c:\shadow_copy7 \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy7\&lt;/em&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;This created a symbolic link in the root of C which in Windows Explorer at any rate appears exactly like a shortcut to a folder. Clicking on it produced the error message shown below&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;a class="image-link" href="http://lh4.ggpht.com/_QfcS6HZ5Sws/Snromfn8PLI/AAAAAAAAAYE/igSmeHdw5mA/s800/2009-08-04_075702.jpg"&gt;&lt;img class="linked-to-original" height="143" src="http://lh4.ggpht.com/_QfcS6HZ5Sws/SnrtonF_mzI/AAAAAAAAAYg/vYM4ZAyMEnk/s800/2009-08-04_075702-thumb.jpg" style="display: block; margin: 0 auto 10px; text-align: center;" width="380" /&gt;&lt;/a&gt;I believed this error is probably generated by a permissions issue (SEE UPDATE BELOW), however I was not able to overcome it and &lt;a href="http://blogs.sans.org/computer-forensics/2008/10/10/shadow-forensics/" target="_blank"&gt;Rob Lee over at Sans Computer Forensics&lt;/a&gt; suggests this methodology does not work. I think Jimmy Weg however has had some success with a program written by &lt;a href="http://www.dmares.com/maresware/whats_new.htm#VSS" target="_blank"&gt;Dan Mares - VSS.exe.&lt;/a&gt; I therefore turned to &lt;a href="http://www.shadowexplorer.com/" target="_blank"&gt;ShadowExplorer&lt;/a&gt; version 0.4.382.0. This program allows the user to view the contents of Volume Shadow Copies that exist on any volumes within the installed system. The contents are displayed in an Explorer like view allowing the user to export out any file or folder to an export directory. I exported the User profile I was interested in to an export directory. Unfortunately it seems that only the Last Written date is preserved in this process and all other time stamps are tripped. I then tried to copy this export directory out of the VM to my workstation and encountered errors (probably due to files within the profile with illegal windows file names). To overcome this I zipped up the export directory and copied the zip out of the VM. Once unpacked I then added the exported folders into Encase as single files and created logical evidence files from them.&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;Having done this I was able to resolve most of my keyword search hits and pictures to actual files as opposed to being simply within a volume shadow copy.&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;span style="color: red;"&gt;&lt;b&gt;UPDATE 13th January 2010&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;span style="color: red;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;The issue I had with the &lt;i&gt;mklink&lt;/i&gt; command was due to a missing &lt;/span&gt;&lt;span style="color: red;"&gt;\ &lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&amp;nbsp;&lt;span style="color: black;"&gt;but not the trailing slash referred to in some comments below. &amp;nbsp;The correct command is&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;mklink /d c:\shadow_copy7 \\?&lt;b&gt;&lt;span style="color: red;"&gt;\&lt;/span&gt;&lt;/b&gt;GLOBALROOT\Device\HarddiskVolumeShadowCopy7\&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;span style="color: red;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/adioltean/archive/2008/02/28/a-simple-way-to-access-shadow-copies-in-vista.aspx" target="_blank"&gt;http://blogs.msdn.com/adioltean/archive/2008/02/28/a-simple-way-to-access-shadow-copies-in-vista.aspx&lt;/a&gt;&lt;br style="text-decoration: underline;" /&gt;&lt;a href="http://blogs.sans.org/computer-forensics/2008/10/10/shadow-forensics/" target="_blank"&gt;http://blogs.sans.org/computer-forensics/2008/10/10/shadow-forensics/&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-6686698622275353733?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/6686698622275353733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=6686698622275353733' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/6686698622275353733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/6686698622275353733'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/08/vista-volume-shadow-copy-issues.html' title='Vista Volume Shadow Copy issues'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_QfcS6HZ5Sws/SnrtonF_mzI/AAAAAAAAAYg/vYM4ZAyMEnk/s72-c/2009-08-04_075702-thumb.jpg' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-7769850941376253151</id><published>2009-08-02T18:02:00.000+01:00</published><updated>2009-09-15T15:43:39.853+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Enscript'/><title type='text'>You wait all day for a bus then two come along at once...</title><content type='html'>&lt;p style="clear: both"&gt;Probably not an entirely accurate title but I came across two enscripts the other day both of which are aimed at quickly triaging the results of a comprehensive Internet History search. Users of this functionality within Encase version 6 will know that often you can be faced with reviewing hundreds of thousands of entries on the records tab. Many times all you need is evidence of user inputted search terms. There are conditions available to start sorting the wheat from the chaff however it is difficult for these conditions to be totally focussed due to the variation in url formation. This is where both enscripts come in as they are both designed to parse the actual search term used from a variety of search engine urls.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;&lt;a href="https://support.guidancesoftware.com/forum/downloads.php?do=file&amp;amp;id=738" target="_blank"&gt;Searchterms V 1.1&lt;/a&gt;&lt;/em&gt; parses out the search term used and where possible the time and date it was carried out into note bookmarks. The enscript has been written to support a claimed 145 separate search engines.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;&lt;a href="https://support.guidancesoftware.com/forum/downloads.php?do=file&amp;amp;id=743" title="" target="_blank"&gt;Internet Search Term Finder&lt;/a&gt; &lt;/em&gt;parses out unique search terms to Log Record bookmarks and stores the term along with its associated url. The script is in fact an Enpack so it is difficult to determine exactly how it works, however it seems to base its search on elements from the query url. A neat feature is that it is configurable, allowing the addition of a new prefix (to the query string) to cater for a different or new search engine.&lt;/p&gt;&lt;p style="clear: both"&gt;Within an XP Pro SP3 VM I carried out a series of searches utilising the Firefox v3.0.11, Internet Explorer v8, Opera v9.64 and Safari v4.0.2 browsers. I ran the Search for internet history Comprehensive search option within Encase 6.14 and established that all my searches had been parsed into the records tab, with the exception of those carried out with Safari v4.0.2. It turns out that Encase 6.14 does not support parsing internet history from this version of Safari.&lt;/p&gt;&lt;p style="clear: both"&gt;I then ran both Enscripts and can report that both parsed out my test search terms from the records tab. The results can be viewed within bookmarks. For me the output of the &lt;em&gt;Internet Search Term Finder &lt;/em&gt;is preferable and it usefully creates a Log Records bookmark which allows the easy export of results into a spreadsheet. Both successfully hit the spot in respect to users quickly reviewing search terms within internet history.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Update 15 Sept 2009&lt;/strong&gt;&lt;br /&gt;Dan Fenwick has kindly updated his &lt;a href="https://support.guidancesoftware.com/forum/downloads.php?do=cat&amp;amp;id=121" target="_blank"&gt;Internet Search Term Finder&lt;/a&gt; (to v1.1.1). The script now can remove duplicates and separates the results by device. Even more useful - thanks Dan.&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-7769850941376253151?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/7769850941376253151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=7769850941376253151' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/7769850941376253151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/7769850941376253151'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/08/you-wait-all-day-for-bus-then-two-come.html' title='You wait all day for a bus then two come along at once...'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-2904115358090079478</id><published>2009-07-22T06:29:00.000+01:00</published><updated>2009-07-22T06:29:39.794+01:00</updated><title type='text'>Link Files within System Restore Points</title><content type='html'>&lt;p style="clear: both"&gt;A recent case involved the download of a contraband file and I was asked to establish what happened &lt;em&gt;just before&lt;/em&gt; the download in order to try and establish who was responsible. This scenario is fairly commonplace and I usually start with a timeline analysis of the file system activity around the event in question. An invaluable enscript for this is Geoff Black's &lt;a href="http://www.geoffblack.com/forensics/" target="_blank"&gt;Timeline Report&lt;/a&gt; which can also be found within the Guidance Software &lt;a href="https://support.guidancesoftware.com/forum/downloads.php?do=file&amp;amp;id=473" target="_blank"&gt;Enscript Resource center&lt;/a&gt;. The html report produced by this script is particularly cool.&lt;/p&gt;&lt;p style="clear: both"&gt;In my case my analysis showed there were a number of link files in a number of system restore points all created at a time and date just before the download. They were all named in the form &lt;em&gt;A000XXXX.lnk (xxxx being a variable number) &lt;/em&gt;and I could see from a rough and ready examination of the data that they all pointed to one particular file saved on the users desktop. As these link files were stored within restore points the first hurdle to overcome was to establish the link files original name and path. This information is stored within the changelog files of each respective restore point. Manually searching through this file for the restore point file name (e.g. &lt;em&gt;A000XXXX.lnk&lt;/em&gt;) will reveal the files original path. There used to be an enscript for parsing the changelog files but it was written for version 5, however I was able to track down &lt;a href="http://www.paulbobby.com/temp/ChangeLog-Parser.EnScript" target="_blank"&gt;a version that worked in version 6&lt;/a&gt; at Paul Bobby's excellent blog/web site (this enscript can also be found within the Guidance Software &lt;a href="https://support.guidancesoftware.com/forum/downloads.php?do=file&amp;amp;id=549" target="_blank"&gt;Enscript Resource Center&lt;/a&gt;). The changelog files contain a lot of information and all I really needed was the original filename and path - the scripts output may be a little bit of an overkill*. Another utility out there is the &lt;a href="http://www.mandiant.com/software/mrpa.htm" target="_blank"&gt;Mandiant Restore Point Analyzer&lt;/a&gt;. I used this utility to determine the original paths and file names.&lt;/p&gt;&lt;p style="clear: both"&gt;All of the link files related to one link file stored within a users Recent folder. In my case the file the link file linked to was created and stored upon the desktop, thus causing the initial link file to be created. Over a period the target file was opened and additional information written into it, thus causing the link file to be updated. Harry Parsonage's &lt;a href="http://computerforensics.parsonage.co.uk/downloads/TheMeaningofLIFE.pdf" target="_blank"&gt;paper on link files&lt;/a&gt; illuminates this further.&lt;br /&gt;&lt;br /&gt;I copied the link files out of my image and loaded them into &lt;a href="http://www.sandersonforensics.com/content.asp?page=535" target="_blank"&gt;Sanderson Forensics Linkalyzer&lt;/a&gt;. This program decodes and displays the contents of link files into a grid much like a spreadsheet ( I was going to post a screenshot but sanitising the contents became too much of a pain) and very quickly allowed me to see that the target file was being regularly accessed and modified. Because the target file size is also stored within the link file I could also see that the file size was growing over time. The program produces good reports and has many other abilities beyond the scope of this blog post, but in short I thoroughly recommend it. &lt;/p&gt;&lt;p style="clear: both"&gt;Now as far as my case was concerned the target file was clearly linked to the suspect and it proved worthwhile delving into those restore point link files.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://computerforensics.parsonage.co.uk/downloads/TheMeaningofLIFE.pdf" target="_blank"&gt;http://computerforensics.parsonage.co.uk/downloads/TheMeaningofLIFE.pdf&lt;/a&gt;&lt;br style="text-decoration: underline;" /&gt;&lt;a href="http://mandiant.com/documents/MRPA_WhitePaper.pdf" target="_blank"&gt;Forensic Analysis of System Restore Points in Microsoft Windows XP&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;*&lt;/strong&gt;&lt;em&gt;Now what would be really useful is an enscript that simply parsed out the original path and filename of only all user selected (blue checked) files sitting in restore points. I would envisage the output to be a three column csv file - Current Filename, Original Path and Filename, Restore Point Creation Date.&lt;/em&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-2904115358090079478?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/2904115358090079478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=2904115358090079478' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/2904115358090079478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/2904115358090079478'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/07/link-files-within-system-restore-points.html' title='Link Files within System Restore Points'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-3171617691720486632</id><published>2009-07-10T14:45:00.000+01:00</published><updated>2009-12-08T06:37:05.452Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Triage'/><title type='text'>Video Triage</title><content type='html'>&lt;p style="clear: both"&gt;Paul Sanderson's &lt;a href="http://www.sandersonforensics.com/content.asp?page=45" target="_blank"&gt;VidReport&lt;/a&gt; has been referred to here and there lately. C4M also is regularly brought up in conversations I have with people (such an interesting life I lead). Triage is certainly the flavour of the month right now. So I thought it worth writing a few lines about my recent experiences of triaging videos.&lt;/p&gt;&lt;p style="clear: both"&gt;I have often voiced the opinion that reviewing a couple of hundred video files in a case is not that bigger a deal and on that basis I have not been too keen on using C4M. Anyhow I've just had a case with about 170 video clips to review and thought it would be a good case to try out the video triage approach. My normal approach is to use VLC as a file viewer in Encase to preview each video. This took about an hour and a half (some of the videos were quite good ;-) ).&lt;/p&gt;&lt;p style="clear: both"&gt;I then used John Douglas's video triage program (which I think he supplies free to LE) to review the same video clips. To use this program you copy out the clips you wish to review and point the program at the folder containing them. It processes each clip by taking a screen capture at a configurable interval and putting each screen capture into a subfolder named after the videos file name. Once the program has processed all the clips you will have a sub folder for each one, containing the screen captures. I then simply dragged the folders into Encase as single files and previewed the contents of each folder in gallery view. I previewed all the clips in fifteen minutes. My scepticism of video triage was clearly unfounded.&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-3171617691720486632?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/3171617691720486632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=3171617691720486632' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/3171617691720486632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/3171617691720486632'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/07/video-triage.html' title='Video Triage'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-2493816221112863684</id><published>2009-06-18T11:09:00.000+01:00</published><updated>2009-06-18T11:09:42.334+01:00</updated><title type='text'>Bing in-line video previews</title><content type='html'>&lt;p style="clear: both"&gt;The new Microsoft search engine &lt;a href="http://www.discoverbing.co.uk/" target="_blank"&gt;Bing&lt;/a&gt; has been in the news lately.&lt;/p&gt;&lt;p style="clear: both"&gt;One of the facilities it provides is a &lt;a href="http://www.bing.com/?scope=video" target="_blank"&gt;video search&lt;/a&gt; which in itself is old hat, however the results page features in-line video previews. A user can turn safe search off and perform a search which results in a screen of thumbnails of the located videos. Hovering the mouse over a thumbnail results in a short preview of the video being played within the thumbnail.&lt;/p&gt;&lt;p style="clear: both"&gt;The thumbnail videos are cached as FLV (flash video) files however the interesting feature is that the URL host of the flv files in my early tests was &lt;em&gt;ts3.images.live.com&lt;/em&gt;. The ts3 part was variable. Microsoft are processing the video using &lt;a href="http://www.bing.com/community/blogs/search/archive/2009/06/04/smart-motion-preview-and-safesearch.aspx" target="_blank"&gt;Smart Motion Preview&lt;/a&gt; technology producing effectively a trailer of the most relevant parts. Microsoft on or about 12th June 2009 began to &lt;a href="http://www.bing.com/community/blogs/search/archive/2009/06/12/safe-search-update.aspx" target="_blank"&gt;serve all explicit video smart motion previews&lt;/a&gt; from &lt;em&gt;ts4.explicit.bing.net&lt;/em&gt;. The ts4 part is variable.&lt;/p&gt;&lt;p style="clear: both"&gt;These in-line video previews allow the viewing of contraband material without leaving a significant footprint. At least for Bing the search query is saved within the browsers internet history and the smart motion preview is cached as a FLV file with the word &lt;em&gt;explicit&lt;/em&gt; helpfully added into the cached items url. &lt;/p&gt;&lt;p style="clear: both"&gt;The &lt;a href="http://www.ask.com/?tool=vid&amp;amp;o=312&amp;amp;l=dir" target="_blank"&gt;video search at ask.com&lt;/a&gt; also provides in-line video previews however these previews seem to be streamed - another kettle of fish altogether!&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-2493816221112863684?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/2493816221112863684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=2493816221112863684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/2493816221112863684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/2493816221112863684'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/06/bing-in-line-video-previews.html' title='Bing in-line video previews'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-8584538418453330542</id><published>2009-05-29T11:03:00.000+01:00</published><updated>2009-12-08T06:43:16.676Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mac OSX'/><title type='text'>USB Prober</title><content type='html'>&lt;p style="clear: both"&gt;From time to time the subject of linking USB flash drives to a particular PC crops up. A week or so ago I saw a &lt;a href="https://support.guidancesoftware.com/forum/showthread.php?t=35315" target="_blank"&gt;post&lt;/a&gt; on the Guidance boards touching on this subject and chipped in with a &lt;a href="http://scissec.scis.ecu.edu.au/conference_proceedings/2007/forensics/23_Luo_Tracing_USB_Device_artefacts_on_Windows_XP.pdf" target="_blank"&gt;link to a paper&lt;/a&gt; referencing Harlan Carvey's original research in this area. The nub of this issue is that many USB flash drives have a unique device serial number which is recorded into the registry of Windows boxes that have hosted said flash drive. &lt;/p&gt;&lt;p style="clear: both"&gt;When investigating this issue establishing a USB flash drives device serial number may be achieved by utilising a utility such as UVCView. In our lab we use the &lt;a href="http://www.tableau.com/index.php?pageid=products&amp;amp;model=T8" target="_blank"&gt;Tableau T8 USB write blocker&lt;/a&gt; to do this. When checking out the subject again prior to posting to the thread on the Guidance boards referred to above I discovered that my Mac Book Pro also has a utility that can establish a USB flash drives device serial number. The utility is an application called USB Prober which is installed as part of the XCode developer tools (which can be found on the separate DVD along with the Mac OS disc for those that have a Mac).&lt;/p&gt;&lt;p style="clear: both"&gt;To use USB Prober for this purpose the Mac needs to configured so that it does not mount the USB flash drive. To do this disk arbitration needs to be turned off. In Leopard in terminal the command is:&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;sudo launchctl unload /System/Library/LaunchDaemons/com.apple.diskarbitrationd.plist &lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://lh6.ggpht.com/_QfcS6HZ5Sws/Sh-XUpDQEFI/AAAAAAAAAU8/XtFgVGDWne8/s800/Picture_1.png" class="image-link"&gt;&lt;img class="linked-to-original" src="http://lh3.ggpht.com/_QfcS6HZ5Sws/Sh-zpjGF7jI/AAAAAAAAAVU/r-LV_nrv_PY/s800/Picture_1-thumb.png" height="236" align="left" width="380" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;Once disk arbitration simply launch USB Prober (via spotlight is the quickest way) and drill down to the device serial number.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://www.macosxforensics.com/Technologies/DiskArbitration/DiskArbitration.html" target="_blank"&gt;http://www.macosxforensics.com/Technologies/DiskArbitration/DiskArbitration.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://scissec.scis.ecu.edu.au/conference_proceedings/2007/forensics/23_Luo_Tracing_USB_Device_artefacts_on_Windows_XP.pdf" target="_blank"&gt;http://scissec.scis.ecu.edu.au/conference_proceedings/2007/forensics/23_Luo_Tracing_USB_Device_artefacts_on_Windows_XP.pdf&lt;/a&gt;&lt;br /&gt;&lt;a href="http://developer.apple.com/documentation/MacOSX/Conceptual/OSX_Technology_Overview/Tools/Tools.html" target="_blank"&gt;http://developer.apple.com/documentation/MacOSX/Conceptual/OSX_Technology_Overview/Tools/Tools.html&lt;/a&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-8584538418453330542?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/8584538418453330542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=8584538418453330542' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/8584538418453330542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/8584538418453330542'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/05/usb-prober.html' title='USB Prober'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_QfcS6HZ5Sws/Sh-zpjGF7jI/AAAAAAAAAVU/r-LV_nrv_PY/s72-c/Picture_1-thumb.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-3753169158884914762</id><published>2009-05-05T07:29:00.002+01:00</published><updated>2009-12-08T06:29:02.360Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Imaging'/><title type='text'>Helix Imaging PC</title><content type='html'>&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;When we upgrade our Forensic Workstations we cascade the older machines onto administrative and imaging tasks. One particular ex Forensic Workstation had supported a tape drive for a year or two but now was about to become totally redundant. Instead of suffering this fate I decided to dedicate it to running Helix. The box itself is a Supermicro chassis sporting a Supermicro X6-DAL-TG motherboard, twin Xeon Nocona 3.4 ghz processors, 2GB ram and a hot swap drive bay.&lt;/p&gt;&lt;p style="clear: both"&gt;I had read Andre Ross's blog post &lt;a href="http://digfor.blogspot.com/2008/09/installing-helix-2008r1.html" target="_blank"&gt;Installing Helix 2008R1&lt;/a&gt; and Jess Garcia's &lt;a href="http://www.jessland.net/JISK/Forensics/Software/Live_CDs/Helix/Disk_Install.php" target="_blank"&gt;How to install Helix to Disk&lt;/a&gt; webpage and decided that installing to hard disk was the way to go.&lt;/p&gt;&lt;p style="clear: both"&gt;The process I followed to do this successfully (guided by Andre Ross's post in the main) was:&lt;/p&gt;&lt;ol style="clear: both"&gt;&lt;li&gt;Equip box with an unformatted wiped hard disk - using a partitioned (with ext2 and linuxswap) disk caused the installation routine to hang.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Boot box to Helix 2008R1 CD and commence installation by going to &lt;strong&gt;System-&amp;gt;Administration-&amp;gt;Instal&lt;/strong&gt;l&lt;br /&gt;&lt;/li&gt;&lt;li&gt;At the point the installer hangs (Who are you screen) click cancel and then quit&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Commence installation routine again and create a user - I called mine &lt;em&gt;Helix&lt;/em&gt;&lt;/li&gt;&lt;li&gt;Configure Network Adaptor to connect to the internet via &lt;strong&gt;System-&amp;gt;Administration-&amp;gt;Network&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Launch Update Manager via &lt;strong&gt;System-&amp;gt;Administration-&amp;gt;Update Manager &lt;/strong&gt;and update all packages.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Applications-&amp;gt;Forensics &amp;amp; IR-&amp;gt;Root Terminal &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;:~#apt-get install smbfs&lt;/strong&gt;&lt;br /&gt;:&lt;strong&gt;~#apt-get install winbind&lt;/strong&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="clear: both"&gt;Part 1 of the job is done. A little bit of configuration is needed to make the machine more usable in it's main role as an imaging machine. I am not a Linux guru so apologies for the Janet and John approach for those that are. Also my imaging machines are in a secure environment and not normally connected to the internet so I felt relaxing security a little may be OK. &lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Relaxing Security&lt;/strong&gt;&lt;/p&gt;&lt;ol style="clear: both"&gt;&lt;li&gt;&lt;strong&gt;System-&amp;gt;Administration-&amp;gt;Login Window &lt;/strong&gt;&lt;br /&gt;On the Security tab you may wish to enable Automatic Login for the Helix user&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Applications-&amp;gt;Forensics &amp;amp; IR-&amp;gt;Root Terminal &lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;:~# &lt;strong&gt;nano /etc/sudoers&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Use arrow keys to scroll to end of file then type&lt;br /&gt;&lt;strong&gt;Helix ALL=(ALL) NOPASSWD: ALL&lt;/strong&gt;&lt;br /&gt;(presuming &lt;strong&gt;helix&lt;/strong&gt; was the name of the user account you created, if not substitute helix with the name of your account)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Type &lt;strong&gt;CTRL+o&lt;/strong&gt; to save then press &lt;strong&gt;enter &lt;/strong&gt;then type &lt;strong&gt;CTRL+x&lt;/strong&gt; to exit nano text editor. The syntax is critical - if sudoers is messed up your OS may not boot. The reason this is done is that most of the applications we wish to use run at root. However user accounts do not have root privileges. This is overcome by using the &lt;strong&gt;sudo&lt;/strong&gt; command which periodically requires you to enter a password which is a pain. Editing the sudoers file as shown above removes the requirement to enter a password when &lt;strong&gt;sudo&lt;/strong&gt; is used.&lt;/li&gt;&lt;li&gt;By default there are three icons in the panel (like Windows Quick Lauch) on the taskbar at the top of the desktop (Firefox, help and terminal). Right click on Terminal and &lt;em&gt;Remove from Panel&lt;/em&gt;.&lt;/li&gt;&lt;li&gt;Access &lt;strong&gt;Applications-&amp;gt;Forensics &amp;amp; IR-&amp;gt;Root Terminal &lt;/strong&gt;in the menu and right click and select &lt;em&gt;Add to Panel&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Imaging Applications&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;I work in an Encase shop so I am going to concentrate on applications that image to EWF format (aka e.01 files). There are currently two applications installed that do this - Linen and EWFacquire.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Linen&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Linen needs some configuration to run from the shortcut &lt;strong&gt;Applications-&amp;gt;Forensics &amp;amp; IR-&amp;gt;Linen. &lt;/strong&gt;This shortcut (I think the proper linux terminology is launcher) runs a script called &lt;strong&gt;sl&lt;/strong&gt; in &lt;strong&gt;/usr/bin&lt;/strong&gt;. &lt;strong&gt;sl&lt;/strong&gt; needs editing.&lt;/p&gt;&lt;ol style="clear: both"&gt;&lt;li&gt;&lt;strong&gt;Applications-&amp;gt;Forensics &amp;amp; IR-&amp;gt;Root Terminal (or click on Root Terminal in the Panel)&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;:~# &lt;strong&gt;nano /usr/bin/sl&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Use nano to delete the line&lt;br /&gt;&lt;strong&gt;cp /cdrom/IR/bin/linen /usr/local/bin&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Type &lt;strong&gt;CTRL+o&lt;/strong&gt; to save then press &lt;strong&gt;enter &lt;/strong&gt;then type &lt;strong&gt;CTRL+x&lt;/strong&gt; to exit nano text editor.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="clear: both"&gt;At this stage Linen does not reside in /usr/local/bin - we need to put an up to date copy there.&lt;/p&gt;&lt;ol style="clear: both"&gt;&lt;li&gt;On a Windows box where Encase version 6 is installed copy the Linen file from the root Encase folder within Program Files to a thumb drive.&lt;/li&gt;&lt;li&gt;On the Helix box copy Linen from the thumb drive to /usr/local/bin as follows:&lt;/li&gt;&lt;li&gt;Launch root terminal from panel on task bar and mount your thumb drive by clicking on it's icon on the task bar and selecting &lt;strong&gt;Mount&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;:~# cp /media/sdc1/linen /usr/local/bin &lt;em&gt;&lt;/em&gt;(where sdc1 is your thumb drive)&lt;br /&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="clear: both"&gt;Linen should now be launchable via the menu. But in true windows style I created a desktop shortcut by right clicking the Linen menu item and selecting &lt;strong&gt;add launcher to desktop.&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;&lt;strong&gt;EWFacquire&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;div&gt;EWF Acquire is installed and will run from the root terminal. This program is part of the &lt;a href="http://sourceforge.net/projects/libewf/" target="_blank"&gt;libewf&lt;/a&gt; project. The syntax is&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;ewfacquire /dev/sdb&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;where /dev/sdb is the drive to be imaged. Again I created a desktop shortcut by:&lt;/p&gt;&lt;ol style="clear: both"&gt;&lt;li&gt;Right clicking on the desktop and selecting&lt;strong&gt; &lt;strong&gt;Create Launcher&lt;/strong&gt;&lt;/strong&gt;&lt;em&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;&lt;li&gt;Change the type to &lt;strong&gt;Application in Terminal&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/li&gt;&lt;li&gt;Set the name appropriately&lt;/li&gt;&lt;li&gt;In the command box type &lt;strong&gt;sudo /usr/bin/ewfacquire /dev/sdb&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Click &lt;strong&gt;OK&lt;/strong&gt;&lt;em&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="clear: both"&gt;&lt;div&gt;&lt;strong&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;It is probably worth noting that you would not want to launch EWFacquire from the desktop launcher unless you had established the path of each drive by typing fdisk -l into the root terminal.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Guymager&lt;/strong&gt;&lt;/div&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://guymager.sourceforge.net/" target="_blank"&gt;Guymager&lt;/a&gt; is another imaging tool that utilises &lt;a href="http://sourceforge.net/projects/libewf/" target="_blank"&gt;Libewf&lt;/a&gt;. It is controlled from a GUI and is a desirable addition to our imaging tools. I intend to do a mini review of it along with steps I have carried out to validate it in a forthcoming blog post. It is not installed on the Helix CDRom but can be installed to our hard disk installation.&lt;/p&gt;&lt;ol style="clear: both"&gt;&lt;li&gt;Launch a Root Terminal&lt;/li&gt;&lt;li&gt;:~# &lt;strong&gt;nano /etc/apt/sources.list&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Use arrow keys to scroll to end of file then type&lt;strong&gt; deb http://apt.pinguin.lu/i386 ./&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Type &lt;strong&gt;&lt;/strong&gt;CTRL+o to save then press &lt;strong&gt;enter &lt;/strong&gt;then type &lt;strong&gt;&lt;/strong&gt;CTRL+x to exit nano text editor.&lt;strong&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Whist still connected to internet type in root terminal&lt;br /&gt;&lt;/li&gt;&lt;li&gt;:~# &lt;strong&gt;apt-get update&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;:~# &lt;strong&gt;apt-get install guymager smartmontools hdparm libewf-tools&lt;/strong&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="clear: both"&gt; Once the process is completed guymager can be launched from a root terminal. Again I created a desktop shortcut by: &lt;/p&gt;&lt;ol style="clear: both"&gt;&lt;li&gt;Right clicking on the desktop and selecting&lt;strong&gt; &lt;strong&gt;Create Launcher&lt;/strong&gt;&lt;/strong&gt;&lt;em&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;&lt;li&gt;Change the type to &lt;strong&gt;Application in Terminal&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/li&gt;&lt;li&gt;Set the name appropriately&lt;/li&gt;&lt;li&gt;In the command box type &lt;strong&gt;sudo /usr/bin/guymager&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Click &lt;strong&gt;OK&lt;/strong&gt;&lt;em&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="clear: both"&gt;Guymager utilises a configuration file - guymager.cfg. For my setup I wanted to make some changes. The program advises that changes should be made to local.cfg, however I did not have much success with this. I edited guymager.cfg with nano:&lt;/p&gt;&lt;ol style="clear: both"&gt;&lt;li&gt;Launch a Root Terminal&lt;/li&gt;&lt;li&gt;:~# &lt;strong&gt;nano /etc/guymager/guymager.cfg&lt;/strong&gt;&lt;br /&gt;and modify entries to the following&lt;/li&gt;&lt;li&gt;Language='en'&lt;br /&gt;EwfFormat=Encase5&lt;br /&gt;EwfCompression=Best&lt;br /&gt;EwfSegmentSize=1500&lt;br /&gt;&lt;/li&gt;&lt;li&gt;and in the Table LocalDevices area add a new line beneath the line of ------------&lt;br /&gt;containing the serial number of the hard disk drive where Helix is installed&lt;br /&gt;e.g. '1ATA_Maxtor_6B300S0_B605MV0H'&lt;br /&gt;The best way to establish the serial no. is probably with Guymager itself. &lt;/li&gt;&lt;li&gt;Many other changes can be made as documented within guymager.cfg&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Type &lt;strong&gt;&lt;/strong&gt;CTRL+o to save then press &lt;strong&gt;enter &lt;/strong&gt;then type &lt;strong&gt;&lt;/strong&gt;CTRL+x to exit nano text editor.&lt;/li&gt;&lt;/ol&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;&lt;br /&gt;Adepto&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Although Adepto does not image to EWF files I know some people use it. Some changes need to be made to get it to work.&lt;/p&gt;&lt;ol style="clear: both"&gt;&lt;li&gt;Launch a File Browser with root permissions by launching a root terminal and typing &lt;strong&gt;nautilus&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Use the file browser to navigate to &lt;strong&gt;/home/helix &lt;/strong&gt;(helix being the name of the user account I created during the installation routine - if you used another account name navigate to /home/theAccountNameYouUsed )&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Right click or use the edit menu to create a folder then name it &lt;strong&gt;Adepto&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Double click &lt;strong&gt;Adepto&lt;/strong&gt; and create a subfolder within Adepto called &lt;strong&gt;Logs&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Right click on &lt;strong&gt;Logs &lt;/strong&gt;and &lt;strong&gt;Make Link &lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Right click on the resulting &lt;strong&gt;Link to Logs &lt;/strong&gt;and &lt;strong&gt;Cut&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Navigate to &lt;strong&gt;/usr/local/adepto &lt;/strong&gt;and paste your link file&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Right click on the existing &lt;strong&gt;Logs&lt;/strong&gt; file and delete&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Rename&lt;strong&gt; Link to logs&lt;/strong&gt; to &lt;strong&gt;logs&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Adepto should work now.&lt;/li&gt;&lt;/ol&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;S&lt;/strong&gt;&lt;strong&gt;ome Networking Stuff&lt;/strong&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;In our lab we image to a file server running Microsoft Windows Server 2003. When I have used the Helix CDs in the past it was always a pain to image to an attached hard drive then transfer the image to the file server later. I wanted the Helix Imager to image direct to our file server and be part of our Windows Workgroup.&lt;/p&gt;&lt;p style="clear: both"&gt;To do this:&lt;/p&gt;&lt;ol style="clear: both"&gt;&lt;li&gt;via &lt;strong&gt;System-&amp;gt;Administration-&amp;gt;Network &lt;/strong&gt;configure to connect to your internal network&lt;br /&gt;&lt;/li&gt;&lt;li&gt;on the windows file server create a share (I called mine Helix) and create a user named Helixuser (having done this you can apply appropriate security to this user at the Windows end)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Create a mount point to the windows share by:&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Launch a Root Terminal&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;:~#mkdir /media/helix&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;:~# &lt;strong&gt;nano /etc/nsswitch.conf&lt;br /&gt;modify (add wins prior to dns) the following line to read&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;hosts: files mdns4_minimal [NOTFOUND=return] wins dns mdns4&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Type &lt;strong&gt;&lt;/strong&gt;CTRL+o to save then press &lt;strong&gt;enter &lt;/strong&gt;then type &lt;strong&gt;&lt;/strong&gt;CTRL+x to exit nano text editor&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;:~# &lt;strong&gt;nano /etc/fstab&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Append the line below to the end of the fstab file&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;//server/Helix /media/helix cifs username=user,password=*,iocharset=utf8,file_mode=0777,dir_mode=0777 0 0&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;where &lt;strong&gt;server&lt;/strong&gt; is your server name, &lt;strong&gt;Helix&lt;/strong&gt; is the name of your Windows share, &lt;strong&gt;helix&lt;/strong&gt; is the name of the linux mount point, &lt;strong&gt;user&lt;/strong&gt; is the name of an account on your Windows server and * is substituted for whatever your password is.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Type &lt;strong&gt;CTRL+o&lt;/strong&gt; to save then press &lt;strong&gt;enter &lt;/strong&gt;then type &lt;strong&gt;CTRL+x&lt;/strong&gt; to exit nano text editor&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;:&lt;/strong&gt;~# &lt;strong&gt;mount -a&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Configure the way the Helix Imager box is recognised within our Windows Workgroup&lt;br /&gt;&lt;/li&gt;&lt;li&gt;at the root terminal :~# &lt;strong&gt;nano /etc/samba/smb.conf&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Within the global settings area modify entries to the following&lt;br /&gt;&lt;strong&gt;workgroup = THENAMEOFYOURWORKGROUP&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;server string = %h&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="clear: both"&gt;Now that a mount point has been created to your windows share specifying /media/helix as the path to image to in Linen, EWFacquire or Guymager will output the image to the Windows File Server.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt; &lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-3753169158884914762?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/3753169158884914762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=3753169158884914762' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/3753169158884914762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/3753169158884914762'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/05/helix-imaging-pc.html' title='Helix Imaging PC'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-5328895103268112745</id><published>2009-04-25T23:22:00.001+01:00</published><updated>2009-12-08T06:29:25.372Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Imaging'/><title type='text'>Tableau T9 Firewire write-blocker</title><content type='html'>&lt;p style="clear: both"&gt;Most forensic practitioners will prefer to use hardware write-blockers over software. However when the device you wished to image only had a firewire interface the choice was limited. Hardware write-blockers for firewire didn't exist. Now somewhat late in the day Tableau have introduced the &lt;a href="http://www.forensic-computers.com/handBridges.php"&gt;Tableau T9&lt;/a&gt;. This write-blocker will allow you to image firewire external storage drives as well as Apple Macs booted into &lt;a href="http://support.apple.com/kb/HT1661" target="_blank"&gt;target disk mode&lt;/a&gt;. Given the increase of Macs submitted to our lab I can see the T9 becoming very useful. &lt;a href="http://www.forensic-computers.com/handBridges.php" target="_blank"&gt;Data Duplication&lt;/a&gt; will sell the T9 in the UK for around £240.&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-5328895103268112745?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/5328895103268112745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=5328895103268112745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/5328895103268112745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/5328895103268112745'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/04/tableau-t9-firewire-write-blocker.html' title='Tableau T9 Firewire write-blocker'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-8087334038870511928</id><published>2009-04-22T17:59:00.000+01:00</published><updated>2009-12-08T06:31:01.082Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><title type='text'>Facebook revisited and other chat related stuff</title><content type='html'>&lt;p style="clear: both"&gt;My &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2009/03/facebook-chat-forensics.html" title="facebook forensics" target="_blank"&gt;blog post about facebook chat&lt;/a&gt; generated a lot more email than usual. &lt;/p&gt;&lt;p style="clear: both"&gt;In particular Jad Saliba wrote about a program he has written to search for and report on facebook chat. Jad's program is called Internet Evidence Finder and essentially at this time it searches for Facebook chat, Facebook pages, Yahoo chat and MSN chat. Jad points out that the program may be useful in a non Encase shop and I agree. In fact it will be useful anywhere as it did a very good job.&lt;/p&gt;&lt;p style="clear: both"&gt;I have had some fun testing it today and found that it parses all the messages that my two previously documented methods had found. I used the program by mounting the drive image I wished to search with Encase PDE and then running the program across the mounted drive. On my box the search ran at a speed of about 27 MB/sec. The resulting spreadsheet was nicely formatted and gave the Physical Sector of each hit. Jad's program is freeware and can be found at &lt;a href="http://www.jadsoftware.com/"&gt;http://www.jadsoftware.com&lt;/a&gt;. &lt;/p&gt;&lt;p style="clear: both"&gt;With respect to MSN chat and the other chat clients &lt;a href="http://www.jadsoftware.com/home/ief.htm" target="_blank"&gt;Jad's website&lt;/a&gt; deal with what can be achieved. In testing I am running right now with MSN a large number of false positives have been found however this is probably the &lt;em&gt;nature of the beast&lt;/em&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;Now before someone mentions tool validation my view is that I don't validate my tools - I validate my results. Generally I do this with dual tool verification as in the example above. &lt;/p&gt;&lt;p style="clear: both"&gt;Till next time...&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-8087334038870511928?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/8087334038870511928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=8087334038870511928' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/8087334038870511928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/8087334038870511928'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/04/facebook-revisited-and-other-chat.html' title='Facebook revisited and other chat related stuff'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-3608094998359002110</id><published>2009-04-08T13:29:00.000+01:00</published><updated>2009-04-08T13:29:24.516+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash Player'/><title type='text'>Adobe Flash Player Local Shared Objects</title><content type='html'>&lt;p style="clear: both"&gt;The value of cookies and other internet history related artifacts is well known. Not as widely commentated on are &lt;em&gt;Local Shared Objects &lt;/em&gt;created by Adobe Flash Player. They have a &lt;em&gt;&lt;strong&gt;.sol&lt;/strong&gt;&lt;/em&gt; file extension and on the vista box I am looking at at least they are stored at:&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;\Users\your user\AppData\Roaming\Macromedia\Flash Player\#SharedObjects\&lt;/p&gt;&lt;p style="clear: both"&gt;These &lt;em&gt;Local Shared Objects &lt;/em&gt;are data files that can be created on a computer by visited websites and in many respects are similar to &lt;a href="http://en.wikipedia.org/wiki/HTTP_cookie" target="_blank"&gt;cookies&lt;/a&gt;. It appears however that the conventional forensic software I use to analyse internet history ignores these files (I use Netanalysis and Encase v6 Comprehensive Internet History search).&lt;/p&gt;&lt;p style="clear: both"&gt;To parse &lt;strong&gt;&lt;em&gt;.sol&lt;/em&gt;&lt;/strong&gt; files into a more readable form I use the &lt;a href="http://code.google.com/p/fdplugins/wiki/SharedObjectReader" target="_blank"&gt;SharedObject Reader&lt;/a&gt; plugin of &lt;a href="http://www.flashdevelop.org/community/viewforum.php?f=11" target="_blank"&gt;FlashDevelop3&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://www.adobe.com/products/flashplayer/articles/lso/" target="_blank"&gt;http://www.adobe.com/products/flashplayer/articles/lso/&lt;/a&gt;&lt;br style="text-decoration: underline;" /&gt;&lt;a href="http://en.wikipedia.org/wiki/Local_Shared_Object" target="_blank"&gt;http://en.wikipedia.org/wiki/Local_Shared_Object&lt;/a&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-3608094998359002110?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/3608094998359002110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=3608094998359002110' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/3608094998359002110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/3608094998359002110'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/04/adobe-flash-player-local-shared-objects.html' title='Adobe Flash Player Local Shared Objects'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-4957327263381802575</id><published>2009-04-03T10:44:00.000+01:00</published><updated>2009-12-08T06:16:52.928Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Garmin'/><category scheme='http://www.blogger.com/atom/ns#' term='Satnav'/><category scheme='http://www.blogger.com/atom/ns#' term='GPS'/><title type='text'>Garmin nüvi 200 Sat Nav device</title><content type='html'>&lt;p style="clear: both"&gt;This device has two memory chips hard wired onto the internal pcb, therefore the only regular means of accessing this memory is via the USB port. These sat nav devices will act as mass storage devices when connected via USB. I imaged one whilst connected to a Tableau USB write blocker. Please note that the time the device is switched on is recorded within &lt;em&gt;current.gpx&lt;/em&gt; referred to below.&lt;/p&gt;&lt;p style="clear: both"&gt;There are few human readable files most notably &lt;em&gt;current.gpx. &lt;/em&gt;This file contains the users home location and user selected favourites along with the location of a number of Garmin offices. If a user saves a favourite from a location on a map the favourite will be entitled 001, 002 and so on.&lt;/p&gt;&lt;p style="clear: both"&gt;There are a number of ways to investigate the contents of current.gpx. Effectively it is an xml formatted file which I use &lt;a href="https://www.microsoft.com/downloads/details.aspx?familyid=72d6aa49-787d-4118-ba5f-4f30fe913628&amp;amp;displaylang=en" target="_blank"&gt;Microsoft XML Notepad 2007&lt;/a&gt; to review. You can also use a utility such as &lt;a href="http://www.easygps.com/download.asp" target="_blank"&gt;EasyGPS&lt;/a&gt; or open the file with Google Earth. &lt;/p&gt;&lt;p style="clear: both"&gt;To report the contents of &lt;em&gt;current.gpx &lt;/em&gt;I use Microsoft Excel 2007. In order to do this successfully change the file extension to xml and use the xml data import facility (Data/ From Other Sources/ From XML Data Import) allowing Excel to create the schema. You will end up with a nicely formatted table.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;Recently Found&lt;/em&gt; locations unfortunately do not appear to be saved within the user accessible memory.&lt;/p&gt;&lt;p style="clear: both"&gt;The hidden service menu of the device can be accessed by turning on and then holding a finger on battery symbol on screen for 10 seconds. It is possible once in this menu to interface with the device via USB without it behaving as a mass storage device. &lt;a href="http://www8.garmin.com/support/download_details.jsp?id=591" target="_blank"&gt;Garmin USB&lt;/a&gt; drivers are required to do this. I am not sure whether this will be useful forensically at any stage.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2009/11/garmin-streetpilot-c510.html" target="_blank"&gt;A later post relating to a StreetPilot C510&lt;/a&gt; may be some help.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/GPS_eXchange_Format" target="_blank"&gt;http://en.wikipedia.org/wiki/GPS_eXchange_Format&lt;/a&gt;&lt;br style="text-decoration: underline;" /&gt;&lt;a href="http://www.garmin.com/manuals/nuvi200_OwnersManual.pdf" target="_blank"&gt;Download nuvi 200 manual&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.techonline.com/showArticle.jhtml?articleID=210601020" target="_blank"&gt;http://www.techonline.com/showArticle.jhtml?articleID=210601020&lt;/a&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-4957327263381802575?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/4957327263381802575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=4957327263381802575' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/4957327263381802575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/4957327263381802575'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/04/garmin-nuvi-200-sat-nav-device.html' title='Garmin nüvi 200 Sat Nav device'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-6240908438637824529</id><published>2009-03-24T14:45:00.000Z</published><updated>2009-03-24T14:45:44.479Z</updated><title type='text'>Seagate Barracuda Firmware problems</title><content type='html'>&lt;p style="clear: both"&gt;As has been widely reported elsewhere many &lt;a href="http://seagate.custkb.com/seagate/crm/selfservice/news.jsp?DocId=207931" target="_blank"&gt;Seagate Barracuda hard disk drives have faulty firmware&lt;/a&gt; that causes them to effectively freeze.&lt;/p&gt;&lt;p style="clear: both"&gt;In our lab we have 12 of the affected Seagate Barracuda 7200.11 1TB drives and 50 Seagate ES.2 1TB drives. Two of the 7200.11 have failed with symptoms that suggest that faulty firmware was the cause. I have flashed the firmware of all of the affected working drives and hope that I can look forward to a long fault free period.&lt;/p&gt;&lt;p style="clear: both"&gt;One of the failed 7200.11 drives was one third of a Raid 0 array in one of our forensic workstations. This workstation needed an OS reinstallation (onto a separate single drive) and temporarily some data on the OS drive (normally backed up to the Raid) only existed on the Raid. During subsequent software installations a number of reboots were required triggering the firmware bug and a failed raid. Oh bother!&lt;/p&gt;&lt;p style="clear: both"&gt;Normally data on our Raid 0 arrays is backed up but due to the aforementioned OS reinstall there was a small amount of data that lost. I therefore had to find a way to unfreeze the locked Seagate Barracuda. A considerable trawl of the internet led me to this &lt;a href="http://www.msfn.org/board/index.php?showtopic=128807" target="_blank"&gt;post&lt;/a&gt;. Gradius2 details a fix involving a significant amount of down and dirty electronics and low level hard drive programming. Not having all the necessary adapters/serial cables etc led me to call Disk Labs. They quoted £1000 - that was a no go then. Luckily Hugh Morgan at &lt;a href="http://www.cy4or.co.uk/" target="_blank"&gt;Cy4or&lt;/a&gt; successfully repaired the drive broadly following Gradius2's fix for significantly less. I reintroduced the drive to the two other drives in the Raid 0 array and &lt;a href="http://en.wikipedia.org/wiki/Bob" s_your_uncle'="" link_target="_blank"&gt;Bob's Your Uncle!&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://en.wikipedia.org/wiki/Bob" s_your_uncle'="" link_target="_blank"&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-6240908438637824529?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/6240908438637824529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=6240908438637824529' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/6240908438637824529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/6240908438637824529'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/03/seagate-barracuda-firmware-problems.html' title='Seagate Barracuda Firmware problems'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-1056237283055579877</id><published>2009-03-22T20:50:00.000Z</published><updated>2009-12-08T06:43:00.666Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Imaging'/><title type='text'>Monetizing Helix</title><content type='html'>&lt;p style="clear: both"&gt;The forensics community has benefitted from the free Linux forensic distro Helix3 for some time. This distro was developed by Drew Fahey and distributed via e-fense.com (&lt;a href="http://www.iterasi.net/openviewer.aspx?sqrlitid=veaadu4jpeu5ne_ybezihg" target="_blank"&gt;archived Helix 3 website&lt;/a&gt;). I suppose, like many free things, the issue of how to you support it and develop it when you are not making money from it became an issue for e-fense. I was under the impression that a revenue stream was available via Helix3 training courses (run by &lt;a href="http://www.csitech.co.uk/" target="_blank"&gt;CSI Tech&lt;/a&gt; in the UK). I know that both Nick Furneaux and Jim Gordon were very busy with these courses, and having attended one myself, I thought they were a great success.&lt;/p&gt;&lt;p style="clear: both"&gt;Anyhow it seems that training provision wasn't enough. Late 2008 e-fense invited e-fense helix forum members to make donations. Unsurprisingly take up wasn't that great. This resulted in a slightly hectoring email from e-fense announcing that Helix3 was now only available to those who subscribed for access to their forum. The &lt;a href="http://www.e-fense.com/register-overview.php" target="_blank"&gt;subscription&lt;/a&gt; is around US$20 per month. So be it but as someone who has already paid circa US$1000 for a training course to use a product I cannot now download without subscription I am left feeling slightly disappointed.&lt;/p&gt;&lt;p style="clear: both"&gt;Nothing stands still in this arena however. I have posted in the past about WinFE and some subsequent comments led me to a Grand Stream Dreams &lt;a href="http://grandstreamdreams.blogspot.com/2009/03/windows-fe-forensically-sound.html" target="_blank"&gt;blog post&lt;/a&gt; written by Claus Valca. He referred to two free forensic Linux distros:&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;&lt;a href="http://www.deftlinux.net/about/" target="_blank"&gt;DEFT Linux&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.caine-live.net/index.html" target="_blank"&gt;C.A.IN.E&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;Perhaps one of these is the new helix?&lt;/p&gt;&lt;p style="clear: both"&gt;It seems &lt;a href="http://www.liquidmatrix.org/blog/2009/03/16/shattered_dreams/comment-page-1/#comment-71607" target="_blank"&gt;one&lt;/a&gt; or &lt;a href="http://www.ethicalhacker.net/component/option,com_smf/Itemid,54/topic,2926.msg17091/topicseen,1/" target="_blank"&gt;two&lt;/a&gt; others have commented on the same subject -it seems they are not planning to subscribe either.&lt;/p&gt;&lt;p style="clear: both"&gt;I noticed a bit late in the day that there is an &lt;a href="http://www.forensicfocus.com/index.php?name=Forums&amp;amp;file=viewtopic&amp;amp;t=3590&amp;amp;postdays=0&amp;amp;postorder=asc&amp;amp;start=0" target="_blank"&gt;extensive thread&lt;/a&gt; over at Forensic Focus about this issue also.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-1056237283055579877?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/1056237283055579877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=1056237283055579877' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/1056237283055579877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/1056237283055579877'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/03/monetizing-helix.html' title='Monetizing Helix'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-7238652720165975151</id><published>2009-03-20T10:24:00.003Z</published><updated>2009-05-13T12:43:43.980+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><title type='text'>Facebook Chat Forensics</title><content type='html'>&lt;p style="clear: both"&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;br /&gt;Facebook has a built in instant messaging facility which has grown in popularity along with the Facebook social networking site itself. Many cases involve potential grooming offences in which the use of instant messaging needs to be investigated.&lt;/p&gt;&lt;p style="clear: both"&gt;The instant messaging facility creates a number of artefacts which are easily found and I know have been commentated on &lt;a href="http://video.google.com/videoplay?docid=6088074310102786759" target="_blank"&gt;elsewhere&lt;/a&gt;. The purpose of this blog post is to suggest a methodology to automate the discovery and reporting of Facebook messages.&lt;/p&gt;&lt;p style="clear: both"&gt;For those who have not looked at this area in detail yet messages are cached in small html files with a file name P_xxxxxxxx.htm (or .txt). These messages can be found in browser cache, unallocated clusters, pagefiles, system restore points, the MFT as resident data and possibly other places. It is possible for the messages to be cached within the main Facebook profile page (although I have never seen them there - the main facebook page does not seem to be cached that often).&lt;/p&gt;&lt;p style="clear: both"&gt;An example of a message is shown below:&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;em&gt;for (;;);{"t":"msg","c":"p_1572402994","ms":[{"type":"msg","msg":{"text":"Another Message","time":1237390150796,"clientTime":1237390150114,"msgID":"3078127486"},"from":212300220,"to":1123402994,"from_name":"Mark PPPPPP","to_name":"Richard XXXX","from_first_name":"Mark","to_first_name":"Richard"}]}&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;The bulk of the message is in fact formatted as JavaScript Object Notation normally referred to as &lt;a href="http://json.org/" target="_blank"&gt;JSON&lt;/a&gt;. The format is a text based and human readable way for representing data structures. The timestamps are 13 digit unix timestamps that include milliseconds - they can be divided by 1000 to get a standard unix timestamp.&lt;/p&gt;&lt;p style="clear: both"&gt;Although keyword searches will find these messages they are difficult to review particularly if you are only interested in communication between selected parties. Having found relevant hits you then have to create a sweeping bookmark for each one. For these reasons I follow the following methodology.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Suggested Methodology&lt;/strong&gt;&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;Create a Custom File Type within the Encase Case Processor File Finder module entitled Facebook Messages using the Header &lt;em&gt;"&lt;strong&gt;text":" &lt;/strong&gt;&lt;/em&gt;and the footer &lt;em&gt;&lt;strong&gt;}]} &lt;/strong&gt;making sure GREP is not selected.&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;&lt;a href="http://picasaweb.google.com/data/media/api/user/dc1743/albumid/5314452022034599297/photoid/5315295817926009826/1237563746478000?authkey=Gv1sRgCO3Fy7HC6NTYOA" class="image-link"&gt;&lt;img class="linked-to-original" src="http://picasaweb.google.com/data/media/api/user/dc1743/albumid/5314452022034599297/photoid/5315295797493645026/1237563741165000?authkey=Gv1sRgCO3Fy7HC6NTYOA" height="436" align="left" width="359" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;Run the file finder with the Facebook Messages option selected.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;When the file finder completes you will have a number of text files in your export directory (providing there are messages to be found).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;These text files are in the form of the example above. They do not have Carriage Return and Line Feed characters at the end of the text. We need to remedy this by utilising a DOS command at the command prompt.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;At the command prompt navigate to the directory containing your exported messages (please note Encase creates additional sub directories beneath your originally specified directory).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Then run the following command:&lt;br /&gt;&lt;strong&gt;&lt;em&gt;FOR %c in (*.txt) DO (Echo.&amp;gt;&amp;gt;%~nc.txt)&lt;br /&gt;&lt;/em&gt;&lt;span style="font-weight: normal;"&gt;This command adds a Carriage Return and Line Feed to the end of the extracted message.&lt;/span&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Next we want to concatenate the message text files into one file using the command at the DOS prompt: &lt;strong&gt;&lt;em&gt;copy *.txt combined.txt&lt;/em&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Alternatively create (or email me for) a batch file that executes these two commands direct from windows.&lt;/li&gt;&lt;li&gt;An additional file &lt;em&gt;combined.txt&lt;/em&gt; will be created in your export directory.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Launch Microsoft Excel and instigate the Text Import Wizard specifying &lt;em&gt;Delimited &lt;/em&gt;with the Delimiter being a &lt;strong&gt;&lt;em&gt;comma&lt;/em&gt;&lt;/strong&gt; and the text qualifier &lt;strong&gt;&lt;em&gt;" &lt;/em&gt;. &lt;/strong&gt;&lt;br /&gt;Put the data into your worksheet (or cell J3 of my pre-formatted worksheet).&lt;/li&gt;&lt;li&gt;All that's needed now is to tidy up the worksheet with some Excel formulas the full details of which can be found within my example pre-formatted worksheet. The formula to process the time values (which are Unix time stamps) is&lt;strong&gt; (RIGHT(K2,13))/1000/86400+25569&lt;/strong&gt; where K2 is the cell containing the source time data.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Perform a sanity check and remove obviously corrupt entries.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;span style="font-weight: normal;"&gt;It can be seen below that after applying a data sort filter you can sort by time or user.&lt;/span&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;&lt;a href="http://picasaweb.google.com/data/media/api/user/dc1743/albumid/5314452022034599297/photoid/5315191892363074178/1237539549771000?authkey=Gv1sRgCO3Fy7HC6NTYOA" class="image-link"&gt;&lt;img class="linked-to-original" src="http://picasaweb.google.com/data/media/api/user/dc1743/albumid/5314452022034599297/photoid/5315219553867462946/1237545989757000?authkey=Gv1sRgCO3Fy7HC6NTYOA" height="80" align="left" width="376" style=" display: inline; float: left; margin: 0 10px 10px 0;" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;ul style="clear: both"&gt;&lt;li&gt;The spreadsheet also allows you to de-duplicate the found messages. In my recent case over half the recovered messages were duplicates. In Excel 2007 these duplicate (rows) are easily removed (Data/DataTools/Remove Duplicates). In Excel 2003 an add-in called &lt;a href="http://xldynamic.com/source/xld.DupMaster.html" target="_blank"&gt;The Duplicate Master&lt;/a&gt; will do this for you.&lt;/li&gt;&lt;/ul&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Further&lt;/strong&gt;&lt;strong&gt; Thoughts&lt;/strong&gt;&lt;br /&gt;Non Encase users may be able to use an alternative file carver (e.g. Blade) to carve out the messages. I am sure that the header and footer could be refined a bit to reduce false positives, however for me the ratio of legitimate versus false positives is OK. UPDATE 22nd April 2009 - non encase users may wish to look at my more &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2009/04/facebook-revisited-and-other-chat.html"&gt;recent post&lt;/a&gt;.&lt;/p&gt;&lt;p style="clear: both"&gt;I have the pre-formatted spreadsheet in template form. Please email me for a copy (with a brief explanation of who you are - thanks).&lt;/p&gt;&lt;p style="clear: both"&gt;To further investigate the data you recover you may wish to check out http://www.facebook.com/profile.php?id=xxxxxxx. Just substitute the xxxxx with the User ID's you recovered.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;Enscript Method&lt;/strong&gt;&lt;br /&gt;I have collaborated with Simon Key and now have an &lt;a href="https://support.guidancesoftware.com/forum/downloads.php?do=file&amp;amp;id=651"&gt;enscript&lt;/a&gt; to parse out JSON objects including messages. It outputs to a csv spreadsheet and in my tests parsed 160GB in about an hour. It might not be as tolerant of corrupt strings as the method detailed above. The script will only run in 6.13 or newer. I have a template that tidies up the formatting of the csv- email me if you want a copy.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;strong&gt;References and thanks&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://coderrr.wordpress.com/2008/05/06/facebook-chat-api"&gt;http://coderrr.wordpress.com/2008/05/06/facebook-chat-api&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;a href="http://video.google.com/videoplay?docid=6088074310102786759" target="_blank"&gt;http://video.google.com/videoplay?docid=6088074310102786759&lt;/a&gt;&lt;br /&gt;&lt;a href="http://json.org/" target="_blank"&gt;http://json.org/&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;a href="http://en.wikipedia.org/wiki/JSON" target="_blank"&gt;http://en.wikipedia.org/wiki/JSON&lt;/a&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;a href="http://www.wilsonmar.com/datepgms.htm#UNIXStamp"&gt;http://www.wilsonmar.com/datepgms.htm#UNIXStamp&lt;/a&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Thanks to Glenn Siddall for sparking my interest and providing me with some notes of his research.&lt;br /&gt;Thanks to Mark Payton for his assistance in researching this.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-7238652720165975151?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/7238652720165975151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=7238652720165975151' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/7238652720165975151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/7238652720165975151'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/03/facebook-chat-forensics.html' title='Facebook Chat Forensics'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-5439530212387512561</id><published>2009-03-19T07:18:00.001Z</published><updated>2009-03-20T07:27:14.466Z</updated><title type='text'>The need for speed</title><content type='html'>&lt;p style="clear: both"&gt;We are lucky in our lab that our workstations are upgraded on a regular basis so once in use we don't often make many changes.&lt;/p&gt;&lt;p style="clear: both"&gt;The most important bits of my current spec are as follows:&lt;/p&gt;&lt;ol style="clear: both"&gt;&lt;li&gt;&lt;a href="http://www.supermicro.com/products/motherboard/Xeon1333/5400/X7DWA-N.cfm" target="_blank"&gt;Supermicro X7-DWA-N&lt;/a&gt; fitted into a &lt;a href="http://www.supermicro.com/products/chassis/tower/733/SC733TQ-645.cfm" target="_blank"&gt;Supermicro CSE-733TQ-645&lt;/a&gt; chassis&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Two Intel Xeon X5482 processors&lt;br /&gt;&lt;/li&gt;&lt;li&gt;16GB DDR2 800 Ram&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Western Digital 300GB VelociRaptor10,000 rpm hard drive for the OS&lt;br /&gt;&lt;/li&gt;&lt;li&gt;3 x 1TB Samsung HE103UJ Spinpoint F1 hard drives in a RAID 0 array&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Microsoft XP 64 bit&lt;br /&gt;&lt;/li&gt;&lt;li&gt;256MB ATI FirePro V3700 GPU&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="clear: both"&gt;At one time our primary forensic software Encase would max out the processor when carrying pretty much any process. With the advent of multi-core dual processors we aim to max out one core (which on my box is 13% cpu utilisation in task manager). As processors get faster and faster I have noticed that often the CPU core is not maxing out. Something else is slowing us down! We store our Encase evidence files on the Raid 0 array (and just before someone posts a comment about the lack of data resilience etc., the way our lab is set up all the data on my Raid 0 array is mirrored elsewhere). We do this for speed and capacity. When Encase (and most other forensic utilities for that matter) is processing it has a voracious appetite for data. Just look at the Read bytes value in Task Manager. The multi-core processors allow us to run other forensic programs (FTK, Netanalysis hstex etc etc) along with Encase, we can even run other instances of Encase, and because we can - we do. The net result of all these programs running is that they compete to read data from the Raid 0 array in my case (and from wherever you store yours in yours) - the net result once your data storage is maxed out is things slow down. It follows then that performance can be increased by having faster data storage.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;One way to achieve this would be faster hard drives. We use sata hard drives for capacity reasons and to an extent cost. SAS hard drives are faster but don't provide the capacity. So as things stand three hard drives in a Raid 0 array was the best that could be done. I decided to see how I could make some improvement.&lt;/p&gt;&lt;p style="clear: both"&gt;Currently the three hard drives (and the OS drive) connect to the Intel ESB2 raid controller integrated on the motherboard. Conventional wisdom would have it that by adding a fourth hard drive to the raid 0 array would speed things up.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;HD Tach details an average sequential read speed of around 200 MB/s for a three drive array utilising the default stripe size (128kb) with NTFS formatted with the default cluster size.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;img src="http://picasaweb.google.com/data/media/api/user/dc1743/albumid/5314452022034599297/photoid/5314794663059467234/1237447062822000?authkey=Gv1sRgCO3Fy7HC6NTYOA" height="350" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Adding a fourth drive slowed the sequential read speed to around 180 MB/s.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;img src="http://picasaweb.google.com/data/media/api/user/dc1743/albumid/5314452022034599297/photoid/5314794689858884658/1237447067996000?authkey=Gv1sRgCO3Fy7HC6NTYOA" height="355" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;I tested a variety of different stripe sizes and aligned the partitions but came to the conclusion that the Intel ESB2 controller just did not scale up to four drives very well. The arrays were created via the utility accessed via the controller bios during boot up. This utility is very basic and does not allow much configuration. Intel also provides a Windows utility called &lt;a href="http://downloadcenter.intel.com/Product_Filter.aspx?ProductID=2101&amp;amp;lang=eng" target="_blank"&gt;Intel Matrix Storage Console&lt;/a&gt;. When running this utility I found that by default Volume Write-back cache was disabled. Enabling it made a significant improvement.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;img src="http://picasaweb.google.com/data/media/api/user/dc1743/albumid/5314452022034599297/photoid/5314794717994180930/1237447075853000?authkey=Gv1sRgCO3Fy7HC6NTYOA" height="348" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Conventional wisdom has it that a hardware Raid controller would improve performance over the Intel ESB2 and in my testing this seems to be the case. I have used an Areca 1212 PCI-E raid card and achieved a sequential read speed of over 600 MB/s.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;img src="http://picasaweb.google.com/data/media/api/user/dc1743/albumid/5314452022034599297/photoid/5314794759080409730/1237447084096000?authkey=Gv1sRgCO3Fy7HC6NTYOA" height="350" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;This array has four 1TB sata hard drives with a 64kb stripe, is &lt;a href="http://support.microsoft.com/kb/929491" target="_blank"&gt;partition aligned&lt;/a&gt; at 3072 sectors and has one NTFS volume with the default cluster size. Using &lt;a href="http://www.2brightsparks.com/freeware/freeware-hub.html" target="_blank"&gt;Syncback&lt;/a&gt; to write to the array from our file server across a copper gigabit ethernet network produces some pretty impressive network utilization stats.&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;img src="http://picasaweb.google.com/data/media/api/user/dc1743/albumid/5314452022034599297/photoid/5314794817709273938/1237447098413000?authkey=Gv1sRgCO3Fy7HC6NTYOA" height="361" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-5439530212387512561?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/5439530212387512561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=5439530212387512561' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/5439530212387512561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/5439530212387512561'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/03/need-for-speed.html' title='The need for speed'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-6606502934569272778</id><published>2009-03-08T13:45:00.000Z</published><updated>2009-12-08T06:24:24.909Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Email'/><title type='text'>Yahoo mailbox</title><content type='html'>&lt;p style="clear: both"&gt;An MLAT request brought CD-R to my door recently. The OIC informed me that the CD contained a Yahoo mailbox but wanted my help because he could not read them. I found that the CD contained a tar.gz file.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Once this archive was unpacked I saw it contained two very large text files. These files were &lt;a href="http://en.wikipedia.org/wiki/Mbox" title="mbox wiki" target="_blank"&gt;generic Mbox&lt;/a&gt; files. The next problem was how to view the contents. I found that Apple Mail would happily import Mbox files (File/Import Mailboxes) however I live in a mainly windows world so needed a Windows method for the OIC to preview the emails.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;Thunderbird came to mind, however although this program uses the mbox format for its mailboxes it does not offer an easy way to import them. I did track down an &lt;a href="http://nic-nac-project.de/~kaosmos/mboximport-en.html" title="mbox import" target="_blank"&gt;extension&lt;/a&gt; to Thunderbird that provided this functionality but it only worked on one of my two mbox files. I also found that Opera 9 would also import my mbox files. &lt;/p&gt;&lt;p style="clear: both"&gt;&lt;br /&gt;The problem with both Thunderbird and Opera is that the boxes available to the OIC in this case, and our customers in general, mostly do not have these programs installed. Ideally a way of getting the email messages into Outlook Express would be the best bet. The solution to this is provided by using the Mid Michigan Computer Forensics Group's M2CFG &lt;a href="http://www.m2cfg.com/parser.htm" title="email parser" target="_blank"&gt;Yahoo! Email/Text Parser&lt;/a&gt;. This program parses out the email messages into .eml files which can be dragged into Outlook Express (and a number of other Email clients).&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;As it turned out the two mboxes I had extracted for the OIC were so full of emails with attachments that it was too complicated for him to process efficiently. So they came back to me to investigate. I added the mbox text files into Encase v6.12.1 and searched for email with the mbox option selected which resulted in Encase parsing out the emails and attachments very well. Reporting them was another matter!&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-6606502934569272778?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/6606502934569272778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=6606502934569272778' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/6606502934569272778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/6606502934569272778'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/03/yahoo-mailbox.html' title='Yahoo mailbox'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-404168926513687111</id><published>2009-02-02T17:28:00.035Z</published><updated>2009-02-08T06:11:02.067Z</updated><title type='text'>Corel Paint Shop Pro Photo X2</title><content type='html'>Paint Shop Pro has a slightly longer title nowadays.  From a forensic perspective the older version had a thumbnail cache stored within .jbf files.  &lt;a href="http://www.filesig.co.uk/"&gt;Tim Coakley&lt;/a&gt; wrote a tool for parsing the contents out.   I stumbled across this new version when I saw some subfolders in my suspect's My Pictures folder entitled 2008.01.02 and a subfolder entitled Thumbs at the path &lt;span style="font-style: italic;"&gt;C:\Documents and Settings\username&lt;/span&gt;&lt;user name=""&gt;&lt;span style="font-style: italic;"&gt;\Local Settings\Application Data\Corel\Thumbs&lt;/span&gt;.   This folder had a number of jpgs within it with filenames in the format yyyy.mm.dd.jpg.&lt;/user&gt; &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The software can be installed as a trial.  It has two components that leave good evidence - an Organizer that creates a thumbnail database of selected folders (by default the current users &lt;span style="font-style: italic;"&gt;C:\Documents and Settings\Username&lt;/span&gt;&lt;username&gt;&lt;span style="font-style: italic;"&gt;\My Pictures,  C:\Documents and Settings\All Users\My Pictures&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;My Corel Shows&lt;/span&gt;) and the Corel Photo Downloader.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Organizer&lt;/span&gt;&lt;br /&gt;When the program is first run it will catalogue all supported picture types in the default folders.  This allows the user to view a thumbnail gallery of the catalogued folders within the program.  The thumnails are created and stored at the path:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;C:\Documents and Settings\Username&lt;/span&gt;&lt;user name=""&gt;&lt;span style="font-style: italic;"&gt;\Local Settings\Application Data\Corel\Thumbs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;These catologued thumbnails retain the filename of the original picture.  Metadata is stored in a database&lt;span style="font-style: italic;"&gt; imagedb.db&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Corel Photo Downloader&lt;/span&gt;&lt;br /&gt;This utility was responsible for creating some good evidence in my recent case.  It is installed as part of Corel Paint Shop Pro Photo X2 and is intended to automate the download of photographs from cameras, flash media cards and CDs.   The following dialogue box shows the relevant configuration settings:&lt;br /&gt;&lt;br /&gt;&lt;/user&gt;&lt;/username&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QfcS6HZ5Sws/SYxU30B2qGI/AAAAAAAAAPM/Gi0Dwaoz4_0/s1600-h/Picture+7.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 306px; height: 400px;" src="http://4.bp.blogspot.com/_QfcS6HZ5Sws/SYxU30B2qGI/AAAAAAAAAPM/Gi0Dwaoz4_0/s400/Picture+7.png" alt="" id="BLOGGER_PHOTO_ID_5299704179344189538" border="0" /&gt;&lt;/a&gt;&lt;div&gt;&lt;br /&gt;Photos downloaded with this utility form the folders and files I had found.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QfcS6HZ5Sws/SYxW0ozJZWI/AAAAAAAAAPU/BYS4zS9C4qE/s1600-h/Picture+9.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 197px;" src="http://2.bp.blogspot.com/_QfcS6HZ5Sws/SYxW0ozJZWI/AAAAAAAAAPU/BYS4zS9C4qE/s400/Picture+9.png" alt="" id="BLOGGER_PHOTO_ID_5299706323813360994" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Thumbnails of them are catalogued as part of the Organizer function - a function your suspect may be unaware of.   &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QfcS6HZ5Sws/SYxXnFhzHxI/AAAAAAAAAPc/QzZD4fmqvDw/s1600-h/Picture+10.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 191px;" src="http://2.bp.blogspot.com/_QfcS6HZ5Sws/SYxXnFhzHxI/AAAAAAAAAPc/QzZD4fmqvDw/s400/Picture+10.png" alt="" id="BLOGGER_PHOTO_ID_5299707190518685458" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Thumbnail issues&lt;/span&gt;&lt;/div&gt;&lt;div&gt;When Coral Paint Shop Pro Photo X2 is running thumbnails are pruned if the underlying source folders/files are deleted.  However if the program is not run after the underlying source folders/files are deleted the thumbnails remain.  In my case it appears that the trial expired which allowed a considerable number of thumbnails to remain at the path &lt;span style="font-style: italic;"&gt;C:\Documents and Settings\username&lt;/span&gt;&lt;user name=""&gt;&lt;span style="font-style: italic;"&gt;\Local Settings\Application Data\Corel\Thumbs&lt;/span&gt;.&lt;/user&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Imagedb.db&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Both the organizer and the photo downloader utilise a SQLite3 database to store metadata in relation to the catalogued pictures.   The database can be viewed using the &lt;a href="http://sqlitebrowser.sourceforge.net/"&gt;SQLite database browser&lt;/a&gt;.   It is possible to walk through the database to establish the original filenames of any thumbnails and the source folder.    Other useful information is stored in the database including program configuration.  In my case the date of download was useful.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_QfcS6HZ5Sws/SY2VUnD5g9I/AAAAAAAAAPk/tpyrqn_pfas/s1600-h/Picture+11.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 369px;" src="http://3.bp.blogspot.com/_QfcS6HZ5Sws/SY2VUnD5g9I/AAAAAAAAAPk/tpyrqn_pfas/s400/Picture+11.png" alt="" id="BLOGGER_PHOTO_ID_5300056517800199122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic;"&gt;Figure 1&lt;/span&gt;&lt;br /&gt;Details pictures downloaded (in this case from a casio camera).  The highlighted picture has been given an image ID number - 5210 and has a Download ID number 1.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_QfcS6HZ5Sws/SY2ZbL4jwPI/AAAAAAAAAQE/GVHbbolMT08/s1600-h/Picture+15.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 278px;" src="http://3.bp.blogspot.com/_QfcS6HZ5Sws/SY2ZbL4jwPI/AAAAAAAAAQE/GVHbbolMT08/s400/Picture+15.png" alt="" id="BLOGGER_PHOTO_ID_5300061028810473714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Figure 2&lt;br /&gt;&lt;/span&gt;Image ID 5210 has been allocated the filename 20090129_3.jpg and is stored in Folder 851.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QfcS6HZ5Sws/SY2Z5LhMpwI/AAAAAAAAAQM/5Aa-YrZbpNY/s1600-h/Picture+16.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 259px;" src="http://4.bp.blogspot.com/_QfcS6HZ5Sws/SY2Z5LhMpwI/AAAAAAAAAQM/5Aa-YrZbpNY/s400/Picture+16.png" alt="" id="BLOGGER_PHOTO_ID_5300061544108566274" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Figure 3&lt;/span&gt;&lt;br /&gt;Folder 851's entry detailing the folder name and path&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QfcS6HZ5Sws/SY2X7dPV2gI/AAAAAAAAAP8/dALe7hM6k2g/s1600-h/Picture+14.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 359px; height: 306px;" src="http://2.bp.blogspot.com/_QfcS6HZ5Sws/SY2X7dPV2gI/AAAAAAAAAP8/dALe7hM6k2g/s400/Picture+14.png" alt="" id="BLOGGER_PHOTO_ID_5300059384201992706" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic;"&gt;Figure 4&lt;/span&gt;&lt;br /&gt;Showing Download ID number 1's download date.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-404168926513687111?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/404168926513687111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=404168926513687111' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/404168926513687111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/404168926513687111'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/02/corel-paint-shop-pro-photo-x2.html' title='Corel Paint Shop Pro Photo X2'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_QfcS6HZ5Sws/SYxU30B2qGI/AAAAAAAAAPM/Gi0Dwaoz4_0/s72-c/Picture+7.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-3303756429248706974</id><published>2009-01-14T16:27:00.032Z</published><updated>2009-12-08T06:35:25.122Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Encase'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Encase v6 Comprehensive Internet History Search and Firefox Mork Databases</title><content type='html'>Encase version 6 now includes considerable functionality in recovering Internet History records for a number of browsers.&lt;br /&gt;&lt;br /&gt;In a recent case using v6.12.1 I ran a search for internet history with the Comprehensive search option selected.  My results included relevant hits in unallocated clusters which Encase attributed to Mozilla History/Forms.  The results are recorded within the Encase Records tab and when highlighting a record some data was highlighted in the view pane which made me scratch my head - and luckily loosen some cobwebs in a long ago abandoned area of my brain.  What was Encase showing me - I wasn't sure but my brain was telling me it was something to do with Mork.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Click on screenshot 1 to see a larger image&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QfcS6HZ5Sws/SW8ozor-4zI/AAAAAAAAAOU/v7kW7R7JHsE/s1600-h/Picture+1.png"&gt;&lt;img style="cursor: pointer; width: 481px; height: 313px;" src="http://2.bp.blogspot.com/_QfcS6HZ5Sws/SW8ozor-4zI/AAAAAAAAAOU/v7kW7R7JHsE/s400/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5291492954743956274" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My suspect was using Firefox version 1.8.  Firefox can save (subject to user configuration) information entered into web forms and the search bar to make form filling and searching faster.  This information is saved in a file known as &lt;span style="font-style: italic;"&gt;formhistory.dat&lt;/span&gt;.   Encase had found data within unallocated that was a fragment of a deleted &lt;span style="font-style: italic;"&gt;formhistory.dat&lt;/span&gt; file.  In this version of Firefox &lt;span style="font-style: italic;"&gt;formhistory.dat&lt;/span&gt; contained a &lt;a href="http://www.mozilla.org/mailnews/arch/mork/primer.txt"&gt;Mork database&lt;/a&gt;.   Encase had highlighted in the view pane what I will loosely refer to as the &lt;span style="font-style: italic;"&gt;address&lt;/span&gt; of the data that it had parsed out.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;[8(^83^83)(^82^8A)]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To understand this better we need to look more closely at all the data in the database.  Because the hit was in unallocated I needed to find the start of the deleted &lt;span style="font-style: italic;"&gt;formhistory.dat&lt;/span&gt; file.  The file signature of the file is highlighted in the screenshot below&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Click on screenshot 2 to see a larger image&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_QfcS6HZ5Sws/SW8xW4f4t1I/AAAAAAAAAOk/NdVzXdQ1LMk/s1600-h/Picture+4.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 556px; height: 96px;" src="http://1.bp.blogspot.com/_QfcS6HZ5Sws/SW8xW4f4t1I/AAAAAAAAAOk/NdVzXdQ1LMk/s400/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5291502356376631122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;so I scrolled up in the view pane, found this header and swept down to the footer (which is the &lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;}&lt;/span&gt; after the last address) and exported out the data as a file&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Click on screenshot 3 to see a larger image&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QfcS6HZ5Sws/SW8upBgOtcI/AAAAAAAAAOc/9hziR6iMyU4/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 454px; height: 366px;" src="http://4.bp.blogspot.com/_QfcS6HZ5Sws/SW8upBgOtcI/AAAAAAAAAOc/9hziR6iMyU4/s400/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5291499369496753602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Open the file with Notepad and find/replace all the &lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;$00&lt;/span&gt; strings with an empty string.  The file now looks a lot more readable&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Click on screenshot 4 to see a larger image&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QfcS6HZ5Sws/SW87pGd695I/AAAAAAAAAO0/B6NymfxlvCI/s1600-h/Picture+6.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 364px; height: 495px;" src="http://4.bp.blogspot.com/_QfcS6HZ5Sws/SW87pGd695I/AAAAAAAAAO0/B6NymfxlvCI/s400/Picture+6.png" alt="" id="BLOGGER_PHOTO_ID_5291513664480409490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the example we are working through the address we are interested in is&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;[&lt;span style="color: rgb(255, 0, 0);"&gt;8&lt;/span&gt;(&lt;span style="color: rgb(0, 102, 0);"&gt;^83&lt;/span&gt;^83)(&lt;span style="color: rgb(0, 102, 0);"&gt;^82&lt;/span&gt;^8A)]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;which can be seen shown in &lt;span style="color: rgb(255, 0, 0);"&gt;red&lt;/span&gt; at the bottom of &lt;span style="font-style: italic;"&gt;Screenshot 4&lt;/span&gt; above.   This address is a &lt;span style="font-style: italic;"&gt;row&lt;/span&gt; within the Mork database.  The row is delimited with open and close square brackets [] and is made up of a &lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;Row Object ID&lt;/span&gt; followed by a series of cells delimited by open and close brackets ().  The cells contain a &lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;column name&lt;/span&gt; and a&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;value&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-weight: bold; color: rgb(0, 102, 0);"&gt;column names&lt;/span&gt; are defined within a &lt;a href="https://developer.mozilla.org/en/Mork_Structure#Dicts"&gt;&lt;span style="font-style: italic;"&gt;dict&lt;/span&gt;&lt;/a&gt; delimited with &lt;&gt; shown in &lt;span style="color: rgb(0, 102, 0);"&gt;green&lt;/span&gt; at the start of &lt;span style="font-style: italic;"&gt;Screenshot 4&lt;/span&gt; above.  It can be seen that two column names are relevant here &lt;span style="font-style: italic;"&gt;name&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;value&lt;/span&gt;, given &lt;a href="https://developer.mozilla.org/en/Mork_Structure#Oids"&gt;&lt;span style="font-style: italic;"&gt;object ids&lt;/span&gt;&lt;/a&gt; of 83 and 82 respectively.&lt;br /&gt;&lt;br /&gt;The values are defined within the next dict down.   The one relevant to our address are shown in red.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;[&lt;span style="color: rgb(255, 0, 0);"&gt;8&lt;/span&gt;(&lt;span style="color: rgb(0, 102, 0);"&gt;^83&lt;/span&gt;^83)(&lt;span style="color: rgb(0, 102, 0);"&gt;^82&lt;/span&gt;^8A)]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; decodes to&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;[&lt;span style="color: rgb(255, 0, 0);"&gt;8&lt;/span&gt;(&lt;span style="color: rgb(0, 102, 0);"&gt;^Name&lt;/span&gt;^searchbar-history)(&lt;span style="color: rgb(0, 102, 0);"&gt;^Value&lt;/span&gt;^vmware fusion)]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-weight: bold; color: rgb(0, 102, 0);"&gt;Name&lt;/span&gt; column contains the type of record - &lt;span style="font-weight: bold; font-style: italic;"&gt;searchbar-history&lt;/span&gt; means what it says on the tin, other values may relate to various fields found on web page forms.  The query field on the Google Firefox start page is represented by &lt;span style="font-style: italic; font-weight: bold;"&gt;q&lt;/span&gt; .&lt;br /&gt;&lt;br /&gt;Encase does not report these records particularly well.   I chose to export relevant records into a spreadsheet and manually add the physical sector and sector offset of each &lt;span style="font-style: italic;"&gt;row&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;References&lt;br /&gt;&lt;/span&gt;https://support.guidancesoftware.com/forum/showpost.php?p=115379&amp;amp;postcount=2&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;http://www.mozilla.org/mailnews/arch/mork/primer.txt&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;https://developer.mozilla.org/en/Mork_Structure&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-3303756429248706974?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/3303756429248706974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=3303756429248706974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/3303756429248706974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/3303756429248706974'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2009/01/encase-v6-comprehensive-internet.html' title='Encase v6 Comprehensive Internet History Search and Firefox Mork Databases'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_QfcS6HZ5Sws/SW8ozor-4zI/AAAAAAAAAOU/v7kW7R7JHsE/s72-c/Picture+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-9205075972875713023</id><published>2008-11-10T12:23:00.008Z</published><updated>2009-12-08T06:09:27.600Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Goodmans'/><category scheme='http://www.blogger.com/atom/ns#' term='Satnav'/><category scheme='http://www.blogger.com/atom/ns#' term='GPS'/><title type='text'>Goodmans GNAV12 sat nav device</title><content type='html'>&lt;p style="clear: both"&gt;This device runs destinator software within a Windows 4.2 CE OS and is similar to the &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2008/07/medion-mdpna150-sat-nav-device.html"&gt;Medion MDPNA150&lt;/a&gt; I looked at earlier. It has an external SD card slot which was not populated on the one I looked at. It also has internal flash memory.&lt;/p&gt;&lt;p style="clear: both"&gt;I accessed the device via Mobile Device Centre in Vista and copied off the contents of the &lt;em&gt;ResidentFlash &lt;/em&gt;volume. At the path &lt;em&gt;DestinatorApps\Destinator\UK_Ireland &lt;/em&gt;I found &lt;em&gt;Previous.dat. &lt;/em&gt;&lt;span&gt;T&lt;/span&gt;&lt;span&gt;his file contains &lt;em&gt;Recent Locations &lt;/em&gt;which are locations that the user chose to navigate to.&lt;br /&gt;&lt;br /&gt;I have deconstructed the records found within &lt;em&gt;Previous.dat.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Key (click on table to view larger image)&lt;/strong&gt;&lt;br /&gt;&lt;/em&gt;&lt;/span&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://2.bp.blogspot.com/_QfcS6HZ5Sws/SRgz4RvWAeI/AAAAAAAAAMo/gxu5n2WOGJ0/s1600-h/Picture+3.png" class="image-link"&gt;&lt;img src="http://2.bp.blogspot.com/_QfcS6HZ5Sws/SRgz4RvWAeI/AAAAAAAAAMo/gxu5n2WOGJ0/s400/Picture+3.png" height="200" width="400" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;/a&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;Example Records (click on records to view larger image)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="clear: both"&gt;&lt;a href="http://4.bp.blogspot.com/_QfcS6HZ5Sws/SRg6QXQ4oKI/AAAAAAAAAMw/ffhjp2WvPuQ/s1600-h/Picture+4.png" class="image-link"&gt;&lt;img src="http://4.bp.blogspot.com/_QfcS6HZ5Sws/SRg6QXQ4oKI/AAAAAAAAAMw/ffhjp2WvPuQ/s400/Picture+4.png" border="0" id="BLOGGER_PHOTO_ID_5267023817006948514" height="251" alt="" width="400" style=" text-align: center; display: block; margin: 0 auto 10px;" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Each record contains two sets of longitude and latitude co-ordinates stored one after the other. I speculate that one set is actual and the other set is nearest road. In my sample they were either very similar or the same. Each longitude or latitude value is stored as a double which requires 8 bytes therefore 32 bytes are required to store both sets. The two sets are followed by a further 16 bytes of data -use unknown, which completes the record.&lt;br /&gt;&lt;br /&gt;To locate these co-ordinates I found it easier to count back from the start of the following record. The other problem to overcome is how to convert the doubles to a decimal value. Encase does not have a easy way to do this. The data interpreter in Winhex can do this. The hex editor 0xED on a mac can also do this but rounds up to fewer decimal places than winhex.&lt;br /&gt;&lt;br /&gt;I can supply on request an Enscript (written by my friend Oliver Smith over at &lt;a href="http://www.cy4or.co.uk"&gt;Cy4or&lt;/a&gt;) that will parse out these records.&lt;/p&gt;&lt;br class='final-break' style='clear: both' /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-9205075972875713023?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/9205075972875713023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=9205075972875713023' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/9205075972875713023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/9205075972875713023'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2008/11/goodmans-gnav12-sat-nav-device.html' title='Goodmans GNAV12 sat nav device'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_QfcS6HZ5Sws/SRgz4RvWAeI/AAAAAAAAAMo/gxu5n2WOGJ0/s72-c/Picture+3.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-4490498295855630079</id><published>2008-11-10T09:28:00.012Z</published><updated>2008-11-10T12:08:14.705Z</updated><title type='text'>HP QuickPlay version 2.3</title><content type='html'>A HP media centre laptop came through our lab recently.   Its main OS was XP Media Center edition.  However it appeared to have another XP OS installed on a separate 1GB partition.  This was a case where the suspect was suspected of hiding stuff and regularly re-installing his OS to cover his tracks - so this second OS was of interest.&lt;br /&gt;&lt;br /&gt;Encase listed three partitions&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QfcS6HZ5Sws/SRgLt8tG1YI/AAAAAAAAAMI/pLhAKRHE52E/s1600-h/quickplay1.jpg"&gt;&lt;img style="cursor: pointer; width: 217px; height: 400px;" src="http://4.bp.blogspot.com/_QfcS6HZ5Sws/SRgLt8tG1YI/AAAAAAAAAMI/pLhAKRHE52E/s400/quickplay1.jpg" alt="" id="BLOGGER_PHOTO_ID_5266972648227132802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Mounting the drive PDE and looking at the disk in Disk Management showed&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QfcS6HZ5Sws/SRgMVrHZEnI/AAAAAAAAAMQ/3cmZF79bsB0/s1600-h/quickplay2.jpg"&gt;&lt;img style="cursor: pointer; width: 600px; height: 66px;" src="http://2.bp.blogspot.com/_QfcS6HZ5Sws/SRgMVrHZEnI/AAAAAAAAAMQ/3cmZF79bsB0/s400/quickplay2.jpg" alt="" id="BLOGGER_PHOTO_ID_5266973330700309106" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The Windows Initialise case module reported the following for the OS on the 1GB partition&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QfcS6HZ5Sws/SRgNXMzrDNI/AAAAAAAAAMY/7Upot4sOse0/s1600-h/quickplay3.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 258px;" src="http://2.bp.blogspot.com/_QfcS6HZ5Sws/SRgNXMzrDNI/AAAAAAAAAMY/7Upot4sOse0/s400/quickplay3.jpg" alt="" id="BLOGGER_PHOTO_ID_5266974456435903698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The 1GB partition has a Partition Type of D7&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QfcS6HZ5Sws/SRgeht8Z1PI/AAAAAAAAAMg/j-IE5BEDglE/s1600-h/quickplay4.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 77px;" src="http://2.bp.blogspot.com/_QfcS6HZ5Sws/SRgeht8Z1PI/AAAAAAAAAMg/j-IE5BEDglE/s400/quickplay4.jpg" alt="" id="BLOGGER_PHOTO_ID_5266993328827258098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A quick &lt;a href="http://www.google.co.uk/search?hl=en&amp;amp;client=firefox-a&amp;amp;rls=org.mozilla:en-US:official&amp;amp;hs=Hwp&amp;amp;sa=X&amp;amp;oi=spell&amp;amp;resnum=0&amp;amp;ct=result&amp;amp;cd=1&amp;amp;q=partition+type+d7&amp;amp;spell=1"&gt;google&lt;/a&gt; began to throw some light on the matter.  It seems that the laptop has HP Quickplay 2.3 installed.  This technology allows users to access multimedia disks without booting into the main operating system.  The version of XP on the partition with partition type D7 is XP embedded.  This OS facilitates the &lt;span style="font-style: italic;"&gt;quickplay &lt;/span&gt;function.  Later versions of HP Quickplay do not use this method. &lt;br /&gt;&lt;br /&gt;It seems that a number of other manufacturers use the D7 partition type for similar purposes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;References&lt;/span&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/QuickPlay"&gt;&lt;br /&gt;http://en.wikipedia.org/wiki/QuickPlay&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.goodells.net/dellrestore/mediadirect.htm"&gt;http://www.goodells.net/dellrestore/mediadirect.htm&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.asifism.com/installing-hp-quickplay-on-your-laptopnotebook-vista-xp/"&gt;http://www.asifism.com/installing-hp-quickplay-on-your-laptopnotebook-vista-xp/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-4490498295855630079?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/4490498295855630079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=4490498295855630079' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/4490498295855630079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/4490498295855630079'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2008/11/hp-quickplay-version-23.html' title='HP QuickPlay version 2.3'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_QfcS6HZ5Sws/SRgLt8tG1YI/AAAAAAAAAMI/pLhAKRHE52E/s72-c/quickplay1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-6756566937438620743</id><published>2008-10-08T16:25:00.011+01:00</published><updated>2009-12-08T06:22:30.943Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Satnav'/><category scheme='http://www.blogger.com/atom/ns#' term='GPS'/><category scheme='http://www.blogger.com/atom/ns#' term='Sony'/><title type='text'>Sony NV-U50 G Sat Nav device</title><content type='html'>Some of you may be thinking that this blog has stopped being a computer forensics blog and is now only covering sat navs.  It seems that way lately, but it is just that my computer cases are all run of the mill whilst sat navs are nearly always new and exiting!&lt;br /&gt;&lt;br /&gt;The Sony NV-U50 G sat nav I looked at is running Sony Personal Navigation System version 1.06 software  within Windows CE.  It has 512mb of internal memory and no external flash media.  I accessed it via Mobile Device Centre in Vista (probably Active Sync will suffice but I did not test with this) and discovered a &lt;span style="font-style: italic;"&gt;My Flash Disk &lt;/span&gt;volume as normal.  A folder named &lt;span style="font-style: italic;"&gt;Sony&lt;/span&gt; will be accessible and within the &lt;span style="font-style: italic;"&gt;NAV-U&lt;/span&gt; sub folder the following notable files can be found:&lt;br /&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;recent.txt&lt;/li&gt;&lt;li&gt;favourites.txt&lt;br /&gt;&lt;/li&gt;&lt;li&gt;prefs.ini&lt;/li&gt;&lt;/ul&gt;All three files are plain text.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;prefs.ini &lt;/span&gt;is used to store user preferences but also contains three useful values:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;hometarget&lt;/li&gt;&lt;li&gt;lasttarget&lt;/li&gt;&lt;li&gt;LastVisibleArea&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-style: italic;"&gt;hometarget &lt;/span&gt;contains the postcode and latitude and longtitude coordinates of the user set home location.  &lt;span style="font-style: italic;"&gt;lasttarget &lt;/span&gt;was not populated on the device I examined but I understand from colleagues that it can contain the last navigated to location.  Both&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;these values comprise of seventeen  fields separated by the pipe symbol (|).&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;LastVisibleArea&lt;/span&gt; contains the lat/long coordinates of the bottom left and top right corners of the last map displayed on the device prior to being switched off.   I had seen that the &lt;a href="http://support.sony-europe.com/eve/navigation/nvu/nvu.aspx?site=odw_en_GB&amp;amp;m=NV-U50"&gt;manual&lt;/a&gt; for the device contained the note:&lt;span style="font-style: italic;"&gt;&lt;br /&gt;The Sony Personal Navigation System always opens with the screen that was active at the time you switched off the device.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;recent.txt &lt;/span&gt;and &lt;span style="font-style: italic;"&gt;favourite.txt &lt;/span&gt;contained &lt;span style="font-style: italic;"&gt;recently navigated to &lt;/span&gt;locations and user stored favourite destinations respectively.  Each location record comprised of &lt;span style="font-style: italic;"&gt; &lt;/span&gt;seventeen  fields separated by the pipe symbol (|)&lt;span style="font-style: italic;"&gt; &lt;/span&gt;in both files&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;/span&gt;allowing them to be imported into an excel spreadsheet&lt;span style="font-style: italic;"&gt; &lt;/span&gt;using the text data import wizard.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Example of a single favourite record.&lt;/span&gt;&lt;blockquote&gt;GFRIEND|-|48|12366|-|-|SW1 1AA|-|-|-|-|-0.142076|51.50107|-|-|-|-|&lt;br /&gt;&lt;/blockquote&gt;Field 3 &lt;/span&gt;in most cases contained the value 48 which I understand to be the Country Code used by Sony/Navteq for the UK, &lt;span style="font-style: italic;"&gt;Field 4&lt;/span&gt; had in some cases a five digit number beginning with the digits 12.  I speculate that these fields have something to do with the RDS/TMC facility available with this device.  Fields 12 and 13 contained the Longtitude and Latitude coordinates of the location record (stored in decimal notation).  Fields 16 and 17 if populated contained a second set of Longtitude and Latitude coordinates which I can only speculate may be journey origins.&lt;br /&gt;&lt;br /&gt;The device can also store pre-planned itineraries and these are stored within files with a .rte file extension in the Sony/NAV-U/Routes folder.  These files are plain text formatted the same way as &lt;span style="font-style: italic;"&gt;recent.txt &lt;/span&gt;and &lt;span style="font-style: italic;"&gt;favourite.txt .&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;By carrying out a live examination of the device most the data above can be ascertained, however where a user has allocated a name to a favourite or itinerary only the allocated name will be displayed - not the underlying address and lat/long coordinates.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;UPDATED 17th December 2008&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have been asked whether the order of the entries in &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Recent.txt &lt;/span&gt;had any significance.   I have carried out some further testing and established:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;i)    Recent.txt will contain a maximum of thirty entries.&lt;br /&gt;&lt;br /&gt;ii)    If the entry is generated by a user choosing to navigate to a Favourite via the Favourites menu button the display name will be stored along with other location information within Recent.txt.&lt;br /&gt;&lt;br /&gt;iii)    The most recently entered location is recorded last.&lt;br /&gt;&lt;br /&gt;iv)    Once there are thirty entries within &lt;span style="font-style: italic;"&gt;Recent.txt &lt;/span&gt;when a new location is added the oldest record at the top of the list is deleted. An exception to this is if a new location duplicates an entry already stored in &lt;span style="font-style: italic;"&gt;Recent.txt&lt;/span&gt; the older entry is deleted (wherever it was stored in the list) and a new location appended to the end of the list. &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;I also had another look at the secondary lat/long values and I am now of the view that they DO NOT contain journey origins.  During testing all the values I was able to populate in these fields were fairly near to the location chosen to navigate to.  I could not however discern their relevance.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-6756566937438620743?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/6756566937438620743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=6756566937438620743' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/6756566937438620743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/6756566937438620743'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2008/10/sony-nv-u50-g-sat-nav-device.html' title='Sony NV-U50 G Sat Nav device'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-7472758712183260694</id><published>2008-10-07T19:39:00.015+01:00</published><updated>2009-01-15T15:09:53.435Z</updated><title type='text'>Transition to XP 64</title><content type='html'>We upgrade our forensic workstations every eighteen months or so have just taken delivery of four shiny new ones.   This time I decided that the time had come for us to enter the brave new world of 64 bit operating systems.   I have read many peoples experiences of this on Digital Detective, Forensic Focus and so on and was expecting a number of difficulties.  However the driver for change is utilising 8gb ram so XP 64 bit was specified.   To be on the safe side I had the machines built in a dual boot configuration with XP 64 bit on one partition and XP 32 bit on another.  As an additional safeguard on the 64 bit side I installed VMWare Workstation and created an XP 32 bit VM.&lt;br /&gt;&lt;br /&gt;So if it helps anyone here is a list of what works (and what doesn't).&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 255);"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;XP 64 Software installations&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 255); font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;64 bit programs&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0); font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;font-size:medium;" &gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Encase 6.11.2 x64&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Encase installed OK.   Help About shows that the  PDE, VFS, EFS and Fastbloc SE modules are installed and I have successfully tested PDE.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold; font-style: italic;"&gt;Tomtology&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Tomtology x64 1.162, .NET 3.5 Redistributable and the keylock dongle drivers all installed  and working.&lt;/div&gt;&lt;div&gt;&lt;a href="http://forensicnavigation.com/#/downloads/4527959036"&gt;http://forensicnavigation.com/#/downloads/4527959036&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic; font-weight: bold;"&gt;7Zip&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic; font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal; font-style: normal;"&gt;&lt;a href="http://downloads.sourceforge.net/sevenzip/7z460-x64.msi"&gt;http://downloads.sourceforge.net/sevenzip/7z460-x64.msi&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic; font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic; font-weight: bold;"&gt;Ultramon&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic; font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal; font-style: normal;"&gt;&lt;a href="http://www.realtimesoft.com/files/UltraMon_2.7.1_en_x64.msi"&gt;http://www.realtimesoft.com/files/UltraMon_2.7.1_en_x64.msi&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic; font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Firefox&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic; font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;a href="http://wiki.mozilla-x86-64.com/Download"&gt;http://wiki.mozilla-x86-64.com/Download&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold; font-style: italic;"&gt;CodeMeter&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;CodeMeter Runtime 3.30a is needed for the FTK codemeter dongle.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold; font-style: italic;"&gt;Gimp 2.5.4&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic; font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="color: rgb(85, 26, 139); text-decoration: underline;"&gt;http://downloads.sourceforge.net/gimp-win/gimp-2.5.4-r26790-x64-setup.exe?modtime=1219882476&amp;amp;big_mirror=0&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic; font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="color: rgb(85, 26, 139); text-decoration: underline;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0); font-weight: bold;"&gt;32  bit programs that work within the 64 bit OS&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold; font-style: italic;"&gt;Encase 6.11.2 32 bit version&lt;/span&gt;&lt;/div&gt;&lt;div&gt;The 32 bit version installs and runs OK.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold; font-style: italic;"&gt;Access Data FTK&lt;/span&gt;&lt;/div&gt;&lt;div&gt;I had hoped to upgrade to FTK2 but a 64 bit version has not been released.  I did however decide to transfer our licences from the green keylock dongle to the Codemeter dongle.  There are detailed instructions on how to do this within the FTK2 box.  I used an internet connected laptop with the latest version of Licence Manager installed to carry out the transfer.  Once the licences were on the codemeter dongle I installed CodeMeter Runtime 3.30a (64 bit) onto the XP 64 bit box and then inserted the dongle.  It was successfully recognized.  FTK 1.81 and Registry Viewer 1.5.3 have been installed and they work OK.&lt;/div&gt;&lt;div&gt;&lt;a href="http://accessdata.com/downloads.html"&gt;http://accessdata.com/downloads.html&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold; font-style: italic;"&gt;Microsoft Office 2007&lt;/span&gt;&lt;/div&gt;&lt;div&gt;The office programs are 32 bit but are designed to work with a 64 bit MS OS.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold; font-style: italic;"&gt;VFC&lt;/span&gt;&lt;/div&gt;&lt;div&gt;I have installed VFC 1.2.4.3, the green keylock dongle drivers and VMWare Diskmount Utility. All seem to work OK.&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.vmware.com/download/eula/diskmount_ws_v55.html"&gt;http://www.vmware.com/download/eula/diskmount_ws_v55.html&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic; font-weight: bold;"&gt;C4P&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic; font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal; font-style: normal;"&gt;C4P v3.3.4 runs without issue.  However some work is needed to get the C4P graphics extractor enscript running.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic; font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-style: normal; font-weight: normal;"&gt;For Encase v6 64 bit running on XP 64 bit install the 64 bit MySQL 3.51 ODBC connector driver found at &lt;a href="http://dev.mysql.com/downloads/connector/odbc/3.51.html#winx64"&gt;http://dev.mysql.com/downloads/connector/odbc/3.51.html#winx64&lt;/a&gt;&lt;br /&gt;and also a MS hotfix found at &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=000364db-5e8b-44a8-b9be-ca44d18b059b&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=000364db-5e8b-44a8-b9be-ca44d18b059b&amp;amp;displaylang=en&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The latest C4P v4 graphics extractor enscript contains a mySQL database connection string which needs modification (if you are using mysql).  The string needs to be edited to read:&lt;br /&gt;&lt;br /&gt;Conn.Open("PROVIDER=MSDASQL;DRIVER={MySQL ODBC 3.51 Driver};SERVER=" + Com.serverName + ";DATABASE=" + DbName + ";" + "UID=c4p_user;PASSWORD=password;OPTION=3")&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;NetAnalysis&lt;/span&gt;&lt;br /&gt;NetAnalysis 1.38 beta 6 is running OK&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Irfanview&lt;/span&gt;&lt;br /&gt;Irfanview 4.20 is a running OK&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Saminside&lt;/span&gt;&lt;br /&gt;Saminside v2.5.7.1 is running OK&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Isobuster 1.9 Pro&lt;/span&gt;&lt;br /&gt;Isobuster 1.9 Pro works OK&lt;br /&gt;&lt;br /&gt;Various other utilities such as PSPad, FileAlyzer, WRR and WFA are also working OK.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic; color: rgb(51, 204, 0);"&gt;Things that did not work&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Well not much really&lt;/span&gt;.  The Microsoft powertoy picture resizer does not work but is adequately replaced with &lt;a href="http://adionsoft.net/fastimageresize/"&gt;http://adionsoft.net/fastimageresize/&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5057815281194312844-7472758712183260694?l=forensicsfromthesausagefactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forensicsfromthesausagefactory.blogspot.com/feeds/7472758712183260694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5057815281194312844&amp;postID=7472758712183260694' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/7472758712183260694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5057815281194312844/posts/default/7472758712183260694'/><link rel='alternate' type='text/html' href='http://forensicsfromthesausagefactory.blogspot.com/2008/10/transition-to-xp-64.html' title='Transition to XP 64'/><author><name>DC1743</name><uri>http://www.blogger.com/profile/14186532367794900206</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5057815281194312844.post-5194060537165292334</id><published>2008-09-04T08:10:00.018+01:00</published><updated>2009-12-08T06:20:55.345Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Satnav'/><category scheme='http://www.blogger.com/atom/ns#' term='GPS'/><category scheme='http://www.blogger.com/atom/ns#' term='Navman'/><title type='text'>Navman F20 Sat Nav device</title><content type='html'>Yet another Navman sat nav has come my way - an F20 (versionID 4.10.1029 BuildTime 2007-02-12, 09:38:57) and once again a different approach is required to access the relevant data files.   The last &lt;a href="http://forensicsfromthesausagefactory.blogspot.com/2008/06/navman-icn-510.html"&gt;Navman&lt;/a&gt; I looked at was a Windows CE device that became accessible using &lt;a href="http://www.microsoft.com/windowsmobile/en-us/help/synchronize/device-center.mspx"&gt;Mobile Device Centre in Vista&lt;/a&gt;.   I have not been able to access this device the same way and I believe the underlying OS is Linux based.  This &lt;a href="http://navmanunlocked.wikispaces.com/Unlock"&gt;site&lt;/a&gt; also states that the F20 is not running Windows CE.   The case markings also do not disclose the precise model within the F series range.  There are hidden service menus that will provide model and firmware information that are accessible by holding down the power and menu buttons together when powering on.&lt;br /&gt;&lt;br /&gt;There is an SD Card slot which on the device I examined was not populated.  The data was stored internally.  I was not able to access this device as a removable USB storage device despite tracking down a driver.  The only option left to me was to identify the storage within the device - luckily I discovered that the device has a micro SD card that is accessible without resorting to a full disassembly.  The following pictures show how to access the card.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QfcS6HZ5Sws/SL-KWZIPl3I/AAAAAAAAALI/JIw9D7zGjvQ/s1600-h/Snapshot+2008-09-03+15-20-25.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_QfcS6HZ5Sws/SL-KWZIPl3I/AAAAAAAAALI/JIw9D7zGjvQ/s400/Snapshot+2008-09-03+15-20-25.jpg" alt="" id="BLOGGER_PHOTO_ID_5242060608589764466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_QfcS6HZ5Sws/SL-KpamwPTI/AAAAAAAAALQ/V2mAZZtmoaY/s1600-h/Snapshot+2008-09-03+15-19-26.jpg"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_QfcS6HZ5Sws/SL-KpamwPTI/AAAAAAAAALQ/V2mAZZtmoaY/s400/Snapshot+2008-09-03+15-19-26.jpg" alt="" id="BLOGGER_PHOTO_ID_5242060935403683122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QfcS6HZ5Sws/SL-htGH-00I/AAAAAAAAALg/xqhPDXDMH8I/s1600-h/Snapshot+2008-09-03+15-16-52.jpg"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_QfcS6HZ5Sws/SL-htGH-00I/AAAAAAAAALg/xqhPDXDMH8I/s400/Snapshot+2008-09-03+15-16-52.jpg" alt="" id="BLOGGER_PHOTO_ID_5242086287392822082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The memory card was formatted FAT16 and within the Navman/System folder I identified three notable files:&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Recent.dat
