
Examinador de arquivos de link do Windows (atalhos)
Uma ferramenta forense para exames de arquivos de link do Windows (ou seja, atalhos do Windows)
'lifer' é uma ferramenta de linha de comando para Windows ou *nix inspirada pelo whitepaper 'The Meaning of Link Files in Forensic Examinations' de Harry Parsonage e disponível aqui. Começou como uma ferramenta leve que escrevi para extrair certas informações de arquivos de link para auxiliar em investigações que realizava enquanto trabalhava como analista forense de computadores. Agora estou aposentado, mas pretendo expandir sua utilidade e publicá-la para que outros possam se beneficiar.
As informações extraídas estão em conformidade com o Documento de Especificação Aberta da Microsoft 'MS-SHLLNK', que pode ser encontrado online aqui. No momento da escrita, a maioria das partes da especificação versão 4.0 está implementada. Espero implementar a análise de arquivos de lista de saltos não abertos no futuro.
Detalhes dos arquivos a serem encontrados no diretório Test e como usá-los são fornecidos no arquivo '.\Test\Tests.txt'. O que se segue é um breve resumo...
Depois de instalar a ferramenta, abra um shell de linha de comando (ex.: bash ou Powershell) e a partir do diretório './lifer/src' digite:
lifer -s ./Test/Test1.lnk
Isso deve fornecer a saída:
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: A seção acima intitulada '{OPERATING SYSTEM (stat) DATA}' terá datas diferentes, pois estas dependerão das datas em que instalou e acedeu a esse ficheiro de link no seu próprio sistema. Os dados incorporados serão os mesmos, no entanto.
Uma saída mais completa (incluindo timestamps mais precisos) pode ser obtida omitindo a opção '-s'.
O máximo de detalhe sobre um ficheiro de link pode ser obtido usando a opção '-i', que também imprimirá detalhes conhecidos sobre quaisquer objetos idlist. Esta opção não é compatível com a opção '-s'.
Todos os ficheiros de link num diretório (pasta) podem ser analisados apenas passando o nome do diretório:
lifer ./src/Test/WinXP
(por brevidade, a saída não foi mostrada).
A saída mais útil para vários ficheiros de link pode ser criada enviando a saída como uma lista separada por tabulações (ou vírgulas) para um ficheiro que pode depois ser importado para uma folha de cálculo para análise ao seu ritmo. Isto pode ser feito assim:
lifer -o tsv ./src/Test/WinXP > WinXP.tsv
ou
lifer -so tsv ./src/Test/WinXP > WinXP.tsv
para um ficheiro que tenha alguns dos dados supérfluos e desinteressantes expurgados.
Strings dentro de ficheiros de link podem por vezes conter vírgulas. Como isso causa um conflito com o separador de campo, quaisquer vírgulas dentro de strings foram substituídas por ponto e vírgula (ou seja, ',' substituído por ';'). Isto é verdade apenas para a opção '-o csv' e não para as opções predefinidas '-o txt', '-o tsv' e '-o xml'.
Visite a Página de Versões e escolha o ficheiro executável apropriado para a sua máquina da versão mais recente e faça o download. Renomeie o executável para 'lifer' (ou 'lifer.exe' para Windows). Certifique-se de que tem os atributos corretos para ser executado como um ficheiro executável e coloque-o numa pasta que contenha os ficheiros de link que pretende examinar ou adicione a localização à sua variável PATH e estará pronto a usar.
A primeira coisa a fazer é garantir que tem o git instalado na sua máquina/dispositivo; num shell de linha de comando, mude para o diretório raiz desejado do seu projeto e emita o comando:
git clone https://github.com/Paul-Tew/lifer.git
Será criado um novo diretório chamado 'lifer'.
(Isso pode funcionar para instalações no Mac, mas não tenho o dinheiro necessário para testá-lo com certeza...) Como esta ferramenta é bastante básica, as dependências são mínimas: certifique-se de ter o compilador 'gcc' e as bibliotecas de desenvolvimento 'libc' relevantes instaladas, é só isso. Abra um terminal de linha de comando e navegue até o diretório ./lifer/src. Emita o comando:
gcc -Wall ./lifer.c ./liblife/liblife.c ./libbin2hex/libbin2hex.c -o lifer
Desde que não apareçam avisos ou erros, deverá ter agora um ficheiro executável 'lifer' no diretório; pode querer verificar isso emitindo o comando:
ls -la
Se estiver tudo bem, pode testar se o lifer funciona testando-o no ficheiro especificado no documento da Microsoft que incluí como parte do repositório git que clonou e que deve estar no diretório ./Test/. Pode fazer isso emitindo o comando:
./lifer ./Test/Test.lnk
Pode também testar se o lifer funciona num conjunto de ficheiros de link num diretório emitindo o comando:
./lifer ./Test/WinXP/
Instale a ferramenta no SO emitindo o comando:
sudo install ./lifer /usr/bin/
Isto permitir-lhe-á usar o lifer em qualquer lugar do seu sistema sem especificar o prefixo do diretório (ex.: lifer ./Test/Test.lnk em vez de ./lifer ./Test/Test.lnk)
O projeto lifer no GitHub vem completo com uma solução de projeto do Visual Studio 2017, por isso a forma mais fácil de criar um executável Windows é instalar primeiro o Visual Studio 2017. Existe uma versão gratuita (conhecida como versão 'community') disponível aqui. Depois de instalar o Visual Studio:
cd "F:\\lifer\src\x64\Debug\"
.\lifer.exe ..\..\Test\Test1.lnk
É possível criar o lifer no Windows sem instalar o Visual Studio, mas ainda assim precisará de descarregar e instalar as ferramentas de compilação do Visual C++ disponíveis aqui Uma vez instaladas, o lifer pode ser compilado no diretório ./src/ emitindo o comando:
CL lifer.c .\liblife\liblife.c .\Win\dirent.c .\Win\getopt.c .\libbin2hex\libbin2hex.c
'lifer' era originalmente uma ferramenta apenas para Linux/GNU que não era realmente portável para Windows até encontrar soluções para os principais obstáculos de navegar num diretório e analisar as opções de linha de comando da mesma forma que o GNU faz. Para tal, estou profundamente grato aos seguintes dois projetos:
Os utilizadores são encorajados a ler o whitepaper antes de atribuir qualquer significado aos resultados. Nenhum resultado deve ser atribuído a esta ferramenta sem uma compreensão COMPLETA do que a saída representa; isto aplica-se particularmente a questões de facto para determinação num tribunal de justiça. Nesses casos, cabe ao utilizador compreender plenamente ambos os documentos mencionados, bem como ter um conhecimento abrangente de como o Windows e outros SOs tratam a criação, movimentação e eliminação de tais ficheiros. É também necessário um conhecimento prático de como o 'lifer' interpretou e apresentou os dados (isto requer a leitura e compreensão do código).
Sou apenas um programador autodidata, por isso, sem dúvida, existem imensos erros e 'armadilhas' no código. Para tal, NÃO faço absolutamente NENHUMA promessa de que esta ferramenta não irá danificar o seu sistema. Tentei arduamente não estragar a sua máquina, mas o caminho para o inferno está pavimentado de boas intenções...
ESTE MATERIAL É FORNECIDO "NO ESTADO EM QUE SE ENCONTRA", SEM QUALQUER TIPO DE GARANTIA, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO, ÀS GARANTIAS IMPLÍCITAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM FIM ESPECÍFICO OU NÃO VIOLAÇÃO. ALGUMAS JURISDIÇÕES NÃO PERMITEM A EXCLUSÃO DE GARANTIAS IMPLÍCITAS, PELO QUE A EXCLUSÃO ACIMA PODE NÃO SE APLICAR A SI. EM NENHUM CASO SEREI RESPONSÁVEL PERANTE QUALQUER PARTE POR QUAISQUER DANOS DIRETOS, INDIRETOS, ESPECIAIS OU OUTROS DANOS CONSEQUENCIAIS DECORRENTES DE QUALQUER USO DESTE MATERIAL, INCLUINDO, SEM LIMITAÇÃO, QUAISQUER LUCROS CESSANTES, INTERRUPÇÃO DE NEGÓCIOS, PERDA DE PROGRAMAS OU OUTROS DADOS NO SEU SISTEMA DE TRATAMENTO DE INFORMAÇÃO OU DE OUTRA FORMA, MESMO QUE TENHAMOS SIDO EXPRESSAMENTE AVISADOS DA POSSIBILIDADE DE TAIS DANOS.
Paul Tew - Março de 2020