一款用于检查Windows链接文件(即Windows快捷方式)的取证工具
'lifer' 是一款Windows或*nix命令行工具,其灵感来源于Harry Parsonage的白皮书《Link Files in Forensic Examinations》(可在此处获取)。该工具最初是我在担任计算机取证分析师期间为提取链接文件中的特定信息以协助调查而编写的轻量级工具。如今我已退休,但仍希望扩展其功能并公开发布,以便他人受益。
提取的信息符合微软开放规范文档'MS-SHLLNK'(可在线查阅此处)。截至撰写本文时,规范版本4.0的大部分内容已实现。我确实希望未来能实现未打开的跳转列表文件的解析。
Test目录中文件的相关信息以及如何使用这些文件的详细说明,请参见'.\Test\Tests.txt'文件。以下是简要概述……
安装工具后,打开命令行终端(例如bash或Powershell),从'./lifer/src'目录输入:
lifer -s ./Test/Test1.lnk
应得到如下输出:
LINK FILE -------------- .\Test\Test1.lnk
{**操作系统(stat)数据**}
最后访问时间: 2017-04-18 20:28:19 (UTC)
最后修改时间: 2017-04-18 20:28:19 (UTC)
最后状态变更: 2017-04-18 20:28:19 (UTC)
{**链接文件嵌入数据**}
{S_2.1 - ShellLinkHeader}
属性: 0x00000020 FILE_ATTRIBUTE_ARCHIVE
创建时间: 2008-09-12 20:27:17 (UTC)
访问时间: 2008-09-12 20:27:17 (UTC)
写入时间: 2008-09-12 20:27:17 (UTC)
目标大小: 0 字节
{S_2.3 - LinkInfo}
{S_2.3.1 - LinkInfo - VolumeID}
驱动器类型: DRIVE_FIXED
驱动器序列号: 307A8A81
卷标: [空]
本地基路径: C:\test\a.txt
{S_2.4 - StringData}
{S_2.4 - StringData - RELATIVE_PATH}
相对路径: .\a.txt
{S_2.4 - StringData - WORKING_DIR}
工作目录: C:\test
{S_2.5 - ExtraData}
{S_2.5.10 - ExtraData - TrackerDataBlock}
机器ID: chris-xps
Droid1: {94C77840-FA47-46C7-B356-5C2DC6B6D115}
Droid2: {7BCD46EC-7F22-11DD-9499-00137216874A}
UUID序列号: 153
UUID时间: 2008-09-10 10:23:17 (UTC)
UUID节点(MAC): 00:13:72:16:87:4A
注意:上面标题为'{操作系统(stat)数据}'的部分的日期会有所不同,因为这些日期取决于你安装和访问该链接文件的系统时间。然而,嵌入数据是相同的。
更完整(包含更精确时间戳)的输出可通过省略'-s'选项获得。
要获取链接文件最详细的信息,可使用'-i'选项,该选项也会打印已知的idlist对象的详细信息。此选项与'-s'选项不兼容。
解析目录(文件夹)中的所有链接文件,只需传递该目录名称:
lifer ./src/Test/WinXP
(为简洁起见,此处未显示输出)。
对于多个链接文件,最有用的输出可以通过将输出作为制表符(或逗号)分隔的列表发送到文件中,然后你可以导入到电子表格中进行分析。实现方式如下:
lifer -o tsv ./src/Test/WinXP > WinXP.tsv
或
lifer -so tsv ./src/Test/WinXP > WinXP.tsv
以生成一个删减了部分冗余和无关数据的文件。
链接文件中的字符串有时可能包含逗号。由于这会与字段分隔符冲突,字符串中的任何逗号都会被替换为分号(即','替换为';')。这仅适用于'-o csv'选项,而不适用于默认的'-o txt'、'-o tsv'和'-o xml'选项。
访问发布页面,从最新发布版中选择适合你机器的可执行文件并下载。将可执行文件重命名为'lifer'(Windows系统为'lifer.exe')。确保其具备可执行文件的正确属性,然后将其放在包含要检查的链接文件的文件夹中,或将其位置添加到PATH环境变量中,即可使用。
首先确保你的机器/设备上已安装git;在命令行终端中,切换到所需的项目根目录并执行命令:
git clone https://github.com/Paul-Tew/lifer.git
将创建一个名为'lifer'的新目录。
(可能适用于Mac安装,但我没有足够的资金来完全测试……) 由于该工具比较简单,依赖项很少,只需确保安装了'gcc'编译器和相关的'libc'开发库即可。 启动命令行终端,导航到**./lifer/src**目录。 执行命令:
gcc -Wall ./lifer.c ./liblife/liblife.c ./libbin2hex/libbin2hex.c -o lifer
如果没有出现警告或错误,你将在该目录中获得一个名为'lifer'的可执行文件,可以通过以下命令检查:
ls -la
如果一切正常,可以通过测试Microsoft文档中指定的文件(该文件包含在你克隆的git仓库中,位于./Test/目录下)来测试lifer是否工作。执行命令:
./lifer ./Test/Test.lnk
你也可以测试lifer对目录中的一组链接文件是否有效,执行命令:
./lifer ./Test/WinXP/
通过以下命令将工具安装到操作系统中:
sudo install ./lifer /usr/bin/
这将使你能够在系统任何位置使用lifer,而无需指定目录前缀(例如,lifer ./Test/Test.lnk 而不是 ./lifer ./Test/Test.lnk)
lifer的GitHub项目附带了一个Visual Studio 2017项目解决方案,因此创建Windows可执行文件最简单的方法是先安装Visual Studio 2017。可在此处获取免费版本(称为“社区版)这里。 安装Visual Studio后:
cd "F:\\lifer\src\x64\Debug\"
.\lifer.exe ..\..\Test\Test1.lnk
也可以在Windows上不安装Visual Studio而构建lifer,但你仍然需要下载并安装Visual C++构建工具,可在此处获取这里 安装后,可在./src/目录中通过执行以下命令构建lifer:
CL lifer.c .\liblife\liblife.c .\Win\dirent.c .\Win\getopt.c .\libbin2hex\libbin2hex.c
'lifer'最初仅适用于Linux/GNU,在找到解决主要障碍——目录导航和以与GNU相同方式解析命令行选项——的解决方案之前,无法真正移植到Windows。为此,我深深感谢以下两个项目:
鼓励用户在赋予结果任何意义之前阅读白皮书。在未完全理解输出代表什么之前,不应将该工具的结果归因于任何事项;尤其是涉及法庭确定事实的案件。在这种情况下,用户有责任完全理解上述两份文档,并对Windows及其他操作系统如何创建、移动、删除此类文件有全面的了解。同时,还需要具备关于'lifer'如何解释和呈现数据的工作知识(这需要阅读并理解代码)。
我只是一个自学的程序员,因此代码中无疑存在大量错误和“陷阱”。为此,我绝不保证此工具不会损害你的系统。我尽力不造成你的机器故障,但通往地狱的道路是由善意铺成的……
本材料“按原样”提供,不附带任何明示或暗示的保证,包括但不限于适销性、特定用途适用性或不侵权的暗示保证。某些司法管辖区不允许排除默示保证,因此上述排除可能不适用于你。在任何情况下,我均不对任何一方因使用本材料而导致的任何直接、间接、特殊或其他后果性损害承担责任,包括但不限于任何利润损失、业务中断、程序或其他数据在信息处理系统上的丢失或其他情况,即使我们已明确告知此类损害的可能性。
Paul Tew - 2020年3月