Unrm e lazarus

 A ferramenta unrm é capaz de copiar os blocos de dados de um sistema de arquivos, e em sua execução padrão, ele extrai apenas os blocos de dados não alocados do sistema de arquivos. Essa ferramenta é utilizada para tentar recuperar informações apagadas. É importante redirecionar a saída do programa unrm para outro sistema de arquivos diferente do analisado, caso contrário, o fluxo de bits gerado irá ocupar os blocos não alocados que deveriam ser extraídos, possivelmente sobrescrevendo as informações procuradas. O resultado da execução do programa unrm é apenas um enorme fluxo de bits sem qualquer sentido aparente. Para tentar reconstruir arquivos apagados ou outros tipos de dados a partir de um fluxo de bits qualquer, o TCT possui uma ferramenta chamada lazarus, que pega os dados produzidos pela ferramenta unrm e tenta criar alguma estrutura a partir de dados não estruturados. O processo de análise realizado pelo programa lazarus realiza os seguintes passos:

- Leitura de um bloco de dados da entrada (tipicamente são lidos blocos de 1024 bytes);
- Determinação do formato dos dados contidos no bloco lido – texto ou binário. Isso e feito pela checagem dos dados contidos nos 10% iniciais do bloco. Se eles são todos caracteres que podem ser impressos, o conteúdo é classificado como texto, caso contrário o programa assume que se trata de um bloco com dados binários;
- Se o bloco contém texto, o programa testa os dados contra um conjunto de expressões regulares para tentar determinar do que se trata;
- Se o bloco contém dados binários, o comando file é executado sobre o bloco. Se não há sucesso, os primeiros bytes do bloco são examinados para determinar se os dados parecem estar no formato ELF (representando um binário executável);
- Se o bloco (contendo dados binários ou texto) é reconhecido nos passos anteriores como sendo de um determinado tipo, ele é marcado como tal. Se esse bloco e de um tipo diferente do bloco processado anteriormente, então ele é salvo como um novo arquivo. Caso contrário, ele e concatenado ao bloco anterior. Se o bloco não é reconhecido nos passos anteriores, mas é posterior a um bloco reconhecido, o programa assume que o bloco em questão é uma continuação dos dados contidos no bloco reconhecido e, portanto, o concatena ao bloco anterior (considerando o Princıpio da Localidade);
A saída produzida pelo programa lazarus corresponde aos blocos de dados e um mapa dos blocos reconhecidos e seus respectivos tipos. É possível gerar uma saída no formato HTML, contendo um mapa com links que permitem navegar pelos dados interpretados.