Skip to content

Commit 342eb47

Browse files
committed
new method
1 parent a262b00 commit 342eb47

File tree

3 files changed

+78
-5
lines changed

3 files changed

+78
-5
lines changed

Registry.Test/TestRegistryHive.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -685,14 +685,27 @@ public void OneOff()
685685

686686
LogManager.Configuration = config;
687687

688-
var r = new RegistryHive(@"C:\Users\eric\Desktop\UsrClassStudent.datUp");
688+
var r = new RegistryHive(@"D:\!downloads\NTUSER_recover_anon.DAT");
689689
r.RecoverDeleted = true;
690690

691691

692692

693693
r.ParseHive();
694694

695-
695+
var del = r.DeletedRegistryKeys.Where(t => t.LastWriteTime.Value.Month == 2 && t.LastWriteTime.Value.Day == 13 && t.LastWriteTime.Value.Year == 2019 && t.LastWriteTime.Value.Minute == 46 && t.KeyName.Contains("Bookmarks")).ToList();
696+
//var del = r.DeletedRegistryKeys.Where(t => t.NkRecord.RelativeOffset == 5313048).ToList();
697+
698+
//RelativeOffset = 5313184 == panels
699+
//Relative offset 0x50B3B0 (5288880) == 28
700+
701+
var test = r.GetKey(11724520);
702+
703+
//"2/13/2019 7:46:59 AM -05:00"
704+
//"5207632"
705+
706+
var t1 = r.GetDeletedKey(5288880, DateTimeOffset.Parse("2/13/2019 7:46:59 AM -05:00").Ticks);
707+
708+
Debug.WriteLine(del.Count);
696709

697710
}
698711

Registry/Registry.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
<Copyright>Eric Zimmerman</Copyright>
1111
<PackageProjectUrl>https://github.com/EricZimmerman/Registry</PackageProjectUrl>
1212
<RepositoryUrl>https://github.com/EricZimmerman/Registry</RepositoryUrl>
13-
<AssemblyVersion>1.1.0.3</AssemblyVersion>
14-
<FileVersion>1.1.0.3</FileVersion>
15-
<Version>1.1.0.3</Version>
13+
<AssemblyVersion>1.1.0.4</AssemblyVersion>
14+
<FileVersion>1.1.0.4</FileVersion>
15+
<Version>1.1.0.4</Version>
1616
<PackageLicenseExpression>MIT</PackageLicenseExpression>
1717
</PropertyGroup>
1818

Registry/RegistryHive.cs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -735,6 +735,66 @@ public void ExportDataToCommonFormat(string outfile, bool deletedOnly)
735735
}
736736
}
737737

738+
public RegistryKey GetDeletedKey(long relativeOffset, long lastwritetimestampTicks)
739+
{
740+
// var segs = keyPath.Split('\\');
741+
742+
var keys = DeletedRegistryKeys.Where(t => t.NkRecord.RelativeOffset == relativeOffset).ToList();
743+
744+
745+
//TODO clean this up
746+
747+
if (!keys.Any())
748+
{
749+
var keys2 = CellRecords.Where(t => t.Value.RelativeOffset == relativeOffset).ToList();
750+
}
751+
752+
//get a list that contains all matching root level unassociated keys
753+
//var keys = DeletedRegistryKeys.Where(t => t.KeyPath == keyPath).ToList();
754+
755+
if (keys.Count() == 1)
756+
{
757+
return keys.First();
758+
}
759+
760+
761+
return keys.SingleOrDefault(t => t.LastWriteTime.Value.Ticks == lastwritetimestampTicks);
762+
763+
//
764+
// //drill down into each until we find the right one based on last write time
765+
// foreach (var registryKey in keys)
766+
// {
767+
// var foo = registryKey;
768+
//
769+
// var startKey = registryKey;
770+
//
771+
// for (var i = 1; i < segs.Length; i++)
772+
// {
773+
// foo = startKey.SubKeys.SingleOrDefault(t => t.KeyName == segs[i]);
774+
// if (foo != null)
775+
// {
776+
// startKey = foo;
777+
// }
778+
// }
779+
//
780+
// if (foo == null)
781+
// {
782+
// continue;
783+
// }
784+
//
785+
// if (foo.LastWriteTime.ToString() != lastwritetimestamp)
786+
// {
787+
// continue;
788+
// }
789+
//
790+
// return foo;
791+
//
792+
// // break;
793+
// }
794+
//
795+
// return null;
796+
}
797+
738798
public RegistryKey GetDeletedKey(string keyPath, string lastwritetimestamp)
739799
{
740800
var segs = keyPath.Split('\\');

0 commit comments

Comments
 (0)