Artefatos do Windows · Aula 5 de 9
Shellbags
11 min de leitura
O Windows lembra como cada pasta era exibida na última vez em que um usuário a acessou no Explorador de Arquivos: tamanho e posição da janela, ordem de classificação, modo de exibição e tamanho dos ícones. Esses registros, chamados Shellbags, persistem depois que a pasta, a unidade USB ou o compartilhamento de rede deixam de estar disponíveis. Esta aula aborda onde eles são armazenados, como reconstruir caminhos de pastas a partir deles e até que ponto seus carimbos de data/hora são confiáveis.
O que são Shellbags e por que interessam aos peritos
Os Shellbags são gravados pelo shell do Windows, que controla o Explorador de Arquivos, a área de trabalho e as caixas de diálogo padrão Abrir/Salvar. Quando um usuário abre uma pasta pelo shell, o Windows registra a posição da pasta no namespace do shell (Área de Trabalho, Este Computador, E:\, Clients …) no hive do Registro do usuário, com um slot para suas configurações de exibição. O usuário não precisa alterar a exibição para que a entrada seja criada.
Isso é evidência de que uma conta de usuário específica navegou até uma pasta, incluindo pastas difíceis de identificar de outra forma:
- pastas em unidades removíveis que não estão mais conectadas;
- compartilhamentos de rede (por exemplo,
\\FILESRV01\Projects); - pastas dentro de arquivos ZIP abertos no Explorador de Arquivos como pastas compactadas;
- pastas que foram posteriormente excluídas, renomeadas ou apagadas de forma segura.
Os dados ficam em um hive por usuário, portanto são atribuídos à conta proprietária desse hive (Aula 2.2).
Onde ficam
No Windows 7, 8, 10 e 11, a maioria dos Shellbags fica em UsrClass.dat, em C:\Users\<user>\AppData\Local\Microsoft\Windows\UsrClass.dat:
Local Settings\Software\Microsoft\Windows\Shell\BagMRULocal Settings\Software\Microsoft\Windows\Shell\Bags
Em um sistema em execução, esse hive é montado como HKEY_USERS\<SID>_Classes. NTUSER.DAT também contém Software\Microsoft\Windows\Shell\BagMRU e Software\Microsoft\Windows\Shell\Bags; nessas versões, ele geralmente contém muito menos entradas, mas nem sempre está vazio, portanto analise ambos os hives.
Em uma coleta de triagem, espere encontrar UsrClass.dat com UsrClass.dat.LOG1 e .LOG2: o hive frequentemente está em estado sujo, e as entradas recentes podem existir apenas nos logs de transações até que sejam reaplicados (Aula 2.1).
Estrutura da árvore BagMRU
BagMRU é uma árvore que espelha o namespace do shell. A própria chave BagMRU é a raiz (a Área de Trabalho). Cada chave contém:
- Valores numerados (
0,1,2…, REG_BINARY). Cada um contém um_ item do shell_: o identificador binário de uma pasta filha, no formato ITEMIDLIST também usado em arquivos LNK. A subchave com o mesmo número contém os filhos dessa pasta, portanto o caminho completo de uma pasta é a cadeia de itens da raiz até ela. - MRUListEx (REG_BINARY): os números dos valores filhos como inteiros little-endian de 4 bytes, com o usado mais recentemente primeiro, terminando em
0xFFFFFFFF. - NodeSlot (REG_DWORD): o número_ n_ da chave
Bags\<n>que contém as configurações de exibição dessa pasta. EmBags\<n>\Shell\<folder type GUID>ficam valores comoMode,LogicalViewMode,SorteIconSize; uma subchaveComDlgaparece para pastas visualizadas pelas caixas de diálogo Abrir/Salvar.
Os números não têm significado: o valor 2 é simplesmente o terceiro filho registrado sob esse pai.
Tipos de itens do shell
Todo item do shell começa com um tamanho de 2 bytes e um indicador de tipo de classe de 1 byte no offset 2, que informa ao analisador como ler o restante.
| Tipo de classe | Tipo de item | O que contém | Exemplo |
|---|---|---|---|
| 0x1F | Pasta raiz | Índice de classificação (offset 3) e um GUID de 16 bytes (offset 4) | Meu Computador {20D04FE0-3AEA-1069-A2D8-08002B30309D}, Rede {F02C1A0D-BE21-4350-88B0-7367FC96EF3C} |
| 0x20–0x2F (frequentemente 0x2F) | Volume | Caminho com letra de unidade como uma string ASCII | E:\ |
| 0x31 | Entrada de arquivo, diretório | Tamanho, data/hora de modificação DOS, atributos, nome curto 8.3, blocos de extensão | CLIENTS / Clients |
| 0x32 | Entrada de arquivo, arquivo | Mesmo layout, para um arquivo que o shell trata como uma pasta | archive.zip |
| 0x40–0x4F | Local de rede | Nome do servidor ou compartilhamento, descrição | \\FILESRV01\Projects |
| 0x61 | URI | Uma URL, como um local FTP | ftp://files.example.org |
As pastas dentro de um arquivo ZIP aparecem abaixo do item do próprio arquivo, um dos poucos casos em que um nome de arquivo aparece nos Shellbags.
Carimbos de data/hora
Os Shellbags oferecem dois tipos diferentes de informação temporal; não os confunda.
Horários LastWrite das chaves
Cada chave BagMRU tem um horário LastWrite (FILETIME, UTC): a última alteração em qualquer valor dessa chave, como a adição de um novo filho, a reordenação de MRUListEx porque um filho foi revisitado ou a criação da chave. Portanto, o LastWrite de um pai indica quando sua lista de filhos foi alterada pela última vez, e o filho no início de MRUListEx é o mais provavelmente envolvido. Há um horário por chave; as visitas anteriores são sobrescritas.
Carimbos de data/hora dentro dos itens de entrada de arquivo
Um item de entrada de arquivo (0x31/0x32) armazena, a partir de seu início:
| Offset | Tamanho | Campo |
|---|---|---|
| 0x00 | 2 | Tamanho do item |
| 0x02 | 1 | Tipo de classe (0x31 diretório, 0x32 arquivo) |
| 0x04 | 4 | Tamanho do arquivo (0 para diretórios) |
| 0x08 | 4 | Última modificação, data e hora DOS |
| 0x0C | 2 | Atributos do arquivo (0x10 diretório) |
| 0x0E | var. | Nome curto (8.3), ASCII, terminado em nulo |
Após o nome curto vem um bloco de extensão com a assinatura 0xBEEF0004. Ele contém os horários de criação e último acesso (também em data/hora DOS), o nome longo em UTF-16LE e, no Windows 10 e 11 para pastas em NTFS, a referência de arquivo da pasta de 8 bytes (número da entrada da MFT de 6 bytes mais número de sequência de 2 bytes).
A data/hora DOS reúne uma data de 16 bits (bits 15–9: ano desde 1980; 8–5: mês; 4–0: dia) e uma hora de 16 bits (bits 15–11: hora; 10–5: minuto; 4–0: segundos divididos por 2). Os segundos são armazenados em incrementos de 2, portanto esses valores podem diferir dos carimbos de data/hora NTFS em até 2 segundos. Analisadores como o SBECmd os apresentam em UTC.
Esses são os horários MAC da própria pasta no momento em que o item foi gravado, não horários de navegação. Eles ajudam indiretamente: o item não pode ser anterior ao horário de modificação nele incorporado, e a referência da MFT identifica a pasta na $MFT da unidade (Aula 1.3).
"Primeira interação" e "última interação"
Os analisadores derivam esses valores dos horários LastWrite. Normalmente, se uma pasta está no início de MRUListEx de seu pai, o LastWrite do pai é apresentado como o horário da última interação com a pasta; se a chave da própria pasta não tem filhos, seu LastWrite é apresentado como primeira interação, pois nada alterou essa chave desde sua criação. Essas são inferências, não campos armazenados. Relate-as pela fonte ("a chave BagMRU\1\0\2 foi gravada pela última vez em T, com 2026 em primeiro lugar em seu MRUListEx"), não como "o usuário abriu 2026 em T", e corrobore com arquivos LNK, Listas de Atalhos (Aula 2.4) e horários de conexão USB (Aula 2.6).
O que os Shellbags comprovam e o que não comprovam
Os Shellbags sustentam a afirmação de que esta conta de usuário navegou até este caminho de pasta pelo shell do Windows, pelo menos uma vez e não depois do horário LastWrite relevante. Eles não comprovam:
- que algum arquivo da pasta foi aberto, copiado ou visto: nomes de arquivos comuns não são registrados;
- por quanto tempo ou com que frequência o usuário visitou a pasta;
- que cada pasta intermediária foi aberta separadamente: digitar um caminho completo na barra de endereços também cria nós para as pastas acima dele;
- qual dispositivo físico foi montado como E: (use os artefatos da Aula 2.6 ou a referência da MFT).
Excluir uma pasta não exclui seu Shellbag; apenas a limpeza do hive faz isso (Módulo 7).
Exemplos de ferramentas: ShellBags Explorer (árvore gráfica), SBECmd (SBECmd.exe -d <hive folder> --csv <out>, uma linha CSV por item com caminho absoluto, posição MRU, slot do nó, LastWrite e horários incorporados) e Registry Explorer para as chaves brutas.
Exemplo resolvido: E:\Clients\2026\Contracts
O UsrClass.dat do usuário mira (Windows 11, logs reaplicados; E: era uma unidade USB NTFS) contém esta ramificação:
| Chave | Representa | Valor seguido e seu item | MRUListEx | LastWrite (UTC) |
|---|---|---|---|---|
BagMRU | Área de Trabalho (raiz) | 1: 0x1F, GUID de Meu Computador | 1, 0 | 2026-03-12T07:58:20Z |
BagMRU\1 | Meu Computador | 0: 0x2F, E:\ | 0, 1 | 2026-03-18T14:05:40Z |
BagMRU\1\0 | E:\ | 2: 0x31, Clients | 2, 0, 1 | 2026-03-18T14:05:44Z |
BagMRU\1\0\2 | E:\Clients | 0: 0x31, 2026 | 0, 1 | 2026-03-18T14:05:51Z |
BagMRU\1\0\2\0 | E:\Clients\2026 | 1: 0x31, Contracts | 1, 0 | 2026-03-18T14:06:03Z |
BagMRU\1\0\2\0\1 | E:\Clients\2026\Contracts | nenhum (sem filhos), NodeSlot 38 | nenhum | 2026-03-18T14:06:03Z |
Caminho. A junção dos itens da raiz para baixo resulta em E:\Clients\2026\Contracts, com configurações de exibição em Bags\38.
Horários incorporados do item 2026. O campo de modificação contém a palavra de data 0x5C62 e a palavra de hora 0x8509. Data: 0x5C62 = 23.650; 23.650 >> 9 = 46, portanto o ano é 1980 + 46 = 2026; (23.650 >> 5) & 0xF = 3 (março); 23.650 & 0x1F = 2. Hora: 0x8509 = 34.057; 34.057 >> 11 = 16 horas; (34.057 >> 5) & 0x3F = 40 minutos; (34.057 & 0x1F) × 2 = 9 × 2 = 18 segundos. Resultado: 2026-03-02T16:40:18Z. O bloco 0xBEEF0004 fornece a criação em 2026-01-05T09:12:44Z e a entrada da MFT 64, sequência 1.
O que se pode concluir sobre E:\Clients\2026:
- A conta
miranavegou pelo shell atéE:\Clients\2026no volume que estava montado como E:. - A chave
E:\Clientsfoi gravada pela última vez em 2026-03-18T14:05:51Z, com2026no início de seu MRUListEx: a afirmação mais bem fundamentada é que2026foi adicionada à lista de pastas acessadas sobClients, ou movida para o início dela, naquele momento. - A chave
2026foi gravada pela última vez em 2026-03-18T14:06:03Z, comContractsno início, e a chaveContracts, sem filhos, apresenta o mesmo horário: às 14:06:03Z, o usuário chegou aContractspor meio de2026, provavelmente pela primeira vez. - Não é possível determinar quando
2026foi acessada pela primeira vez; as visitas anteriores são sobrescritas. As datas incorporadas descrevem a pasta e mostram apenas que o item foi gravado não antes de 2026-03-02T16:40:18Z. - Nada mostra quais arquivos em
Contractsforam abertos. Para vincular E: à unidade que contém a evidência, procure a entrada 64 da MFT na $MFT da imagem USB: sequência 1, nome2026, paiClientsconfirmariam o vínculo.
Foco no exame: Prepare-se para reconstruir um caminho completo de pasta a partir de uma ramificação BagMRU, incluindo locais removíveis ou de rede, e para identificar a conta com base no hive de origem. Pode ser solicitado que você forneça um horário LastWrite em ISO 8601 UTC, que o diferencie dos carimbos de data/hora incorporados da pasta ou que associe uma pasta à sua entrada da MFT. Saiba o que um Shellbag não comprova, especialmente que os arquivos contidos na pasta foram abertos.
Pontos principais
- Os Shellbags registram as pastas que um usuário acessou pelo shell do Windows, com configurações de exibição; eles persistem depois que a pasta, a unidade ou o compartilhamento deixam de estar disponíveis.
- No Windows 7 e posteriores, eles ficam principalmente em UsrClass.dat (
Local Settings\Software\Microsoft\Windows\Shell\BagMRUeBags), com menos entradas em NTUSER.DAT (Software\Microsoft\Windows\Shell\BagMRUeBags); colete também os arquivos .LOG1/.LOG2. - BagMRU é uma árvore: valores numerados contêm itens do shell, subchaves com o mesmo número contêm filhos, MRUListEx fornece a ordem e NodeSlot aponta para
Bags\<n>. - Os horários LastWrite das chaves mostram quando a lista de filhos de um nó foi alterada pela última vez; os carimbos de data/hora DOS dentro dos itens de entrada de arquivo são os horários MAC da própria pasta no momento do registro, com resolução de 2 segundos.
- Os valores de "primeira/última interação" são inferências a partir dos horários LastWrite; relate-os pela fonte e corrobore-os.
- Os Shellbags comprovam a navegação até um caminho, não que algum arquivo nele tenha sido aberto.
Questões de prática
Verifique o que você aprendeu. Estas questões não contam para o exame.
Entre para salvar seu progresso e continuar de onde parou. É grátis. Entrar