Regex 使用Perl解析注册表中的Microsoft Office 2013 MRU列表
我目前正在尝试解析Windows 7注册表中的键,该注册表包含Microsoft Office 2013的MRU列表。然而,当我试图在RegRipper中运行Perl脚本时,它说插件没有成功运行。我不确定我的代码中是否有语法错误,或者它是否无法像我写的那样解析注册表。最大的问题是其中一个键是以用户的LiveId命名的,它显示为LiveId_uuxxxxxx,并且随着用户的变化而变化,所以我希望这个插件能够工作,无论用户的LiveId是什么。谢谢Regex 使用Perl解析注册表中的Microsoft Office 2013 MRU列表,regex,perl,parsing,ms-office,mru,Regex,Perl,Parsing,Ms Office,Mru,我目前正在尝试解析Windows 7注册表中的键,该注册表包含Microsoft Office 2013的MRU列表。然而,当我试图在RegRipper中运行Perl脚本时,它说插件没有成功运行。我不确定我的代码中是否有语法错误,或者它是否无法像我写的那样解析注册表。最大的问题是其中一个键是以用户的LiveId命名的,它显示为LiveId_uuxxxxxx,并且随着用户的变化而变化,所以我希望这个插件能够工作,无论用户的LiveId是什么。谢谢 my $reg = Parse::Win32Reg
my $reg = Parse::Win32Registry->new($ntuser);
my $root_key = $reg->get_root_key;
# ::rptMsg("officedocs2013_File_MRU v.".$VERSION); # 20110830 [fpi] - redundant
my $tag = 0;
my $key_path = "Software\\Microsoft\\Office\\15.0";
if (defined($root_key->get_subkey($key_path))) {
$tag = 1;
}
if ($tag) {
::rptMsg("MSOffice version 2013 located.");
my $key_path = "Software\\Microsoft\\Office\\15.0";
my $of_key = $root_key->get_subkey($key_path);
if ($of_key) {
# Attempt to retrieve Word docs
my $word_mru_key_path = 'Software\\Microsoft\\Office\\15.0\\Word\\User MRU';
my $word_mru_key = $of_key->get_subkey($word_mru_key_path);
foreach ($word_mru_key->get_list_of_subkeys())
{
if ($key->as_string() =~ /LiveId_\w+/)
{
$word = join($key->as_string(),'\\File MRU');
::rptMsg($key_path."\\".$word);
::rptMsg("LastWrite Time ".gmtime($word_key->get_timestamp())." (UTC)");
my @vals = $word_key->get_list_of_values();
if (scalar(@vals) > 0) {
my %files
# Retrieve values and load into a hash for sorting
foreach my $v (@vals) {
my $val = $v->get_name();
if ($val eq "Max Display") { next; }
my $data = getWinTS($v->get_data());
my $tag = (split(/Item/,$val))[1];
$files{$tag} = $val.":".$data;
}
# Print sorted content to report file
foreach my $u (sort {$a <=> $b} keys %files) {
my ($val,$data) = split(/:/,$files{$u},2);
::rptMsg(" ".$val." -> ".$data);
}
}
else {
::rptMsg($key_path.$word." has no values.");
}
else {
::rptMsg($key_path.$word." not found.");
}
::rptMsg("");
}
}
正则表达式
LiveId_(\w+)
将在LiveId_uu之后获取字符串,您可以使用\1引用它,如,还可以提供输入和预期输出。否则,我们不知道正则表达式应该如何工作。输出是一个文本文档,其中列出了文件MRU键中的所有值以及上次写入时间日期和时间。就在文档名称旁边。我指的是文字输出。正则表达式非常具体,所以我们需要特定的输入和输出。如果您想将正则表达式应用于LiveId_uuxxxxxxx,应该很容易,但我们仍然知道该字符串所在的上下文。使用一个名为RegRipper的程序,它由许多不同的插件Perl脚本组成,这些插件Perl脚本解析注册表的各个部分,具体取决于您正在寻找的内容。在我的例子中,我想要的信息位于NTUSER.DAT文件中。因此,我将要解析的NTUSER.DAT文件提供给RegRipper,它运行适当的脚本并将输出转储到文本文件中。我在NTUSER.DAT中查找的文件MRU的完整路径是Word\\User MRU\\LiveId_7A5166EB69B271A475B25410BA565F1A63A66FD1BD8CF0F780A344EC2B287CCC1\\Plac然而,LiveId因用户而异。