
Examinador de archivos de enlace de Windows (accesos directos)
Una herramienta forense para el examen de archivos de enlace de Windows (es decir, accesos directos de Windows)
'lifer' es una herramienta de línea de comandos para Windows o *nix inspirada en el documento técnico 'The Meaning of Link Files in Forensic Examinations' de Harry Parsonage y disponible aquí. Comenzó su vida como una herramienta ligera que escribí para extraer cierta información de archivos de enlace para ayudar en las investigaciones que realizaba mientras trabajaba como analista forense informático. Ahora estoy retirado, pero busco ampliar su utilidad y publicarla para que otros puedan beneficiarse.
La información extraída está de acuerdo con el Documento de Especificación Abierta de Microsoft 'MS-SHLLNK' que se puede encontrar en línea aquí. En el momento de escribir esto, la mayoría de las partes de la especificación versión 4.0 están implementadas. Espero implementar el análisis de archivos de lista de saltos no abiertos en el futuro.
Los detalles de los archivos que se encuentran en el directorio Test y cómo usarlos se proporcionan en el archivo '.\Test\Tests.txt'. A continuación se presenta un breve resumen...
Una vez que haya instalado la herramienta, abra un shell de línea de comandos (por ejemplo, bash o Powershell) y desde el directorio './lifer/src' escriba:
lifer -s ./Test/Test1.lnk
Esto debería dar la salida:
LINK FILE -------------- .\Test\Test1.lnk
{**OPERATING SYSTEM (stat) DATA**}
Last Accessed: 2017-04-18 20:28:19 (UTC)
Last Modified: 2017-04-18 20:28:19 (UTC)
Last Changed: 2017-04-18 20:28:19 (UTC)
{**LINK FILE EMBEDDED DATA**}
{S_2.1 - ShellLinkHeader}
Attributes: 0x00000020 FILE_ATTRIBUTE_ARCHIVE
Creation Time: 2008-09-12 20:27:17 (UTC)
Access Time: 2008-09-12 20:27:17 (UTC)
Write Time: 2008-09-12 20:27:17 (UTC)
Target Size: 0 bytes
{S_2.3 - LinkInfo}
{S_2.3.1 - LinkInfo - VolumeID}
Drive Type: DRIVE_FIXED
Drive Serial No: 307A8A81
Volume Label: [EMPTY]
Local Base Path: C:\test\a.txt
{S_2.4 - StringData}
{S_2.4 - StringData - RELATIVE_PATH}
Relative Path: .\a.txt
{S_2.4 - StringData - WORKING_DIR}
Working Dir: C:\test
{S_2.5 - ExtraData}
{S_2.5.10 - ExtraData - TrackerDataBlock}
MachineID: chris-xps
Droid1: {94C77840-FA47-46C7-B356-5C2DC6B6D115}
Droid2: {7BCD46EC-7F22-11DD-9499-00137216874A}
UUID Sequence: 153
UUID Time: 2008-09-10 10:23:17 (UTC)
UUID Node (MAC): 00:13:72:16:87:4A
NOTA: La sección anterior titulada '{OPERATING SYSTEM (stat) DATA}' tendrá fechas diferentes, ya que estas dependerán de las fechas en que instaló y accedió a ese archivo de enlace en su propio sistema. Sin embargo, los datos incrustados serán los mismos.
Se puede obtener una salida más completa (incluyendo marcas de tiempo más precisas) omitiendo la opción '-s'.
Se puede obtener el máximo detalle sobre un archivo de enlace usando la opción '-i', que también imprimirá los detalles conocidos sobre cualquier objeto idlist. Esta opción no es compatible con la opción '-s'.
Todos los archivos de enlace en un directorio (carpeta) se pueden analizar simplemente pasando el nombre del directorio:
lifer ./src/Test/WinXP
(por brevedad, no se ha mostrado la salida).
La salida más útil para varios archivos de enlace se puede crear enviando la salida como una lista separada por tabuladores (o comas) a un archivo que luego se pueda importar a una hoja de cálculo para su análisis. Esto se puede lograr así:
lifer -o tsv ./src/Test/WinXP > WinXP.tsv
o
lifer -so tsv ./src/Test/WinXP > WinXP.tsv
para un archivo que tenga algunos de los datos superfluos y poco interesantes redactados.
Las cadenas dentro de los archivos de enlace a veces pueden contener comas. Debido a que esto entra en conflicto con el separador de campo, cualquier coma dentro de las cadenas se ha reemplazado con punto y coma (es decir, ',' reemplazado por ';'). Esto solo es cierto para la opción '-o csv' y no para las opciones predeterminadas '-o txt', '-o tsv' y '-o xml'.
Visite la Página de versiones y elija el archivo ejecutable apropiado para su máquina de la última versión y descárguelo. Renombre el ejecutable a 'lifer' (o 'lifer.exe' para Windows). Asegúrese de que tenga los atributos correctos para ejecutarse como un archivo ejecutable y colóquelo en una carpeta que contenga los archivos de enlace que desea examinar, o agregue la ubicación a su variable PATH y estará listo para usar.
Lo primero que debe hacer es asegurarse de tener git instalado en su máquina/dispositivo; en un shell de línea de comandos, cambie al directorio raíz de su proyecto deseado y ejecute el comando:
git clone https://github.com/Paul-Tew/lifer.git
Se creará un nuevo directorio llamado 'lifer'.
(Esto puede funcionar para instalaciones en Mac, pero no tengo el dinero necesario para probarlo a ciencia cierta...) Debido a que esta herramienta es bastante básica, las dependencias son mínimas; asegúrese de tener instalado el compilador 'gcc' y las bibliotecas de desarrollo 'libc' correspondientes, eso es todo. Inicie un terminal de línea de comandos y navegue hasta el directorio ./lifer/src. Ejecute el comando:
gcc -Wall ./lifer.c ./liblife/liblife.c ./libbin2hex/libbin2hex.c -o lifer
Si no aparecieron advertencias o errores, ahora debería tener un archivo ejecutable 'lifer' en el directorio; es posible que desee verificarlo ejecutando el comando:
ls -la
Si todo está bien, puede probar que lifer funciona probándolo en el archivo especificado en el documento de Microsoft que incluí como parte del repositorio git que clonó y que debería estar en el directorio ./Test/. Puede hacerlo ejecutando el comando:
./lifer ./Test/Test.lnk
También puede probar que lifer funciona en un conjunto de archivos de enlace en un directorio ejecutando el comando:
./lifer ./Test/WinXP/
Instale la herramienta en el SO ejecutando el comando:
sudo install ./lifer /usr/bin/
Esto le permitirá usar lifer en cualquier lugar de su sistema sin especificar el prefijo del directorio (por ejemplo, lifer ./Test/Test.lnk en lugar de ./lifer ./Test/Test.lnk)
El proyecto lifer en github viene completo con una solución de proyecto de Visual Studio 2017, por lo que la forma más sencilla de crear un ejecutable de Windows es instalar primero Visual Studio 2017. Hay una versión gratuita (conocida como versión 'community') disponible aquí. Una vez instalado Visual Studio:
cd "F:\\lifer\src\x64\Debug\"
.\lifer.exe ..\..\Test\Test1.lnk
Es posible crear lifer en Windows sin instalar Visual Studio, pero aún necesitará descargar e instalar las herramientas de compilación de Visual C++ disponibles aquí Una vez instaladas, lifer se puede compilar en el directorio ./src/ ejecutando el comando:
CL lifer.c .\liblife\liblife.c .\Win\dirent.c .\Win\getopt.c .\libbin2hex\libbin2hex.c
'lifer' era originalmente una herramienta solo para Linux/GNU que no era realmente portátil a Windows hasta que encontré soluciones a los principales obstáculos de navegar por un directorio y analizar las opciones de línea de comandos de la misma manera que lo hace GNU. Para ello, estoy profundamente agradecido a los siguientes dos proyectos:
Se anima a los usuarios a leer el documento técnico antes de asignar cualquier significado a los resultados. No se debe atribuir ningún resultado a esta herramienta sin una comprensión COMPLETA de lo que representa la salida; esto se aplica particularmente a asuntos de hecho para su determinación en un tribunal de justicia. En tales casos, es responsabilidad del usuario comprender completamente ambos documentos mencionados, así como tener un conocimiento exhaustivo de cómo Windows y otros SO tratan la creación, movimiento y eliminación de dichos archivos. También se necesita un conocimiento práctico de cómo 'lifer' ha interpretado y presentado los datos (esto requiere leer y entender el código).
Soy solo un programador autodidacta, por lo que sin duda hay muchos errores y "trampas" en el código. Por lo tanto, NO hago absolutamente NINGUNA promesa de que esta herramienta no dañe su sistema. Me esforcé por no dañar su máquina, pero el camino al infierno está pavimentado de buenas intenciones...
ESTE MATERIAL SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, YA SEA EXPRESA O IMPLÍCITA, INCLUYENDO, PERO NO LIMITADO A, LAS GARANTÍAS IMPLÍCITAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR O NO INFRACCIÓN. ALGUNAS JURISDICCIONES NO PERMITEN LA EXCLUSIÓN DE GARANTÍAS IMPLÍCITAS, POR LO QUE LA EXCLUSIÓN ANTERIOR PUEDE NO APLICARSE EN SU CASO. EN NINGÚN CASO SERÉ RESPONSABLE ANTE NINGUNA PARTE POR DAÑOS DIRECTOS, INDIRECTOS, ESPECIALES O CONSECUENCIALES POR EL USO DE ESTE MATERIAL, INCLUYENDO, SIN LIMITACIÓN, PÉRDIDAS DE BENEFICIOS, INTERRUPCIÓN DEL NEGOCIO, PÉRDIDA DE PROGRAMAS U OTROS DATOS EN SU SISTEMA DE MANEJO DE INFORMACIÓN O DE OTRO MODO, INCLUSO SI SE NOS HA ADVERTIDO EXPRESAMENTE DE LA POSIBILIDAD DE DICHOS DAÑOS.
Paul Tew - Marzo 2020