Вы находитесь на странице: 1из 74

Universidade Estadual de Maring Centro de Tecnologia Departamento de Informtica

Ferramenta Recuperador de Arquivos Perdidos Marcos Massao Yamamoto TG-01-04

Maring - Paran Brasil

Universidade Estadual de Maring Centro de Tecnologia Departamento de Informtica

Ferramenta Recuperador de Arquivos Perdidos Marcos Massao Yamamoto TG-01-04

Trabalho de Graduao apresentado ao Curso de Informtica, do Centro de Tecnologia, da Universidade Estadual de Maring. Orientador: Prof. MsC. Osvaldo Alves dos Santos

Maring Paran 2004

Marcos Massao Yamamoto

Ferramenta Recuperador de Arquivos Perdidos

Este exemplar corresponde redao final da monografia aprovada como requisito parcial para obteno do grau de Bacharel em Informtica da Universidade Estadual de Maring, pela comisso formada pelos professores:

________________________________________

Orientador: Prof. MsC. Osvaldo Alves dos Santos Departamento de Informtica, CTC, DIN

________________________________________

Prof. Dr. Ronaldo Augusto de Lara Gonalves Departamento de Informtica, CTC, DIN

________________________________________

Prof. MsC. Flvio Arnaldo Braga da Silva Departamento de Informtica, CTC, DIN

Maring, Fevereiro de 2004

ii

Universidade Estadual de Maring Departamento de Informtica Av. Colombo 5790, Maring-PR CEP 87020-900 Tel: (044) 2262727 R. 219/324 Fax: (044) 2232676

iii

Agradecimentos
Agradeo primeiramente a Deus, por ser fonte inesgotvel de luz que ilumina e guia todos os meus passos, trazendo paz e serenidade nos momentos escuros que fazem parte de nossas vidas. Agradeo de corao aos meus pais, pela oportunidade de vida, pelo amor e alegrias que os fazem dela, pelos sbios conselhos nos momentos difceis, pelos carinhos e motivao nos momentos de desesperos. Por tudo, e que somente palavras no podem agradecer... Agradeo ao meu orientador, Osvaldo, que mesmo passando por problemas de sade, esteve sempre ao meu lado, com nobres conselhos... Agradeo aos professores Ronaldo e Flvio, que me ajudaram e orientaram durante a ausncia de meu orientador... Agradeo aos demais professores, Franklin, Ricardo Ciferri, Morandini, que me ajudaram com conselhos e materiais, na medida que possvel... Agradeo ao meu pai, ao Elton, ao Morikawa e ao Slivak, que me auxiliaram tambm, na medida que possvel, com informaes, materiais e conselhos... Agradeo tambm a toda a galera do curso, que vivem reclamando e se queixando, e me deixaram mais desesperado no desenvolvimento de meu trabalho... E claro, agradeo ao tiozinho do boteco, que manteve a cerveja sempre gelada, trazendo paz, serenidade e muita alegria nos momentos em que a nossa cabea estava para explodir.

iv

Resumo

Neste trabalho sero apresentados propostas para implementao de uma ferramenta de recuperao de arquivos perdidos ou apagados. Estes podem ser removidos por ao de vrus, tabela de alocao de arquivos perdida, trilha zero danificada, mdia de baixa qualidade, queda ou oscilao de energia, formatao rpida indevida ou acidental. A ferramenta far recuperao de dados que foram perdidos logicamente, ou seja, quando estas informaes no estiverem contidas em blocos de disco com danos fsicos. Seu objetivo fazer uma varredura na mdia e apresentar todos os arquivos ainda disponveis, e executar a sua recuperao. A ferramenta ser baseada na recuperao de dados para o sistema operacional da famlia Microsoft Windows 9X e ME, com sistema de arquivos de tabela de alocao de arquivos. Sero apresentadas informaes referentes estrutura do disco rgido, os motivos que levam a remoo de arquivos e como possvel executar uma recuperao.

Abstract

In this work, will be shown proposals for implementation of an extinguished or lost archives recovery's tool. These can be removed by virus action, by File Allocation Table lost, by zero track damaged, by low quality media type, by energy oscillation or lack, or by improper or accidental fast formatting. The tool will make datas recovery that had been logically lost, or either, when these information is not contained in record's blocks that are physically damaged. It's objective is to make scans in the media and still to show all the available files, and to execute its recovery. The tool will be based on the recoverys data for Microsoft Windows 9X and ME operational system family, with files system of file allocation table. It will be shown references information to the hard disk structure, the reasons that take the files to be removed and how it is possible to execute a recovery.

vi

ndice
CAPTULO 1 INTRODUO
1.1 MOTIVAO 1.2 PROPSITOS E OBJETIVOS 1.2.1 Objetivos especficos 1.3 ORGANIZAO E AUDINCIA DO DOCUMENTO

1 1
1 2 2 2

CAPTULO 2 GERENCIAMENTO DE DISCO


2.1 INTRODUO 2.2 OS DISCOS E SUA ORGANIZAO 2.3 TCNICAS DE ALOCAO DE ESPAO EM DISCO 2.4 SISTEMA DE TABELA DE ALOCAO DE ARQUIVOS 2.4.1 Setor de boot 2.4.2 Tabela de alocao de arquivos 2.4.2.1 Interpretando a tabela de alocao de arquivos 2.4.3 Diretrio raiz 2.4.4 Nomes longos 2.5 ORGANIZAO LGICA: PARTIES E VOLUMES

4 4
4 4 5 9 10 11 13 15 17 18

CAPTULO 3 RECUPERAO DE ARQUIVOS PERDIDOS


3.1 INTRODUO 3.2 ARQUIVOS PERDIDOS 3.2.1 Problemas nas informaes de controle do sistema 3.2.2 Dados apagados por remoo ou formatao 3.3 FERRAMENTAS DE RECUPERAO 3.3.1 Ferramenta Disk Investigator 3.3.2 Ferramenta File Recover 3.3.3 Ferramenta Magic Recovery 3.3.4 Ferramenta Recover4All Professional 3.3.5 Ferramenta Super Undelete

21 21
21 21 21 22 25 25 26 27 28 29

CAPTULO 4 PROPOSTAS DE METODOLOGIAS DE RECUPERAO


4.1 INTRODUO 4.2 RECUPERANDO ARQUIVOS 4.2.1 Danos no Master Boot Record 4.2.2 Danos no setor de boot da partio 4.2.3 Danos na tabela de alocao de arquivos 4.2.4 Danos no diretrio raiz 4.2.5 Perda de arquivos por remoo ou formatao 4.3 TRANSFERNCIA DOS DADOS RECUPERADOS 4.4 LINGUAGEM DE PROGRAMAO C

30 30
30 31 31 33 35 36 37 38 39

CONCLUSO REFERNCIA BIBLIOGRFICA

41 43

vii

Lista de Figuras
Figura 2.1 Ilustrao do disco rgido 4 Figura 2.2 Ilustrao tcnica de alocao contgua 6 Figura 2.3 Ilustrao tcnica de alocao por lista encadeada 7 Figura 2.4 Ilustrao tcnica de alocao por lista encadeada com ndice 7 Figura 2.5 Ilustrao tcnica de alocao indexada 8 Figura 2.6 rea de sistema e rea de dados de uma partio 9 Figura 2.7 Hexadecimal do setor de boot 10 Figura 2.8 Diretrio raiz com a tabela de alocao de arquivos 12 Figura 2.9 Hexadecimal da tabela de alocao de arquivos 13 Figura 2.10 Ilustrao entrada de diretrio do sistema TAA 16 15 Figura 2.11 Hexadecimal do diretrio raiz 16 Figura 2.12 Ilustrao entrada de diretrio do sistema TAA 32 17 Figura 2.13 Hexadecimal entrada de diretrio com nome longo 18 Figura 2.14 Hexadecimal do setor contendo uma tabela de parties 20 Figura 3.1 Hexadecimal do diretrio raiz antes de uma remoo 23 Figura 3.2 Hexadecimal da tabela de alocao de arquivos antes de uma remoo 23 Figura 3.3 Hexadecimal do diretrio raiz depois de uma remoo 23 Figura 3.4 Hexadecimal da tabela de alocao de arquivos depois de uma remoo 23 Figura 3.5 Hexadecimal do diretrio raiz antes de uma formatao 24 Figura 3.6 Hexadecimal da tabela de alocao de arquivos antes de uma formatao 24 Figura 3.7 Hexadecimal do diretrio raiz depois de um formatao 24 Figura 3.8 Hexadecimal da tabela de alocao de arquivos depois de uma formatao 24 Figura 3.9 Tela principal da ferramenta Disk Investigator 25 Figura 3.10 Tela principal da ferramenta File Recover 26 Figura 3.11 Tela principal da ferramenta Magic Recovery 27 Figura 3.12 Tela principal da ferramenta Recover4All 28 Figura 3.13 Tela principal da ferramenta Super Undelete 29 Figura 4.1 Hexadecimal do comeo e final do setor de boot 31 Figura 4.2 Hexadecimal do setor contendo a tabela de parties 32 Figura 4.3 Hexadecimal incio TAA 12 34 Figura 4.4 Hexadecimal incio TAA 16 34 Figura 4.5 Hexadecimal incio TAA 32 34 Figura 4.6 Entrada reservada ponto e ponto-ponto dos sub-diretrios 37 Figura 4.7 Informao de tamanho do arquivo na entrada de diretrio 38

viii

Lista de Tabelas
Tabela 2.1 Campos do setor de boot Tabela 2.2 Valores das entradas da tabela de alocao de arquivos Tabela 2.3 Entrada de diretrio do sistema TAA 16 Tabela 2.4 Entrada de diretrio do sistema TAA 32 Tabela 2.5 Informao especial no campo nome Tabela 2.6 Configurao da tabela de parties Tabela 2.7 Entrada na tabela de parties 11 12 15 16 17 19 19

Captulo 1 Introduo

1.1 Motivao Com freqncia, perdemos arquivos contendo informaes importantes em nossos computadores. Perdas podem ocorrer por vrios motivos, como por ao de vrus, falhas no sistema de arquivos, mdia de baixa qualidade, etc. Geralmente, as informaes e os dados de um arquivo perdido so mantidos no disco, porm, no visveis ao sistema operacional. E ali sero mantidos, at serem sobrescritos. Existem muitas ferramentas e empresas especializadas que realizam a recuperao de arquivos perdidos. Mas geralmente, essa recuperao possui um custo muito elevado, sendo requisitada somente por empresas de grande porte, as quais trabalham com informaes realmente valiosas. necessrio, nos dias de hoje, onde a informatizao abrange a maior parte das pequenas empresas, comrcios e residncias, a disponibilidade de uma ferramenta de baixo custo e eficiente, para se recuperar arquivos nos problemas que ocorrem nos computadores em nosso dia-a-dia. de grande importncia pois, quando ocorrem problemas, nem mesmo os backups recuperam as ltimas atualizaes.

1.2 Propsitos e Objetivos A idia desse trabalho servir como base, para futura implementao, das possibilidades de recuperao de arquivos perdidos, conforme o problema especificado. So apresentados de forma simples e clara, os possveis sintomas da ocorrncia de problemas que ocasionam perdas, e como trat-los. Para cada caso, haver uma proposta de recuperao e, se o mesmo no for possvel, ser apresentada sua justificativa.

1.2.1 Objetivos especficos O objetivo principal desta monografia, apresentar propostas de metodologias de recuperao de arquivos, para que possam ser utilizadas em ensino de graduao, em uma implementao ou em um aperfeioamento para utilizao em outros projetos.

1.3 Organizao e Audincia do documento O captulo 2 traz uma viso geral da organizao de um disco, mostrando os conceitos e definies de sua arquitetura. So apresentados a organizao de sua estrutura fsica e como so configuradas as informaes referentes ao sistema de arquivo. Conheceremos tambm toda a estrutura de controle de uma mdia, e como identificar e traduzir as informaes inerentes ao disco. O captulo 2 um captulo conceitual. Assim sendo, a audincia que pode se beneficiar da leitura so pessoas que conhecem ou trabalham com implementao de ferramentas e aplicativos, mas no esto envolvidas especificamente com as atividades relacionadas arquitetura fsica de uma mdia, ou ento no as visualizam de maneira formalizada. O captulo 3 apresenta informaes relacionadas recuperao de arquivos perdidos. So apresentados e comentados os principais fatores que levam a uma perda de arquivos, onde so danificados ou alterados e porque resultam em remoes. So citadas tambm algumas ferramentas que executam a recuperao de arquivos apagados, descrevendo suas caractersticas e sua funcionalidade. A audincia que pode se beneficiar da leitura do captulo 3 so as pessoas que trabalham com computadores, mas no conhecem os motivos que levam a problemas em suas mquinas, ocasionando em perda de tempo e informaes relacionados a sua funo. O captulo 4 apresenta as propostas de metodologias de recuperao de arquivos perdidos, organizado conforme o problema que ocasionou essa remoo. So citados os sintomas que caracterizam o problema e como devem ser tratados para sua recuperao. Sero apresentados passo-a-passo os procedimentos que devem ser executados para se obter as

informaes referentes aos arquivos removidos. Ser comentada tambm, a linguagem de programao recomendada para a implementao dessa ferramenta, assim como as caractersticas que levaram a sua escolha. O captulo 4 est voltado para as pessoas com conhecimento em programao, que desejem implementar uma ferramenta que execute a recuperao de arquivos perdidos ou uma operao similar. Tambm podem se beneficiar da leitura estudiosos da rea de sistemas operacionais ou algoritmos e estrutura de dados, para utilizao em ensino de graduao.

Captulo 2

Gerenciamento de disco
2.1 Introduo Neste captulo, teremos uma viso geral sobre a estrutura fsica de discos rgidos e disquetes, e a organizao lgica das reas de um disco. Veremos os discos sob a perspectiva do sistema operacional, como ele os organiza e usa.

2.2 Os discos e sua organizao Um disco consiste em um prato com inmeros anis de cada lado, onde esses anis so conhecidos como trilhas. Cada trilha divido em sees, conhecidos como setores. Um setor a menor unidade fsica de armazenamento em um disco, geralmente com tamanho de 512 bytes. Veja ilustrao na figura 2.1. [Norton, 1989]

Figura 2.1 Ilustrao do disco rgido

As trilhas so uma estrutura lgica, estabelecidas na formatao de baixo nvel. O conjunto de trilha na mesma posio no disco, em relao cabea de leitura/escrita, considerada como cilindro. Uma cabea de leitura/escrita um transdutor que pode ser posicionado sobre uma trilha de disco por meio de um solenide ou motor, e pode alterar as propriedades magnticas da mdia. [Holzner,1990]

O sistema operacional no opera diretamente os setores, e sim, os agrupamentos de unidades. Um agrupamento de unidades um grupo seqencial de setores, e todos agrupamentos de unidades contm a mesma quantidade de setores. Todas essas estruturas, na mdia, so definidas na formatao, e nela o controlador de disco se baseia para se movimentar e se localizar na superfcie de um disco. [ClayBrook, 1985] 2.3 Tcnicas de alocao de espao em disco Nesta seo, ser apresentada a maneira de como os arquivos e diretrios so realmente armazenados, como o espao em disco gerenciado e como tudo isso funciona eficiente e confiavelmente. Conheceremos como so monitorados os blocos de disco que acompanham um arquivo e os mtodos utilizados por diferentes sistemas operacionais. Existem vrias tcnicas de alocao de espao em disco, e as principais so: alocao contgua, alocao por lista encadeada, alocao por lista encadeada utilizando um ndice e alocao indexada (Ns-I). 2.3.1 Alocao contgua Nessa tcnica, os arquivos so armazenados em blocos contnuos de dados, conforme ilustrao na figura 2.2. fcil de implementar, pois armazena nas entradas de diretrio somente o endereo do primeiro bloco do arquivo, e possui um excelente desempenho, pois o arquivo inteiro pode ser lido do disco em uma nica operao. [Unisinos, 2004] Infelizmente, a alocao contgua possui duas desvantagens. A primeira consiste na inviabilidade de gravao de arquivos, quando seu tamanho mximo no seja conhecido. Sem essa informao, o sistema operacional no sabe quanto espao em disco deve ser reservado. A segunda desvantagem o desperdcio do espao que, de outra maneira, poderia ser utilizado. Esse problema resulta na fragmentao do disco. [Tanenbaum, 2000]

Figura 2.2 Ilustrao tcnica de alocao contgua

2.3.2 Alocao por lista encadeada Na alocao por lista encadeada, cada arquivo mantido como uma lista encadeada de blocos de disco, conforme a ilustrao na figura 2.3. A primeira palavra de cada bloco de dados utilizada para apontar o bloco seguinte, e todos os blocos do disco podem ser utilizados, evitando a fragmentao. Nessa tcnica, armazena-se tambm somente o endereo do primeiro bloco do arquivo, na entrada de diretrio, onde o restante pode ser encontrado a partir dos blocos de dados. [Tanenbaum, 2000] Embora a leitura seqencial seja rpida, o acesso aleatrio extremamente lento. Alm disso, os dados armazenados em blocos no so potncia de dois, devido o espao ocupado pelo ponteiro da lista encadeada. [Tanenbaum, 2000]

Figura 2.3 Ilustrao tcnica de alocao por lista encadeada

2.3.3 Alocao por lista encadeada utilizando um ndice Nessa tcnica utilizada uma tabela, alocada na memria, para armazenar os ponteiros que apontam os bloco utilizados, conforme a ilustrao na figura 2.4. Dessa maneira, eliminase as desvantagens da alocao por lista encadeada, pois agiliza o acesso aos blocos e disponibiliza o bloco inteiro para o armazenamento dos dados. O sistema operacional MSDOS/Windows 95 utiliza esse mtodo, denominado Tabela de Alocao de Arquivos. [Unisinos, 2004]

Figura 2.4 Ilustrao tcnica de alocao por lista encadeada com ndice

A principal desvantagem desse mtodo que a tabela inteira deve estar na memria, o tempo todo, para o seu funcionamento. Isso se percebe claramente nas tabelas maiores, relacionados aos discos com grandes quantidades de blocos. [Tanenbaum, 2000]

2.3.4 Alocao indexada Na alocao indexada, associada em cada arquivo uma pequena tabela chamada de n-i (n de ndice), que lista os atributos e endereo de disco dos blocos do arquivo, conforme a ilustrao na figura 2.5. Na entrada de diretrio do arquivo, armazenado somente o endereo do bloco de dados dessa tabela. Os primeiros endereos de disco, de um arquivo, so armazenados nessa tabela n-i. Caso o arquivo for muito grande, um dos endereos dessa tabela aponta para um bloco contendo o restante dos endereos. Esse bloco denominado de bloco indireto, e a quantidade de blocos indiretos determinada pelo tamanho do arquivo. O Unix utiliza esse mtodo. [Tanenbaum, 2000]

Figura 2.5 Ilustrao tcnica de alocao indexada

2.4 Sistema de Tabela de alocao de arquivos A fim de organizar os discos, o sistema operacional divide-o em duas partes: rea de sistema, com as informaes sobre o disco, e a rea de dados, onde os arquivos so armazenados (figura 2.6). A rea do sistema armazena as informaes do disco, conforme o sistema de arquivo definido na formatao. Conforme o problema proposto, trabalharemos somente com o sistema de arquivo de tabela de alocao de arquivos.

Figura 2.6 rea de sistema e rea de dados de uma partio

O setor de boot, ou registro de boot, a primeira parte de um disco para o sistema operacional. Ele contm informaes importantes da estrutura lgica do disco e um programa curto, que executa a tarefa de iniciar a carga do sistema operacional na memria do computador. [Holzner, 1990] Logo aps o setor de boot, se encontra uma seo do sistema conhecida com tabela de alocao de arquivos TAA. O TAA responsvel pela informao da situao de cada parte do disco. Atravs da TAA possvel verificar quais os agrupamentos de unidades esto ocupados e quais esto disponveis para novos dados. A ltima parte da rea de sistema do disco o diretrio raiz. Ele contm o registro das informaes dos arquivos armazenados no disco. Entre o TAA e o diretrio raiz, podem existir cpias adicionais do TAA. Como o TAA serve como um ndice dos blocos de um disco, necessrio manter pelo menos uma cpia de segurana, para garantir sua integridade.

10

No primeiro setor de um disco rgido, junto com a primeira partio, est localizado o Master Boot Record. Ele contm uma pequena quantidade de cdigo executvel e a tabela de parties. Essa tabela contm as informaes sobre as parties existentes no disco. Cada partio visualizada pelo sistema operacional como um disco lgico, podendo conter sistemas de arquivos diferentes. [WinNT, 1997]

2.4.1 Setor de Boot O setor de boot, localizado sempre no primeiro setor da partio, a estrutura de dados mais importante do sistema de arquivo. Um grande componente deste setor de inicializao o bloco de parmetros BIOS (BPB), que possui as informaes apresentadas na tabela 2.1. Esta estrutura contm as caractersticas do disco fsico, que permitem o acionador de disco calcular o endereo apropriado para um dado nmero de setor lgico. Nela possvel tambm, que os utilitrios do sistema, calculem o endereo e o tamanho de cada uma das reas de controle do disco (tabela de alocao de arquivos e diretrio raiz). [Duncan, 1991]

Figura 2.7 Hexadecimal do setor de boot

11

Tabela 2.1 Campos do setor de boot Offset do byte


0X00 0X03 0X0B 0X0D 0X0E 0X10 0X11 0X13 0X15 0X16 0X18 0X1A 0X1C 0X20 0X24 0X25 0X26 0X27 0X2B 0X36 0X3E 8 BYTES 2 BYTES BYTE 2 BYTES BYTE 2 BYTES 2 BYTES BYTE 2 BYTES 2 BYTES 2 BYTES DWORD DWORD BYTE BYTE BYTE 4 BYTE 11 BYTES 8 BYTES

Tamanho do campo

Significado
E9 XX XX ou EB XX 90 Nome e verso OEM Bytes por setor. Setores por agrupamento de unidades. Setores reservados. Nmero de tabelas de alocao de arquivos. Nmero de entradas ao diretrio raiz. Nmero de setores no volume, se couber em 16 bits. Byte de descrio da mdia. Setores por tabela de alocao de arquivos. Setores por trilha. Nmero de cabeas. Nmero de setores ocultos. Nmero de setores no volume, maiores que 16 bits. Nmero da unidade fsica. Reservado. Registro de assinatura de inicializao estendida Nmero de srie do volume. Rtulo do volume. Reservado. Auto inicializao.

2.4.2 Tabela de Alocao de Arquivos - TAA A rea de arquivos de um disco dividida em grupos de setores, conhecidos como unidade de alocao ou clusters (agrupamento de unidades). A quantidade de setores em um agrupamento de unidades definida na formatao e est definida no bloco de parmetros da BIOS, podendo ser encontrado no setor de inicializao. A tabela de alocao de arquivos dividida em campos, onde cada campo corresponde diretamente a um agrupamento de unidades atribudo no disco, conforme ilustrao na figura 2.8. [Tischer, 1992]

12

Figura 2.8 Diretrio raiz com a tabela de alocao de arquivos

Cada campo da TAA pode ter 12, 16 ou 32 bits. O TAA 12 possui entradas de 12 bits e utilizado para mdias com menos de 4087 agrupamentos de unidades, armazenando informaes de discos ou parties de at 32 Mbytes. J o TAA 16, possui entrada de 16 bits e consegue trabalhar com 65536 agrupamentos de unidades por disco, armazenando at 2 Gbytes. O TAA 32, possui entradas de 32 bits, mas possui o tamanho mximo de 2 Tbytes. Apesar de seu endereamento ser de 32 bits, na verdade so usados apenas 28. E, segundo a Microsoft, o nmero mximo de setores que um disco pode ter de 2 elevado a 32, ou seja, como cada setor tem 512 bytes, o tamanho mximo de um disco no TAA 32 acaba sendo de 2 Tbytes.[Infowester, 2004] Os dois primeiros campos da TAA so sempre reservados. O restante descreve a utilizao de seus agrupamentos correspondentes e podem ser interpretados da seguinte maneira: Tabela 2.2 Valores das entradas da tabela de alocao de arquivos Valor
(D)000H (F)FF0-(F)FF6H (F)FF7H (F)FF8-(F)FFFH (X)XXX

Significado
Agrupamento de unidade disponvel Agrupamento de unidade reservado Agrupamento de unidade com defeito, se no for parte da cadeia ltimo agrupamento do arquivo Prximo agrupamento do arquivo

13

No diretrio raiz, cada arquivo contm o nmero do primeiro agrupamento atribudo quele arquivo, que representa a sua entrada na TAA. A partir dessa entrada na TAA, cada campo contm o nmero do prximo agrupamento, at encontrar o valor de ltimo agrupamento. As entradas podem ter outros valores, conforme a tabela 2.2.

Figura 2.9 Hexadecimal da tabela de alocao de arquivos

Para garantir a integridade das informaes, geralmente so definidas uma ou mais cpias da TAA em cada volume, na formatao. O sistema operacional atualiza simultaneamente todas as cpias, toda vez que a TAA alterada. Se ocorrer uma falha na TAA, o sistema operacional verifica as cpias, at que seja obtida uma leitura bem-sucedida ou que todas cpias sejam exauridas. [Tischer, 1992]

2.4.2.1 Interpretando a Tabela de Alocao de Arquivos Aps compreender como a tabela de alocao de arquivos estruturada, veremos como utilizar este conhecimento para encontrar uma posio na tabela a partir de um nmero de agrupamento de unidades. (Modelo de cdigo implementado no Apndice B)

14

Se a tabela de alocao de arquivos tiver entradas de 12bits, utilize o seguinte procedimento: 1) Utilize a entrada de diretrio para encontrar o agrupamento inicial do arquivo em questo; 2) Multiplique o nmero do agrupamento por 1.5; 3) Utilize a parte inteira do produto como o deslocamento na tabela de alocao de arquivos e mova a palavra naquele deslocamento para um registrador; 4) Se o produto for um nmero inteiro, execute um AND entre o registrador e 0FFFH; 5) Caso contrrio, faa um deslocamento lgico do registrador 4 bits para a direta; 6) Se o resultado for o valor de final de arquivo, o mesmo no tem mais nenhum agrupamento de unidades. Caso contrrio, o resultado o nmero do prximo agrupamento.

Se a tabela de alocao de arquivos tiver entradas de 16 bits, utilize os seguintes procedimentos: 1) Utilize a entrada de diretrio para encontrar o agrupamento inicial do arquivo em questo; 2) Multiplique o nmero do agrupamento por 2; 3) Utilize o produto como deslocamento na tabela de alocao de arquivos e mova a palavra naquele deslocamento para um registrador; 4) Se o resultado for um valor de final de arquivo, o mesmo no tem mais nenhum agrupamento de unidade. Caso contrrio, o resultado o nmero do prximo agrupamento.

Se a tabela de alocao de arquivos tiver entradas de 32 bits, utilize os mesmos procedimentos usados na tabela de 16 bits, mudando apenas a multiplicao solicitada no passo 2 para 4, pois cada entrada na tabela ocupam agora 4 bytes.

15

2.4.3 Diretrio Raiz O diretrio raiz ocupa alguns setores no disco, logo aps os setores ocupados pela tabela de alocao de arquivos. Cada arquivo ou diretrio contido nesta partio possui uma entrada no diretrio raiz, com o nome do arquivo, a extenso, a data de quando foi criado ou quando foi feita a ltima modificao, o tamanho em bytes e o nmero do agrupamento de unidades onde o arquivo comea. O tamanho de cada entrada no diretrio raiz de 32 bytes. [Duncan, 1991] Os campos das entradas do diretrio raiz para o sistema de tabela de alocao de arquivos com entradas de 16 bits possui a seguinte configurao: Tabela 2.3 Entrada de diretrio do sistema TAA 16 Valor 00H 08H 0BH 0CH 16H 18H 1AH 1CH Extenso. Atributo do arquivo. Reservado. Horrio de criao ou ltima atualizao. Data de criao ou ltima atualizao. Agrupamento de unidades inicial. Tamanho do arquivo Siginificado Nome do arquivo.

Figura 2.10 Ilustrao entrada de diretrio do sistema TAA 16

16

Figura 2.11 Hexadecimal do diretrio raiz

J no sistema de tabela de alocao de arquivos com entradas de 32 bits, so utilizados os campos antes reservados, e possui a seguinte configurao:

Tabela 2.4 Entrada de diretrio do sistema TAA 32 Valor 00H 08H 0BH 0CH 0DH 0EH 10H 12H 14H 16H 18H 1AH 1CH Extenso. Atributo do arquivo. Capitalizao. Mseg. da criao Horrio de criao. Horrio de acesso. Data de acesso. Agrupamento de unidades inicial H. Horrio da ltima atualizao. Data da ltima atualizao. Agrupamento de unidades inicial L. Tamanho do arquivo. Siginificado Nome do arquivo.

17

Figura 2.12 Ilustrao entrada de diretrio do sistema TAA 32

O primeiro byte do campo do nome de arquivo de uma entrada de diretrio pode conter ainda a seguinte informao especial: Tabela 2.5 Informao especial do campo nome Valor
00H 05H 2EH E5H

Significado
Entrada ao diretrio nunca foi utilizada; fim da poro ocupada do diretrio. O primeiro caractere do nome do arquivo realmente E5H. Entrada um pseudnimo para o diretrio pai ou atual. Arquivo foi apagado.

A primeira entrada do diretrio raiz pode conter o rtulo de volume, caso possuir. A localizao exata e o tamanho do diretrio raiz so definidos na formatao, quando o disco inicializado.

2.4.4 Nomes Longos A tabela de alocao de arquivos com endereamento de 12 e 16 bits, usada pelo DOS possui uma grande restrio em relao ao tamanho dos nomes de arquivos, que no podem ter mais de oito caracteres. Para eliminar essa limitao, e continuar usando a tabela de alocao de arquivos com endereamento de 12 e 16 bits, foi integrada a essa tabela um novo sistema chamado VFAT. [Guia, 2004]

18

Atravs do VFAT, os arquivos com nomes longos so gravados no diretrio raiz respeitando sua configurao, de oito caracteres, e o nome verdadeiro gravado em uma rea reservada. Uma listagem de arquivos a partir do DOS, o sistema leria apenas o nome simplificado (com oito caracteres). Atravs do Windows 95 seria possvel acessar as reas ocultas do VFAT e ver os nomes completos dos arquivos. [Guia, 2004] Nos testes executados nos sistemas TAA 16 e TAA 32, pde-se verificar que as entradas de diretrio mantm a mesma configurao de 8 caracteres no diretrio raiz. Entretanto, quando se utilizam nomes longos, so reservadas outras entradas de diretrio, subseqentes, contendo os caracteres do nome do arquivo.

Figura 2.13 Hexadecimal entrada de diretrio com nome longo

2.5 Organizao lgica: Parties e Volumes Um disco rgido pode ser dividido em mais de um agrupamento de setores lgicos, considerados parties. Cada partio tratada como uma unidade lgica separada, podendo ter sistemas de arquivos diferentes. [Duncan, 1991] As informaes sobre as parties primrias e parties estendidas esto contidas na tabela de partio, uma estrutura de dados de 64 bytes posicionada no Master Boot Record (setor 1, cabea 0, cilindro 0). Cada entrada na tabela de parties tem o tamanho de 16 bytes, possibilitando um nmero mximo de 4 entradas, conforme ilustrado na Tabela 2.6. [WinNT, 1997]

19

Tabela 2.6 Configurao da tabela de parties Bytes


0X0000 0X01BE 0X01CE 0X01DE 0X01EE 0X01FE 0x1FF

Contedo
Reservado Partio 01 Partio 02 Partio 03 Partio 04 Palavra de assinatura sempre 0X55AA

A tabela a seguir descreve cada entrada da tabela de parties: Tabela 2.7 Entrada na tabela de parties Offset do byte
00 01 02 03 04 05 06 07 08 12

Tamanho do campo
BYTE BYTE 6 bits 10 bits BYTE BYTE 6 bits 10 bits DWORD DWORD Cabea inicial.

Significado
Boot Indicator. Indica se a partio do sistema. Setor inicial. Somente os bits de 0 a 5 so usados. Cilindro inicial. System ID. Esse byte define o tipo de volume. Cabea inicial. Setor final. Cilindro final. Setor relativo. Total de setores.

Quando existir uma partio estendida no disco rgido, a entrada para tal partio na Tabela de Parties aponta para o primeiro setor de disco da partio estendida. O primeiro setor de cada unidade lgica em uma partio estendida tambm possui uma Tabela de Parties, que ocupa os ltimos 66 bytes do setor (64 bytes da tabela mais 2 bytes dos marcadores de final de setor). [WinNT, 1997]

20

Na figura seguinte veremos uma demonstrao, em hexadecimal, da tabela de parties de um disco. Quando h menos de quatro parties, os campos remanescentes so todos zeros.

Figura 2.14 Hexadecimal do setor contendo uma tabela de parties

21

Captulo 3 Recuperao de Arquivos Perdidos

3.1 Introduo Aps compreender como realizado o gerenciamento do disco, conheceremos os principais motivos que levam a uma remoo indesejada de arquivos. Como vimos, para o gerenciamento de espao em disco, vrios controles so realizados para manipulao de um arquivo. Falhas nessas informaes de controle ocasionam em perdas de dados do arquivo, resultando em remoes. Algumas ferramentas existentes no mercado conseguem driblar essas falhas, possibilitando a recuperao de arquivos removidos. Conheceremos nesse captulo, as principais causas que levam a uma remoo de arquivos e algumas ferramentas que realizam a recuperao.

3.2 Arquivos Perdidos Geralmente, os problemas em um disco rgido ou disquete ocorrem devido a erros de hardware. Entretanto, freqentemente o problema ocorre porque o sistema operacional no consegue encontrar as informaes sobre o disco ou sobre o seu contedo, devido a perda de informaes de controle da mdia. Neste captulo, conheceremos alguns tipos de falhas que podem ocorrer em um disco rgido, ou disquete, e que ocasionam a perda de dados.

3.2.1 Problemas nas informaes de controle do sistema As informaes de controle (setor de boot, diretrio raiz, tabela de alocao de arquivos, tabela de parties) so essenciais para o funcionamento do sistema. Uma falha, em qualquer uma dessas informaes, pode ocasionar a perda de dados em uma mdia. Uma oscilao ou queda de energia, por exemplo, pode corromper e danificar a tabela de alocao de arquivos; ou o diretrio raiz; ou a tabela de parties, caso o sistema caia durante uma atualizao no mesmo. No caso da tabela de alocao de arquivos, o prprio sistema operacional pode se recuperar, atravs da verificao da cpia da tabela contida no

22

sistema. Contudo, se o dano nessas reas de controle no permitirem uma leitura correta pelo sistema, provavelmente ocorrero perdas de dados, ou at mesmo, a perda de parties inteiras. Alguns vrus tambm costumam atacar nas reas de controle, principalmente no Master Boot Record ou no setor de boot da partio. Eles danificam ou alteram esses setores, de modo que o sistema no consiga mais obter as informaes corretas para a inicializao, necessitando a execuo do FDISK, ou de uma formatao. Alguns vrus que se alocam ou alteram esses reas de controle so: Dark Avenger, Andre, Bleah, Ping Pong, FEC.dr, Bnut.mp.cav.448, BootEXE, Breasts, Dir-2, Bye-Bye, etc. [Mcafee, 2004] Outro problema, que ocasiona a perda das informaes de controle, so as mdias de baixa qualidade. Nessas mdias, os disco perdem mais facilmente o magnetismo, no conseguindo armazenar corretamente as informaes. Alm do problema das mdias de baixa qualidade, pode ocorrer tambm o desgaste do disco, causado pelo tempo de utilizao ou pelo uso excessivo da mdia.

3.2.2 Dados apagados por remoo ou formatao A remoo de arquivos pode acontecer acidentalmente ou de forma mal-intensionada. No sistema operacional Windows, ao apagar um arquivo, ele vai para uma pasta especial denominada lixeira. Esse arquivo continuar com todas as suas informaes armazenadas, assim como todos seus blocos de dados alocados. Assim que ele for apagado da lixeira, suas informaes no sero mais visveis ao sistema operacional e seus blocos de dados sero desalocados, sendo disponibilizado para a utilizao por outros arquivos. Nesse caso, o Windows no pode mais recuperar as informaes, nem os dados, desse arquivo. Uma remoo, tratada em baixo nvel, modifica as seguintes reas de controle: o diretrio raiz e a tabela de alocao de arquivos. No diretrio raiz, o primeiro Byte do campo nome de arquivo alterado para E5H, sinalizando-o como arquivo apagado. Na tabela de alocao de arquivos, todos os agrupamentos de unidade referentes quele arquivo so desalocados, ficando disponveis para serem reutilizados. (Ilustrao na Figura 3.1 a 3.4)

23

Figura 3.1 Hexadecimal do diretrio raiz antes de uma remoo

Figura 3.2 Hexadecimal tabela de alocao de arquivos antes de uma remoo

Figura 3.3 Hexadecimal do diretrio raiz depois de uma remoo

Figura 3.4 Hexadecimal tabela de alocao de arquivos depois de uma remoo

Em uma formatao, ocorre um processo diferente da remoo. Tanto na formatao rpida como na completa, o sistema disponibiliza todos os setores contidos na unidade, ou seja, todos os arquivos armazenados nessa unidade so apagados. Na formatao rpida, tratando-a em baixo nvel, so zerados todos os campos da tabela de alocao de arquivos e do diretrio raiz. Na formatao completa, alm do diretrio raiz e da tabela de alocao de arquivos, so zerados tambm todos os bytes contidos na rea de dados. (Ilustrao na Figura 3.5 a 3.8)

24

Figura 3.5 Hexadecimal do diretrio raiz antes de uma formatao

Figura 3.6 Hexadecimal da tabela de alocao de arquivos antes de uma formatao

Figura 3.7 Hexadecimal do diretrio raiz depois de uma formatao

Figura 3.8 Hexadecimal da tabela de alocao de arquivos depois de uma formatao

25

3.3 Ferramentas de recuperao Foram analisadas algumas ferramentas de recuperao de arquivos removidos, encontrados pela internet, para verificar os tipos de dados que elas recuperam e qual a sua forma de interface com o usurio. Em algumas delas, no foi possvel uma anlise mais aprofundada por ser uma verso demo da ferramenta, limitando-se apenas na execuo das operaes mais simples.

3.3.1 Ferramenta Disk Investigator O Disk Investigator um utilitrio que encontra os arquivos ocultos em um disco rgido e ajuda a recuperar dados perdidos. Lista as unidades realmente existentes e diretrios, arquivos, agrupamentos de unidades e setores do sistema. Recupera arquivos previamente apagados. [Absolute, 2004]

Figura 3.9 Tela principal da ferramenta Disk Investigator

A verso da ferramenta analisada v1.31, de Kevin Solway, e apresenta as seguintes caractersticas: Lista os arquivos e diretrios em uma janela semelhante ao do Windows Explorer, sinalizando-os como ativos ou apagados;

26

Lista as informaes do setor de boot, da tabela de alocao de arquivos e do diretrio raiz da partio selecionada; Executa recuperao de arquivos individualmente, onde o procedimento recupera todos ser adicionado na verso futura; No consegue recuperar nem listar os arquivos e diretrios de uma partio aps uma formatao rpida.

3.3.2 Ferramenta File Recover A ferramenta File Recover um tipo de programa utilitrio para recuperao de arquivos removidos. Ele simplesmente identifica se os arquivos esto intactos no disco rgido e lista as opes de recuperao. de fcil utilizao e designado para recuperar arquivos apagados acidentalmente. Suporta disco rgido com sistemas de arquivos de tabela de alocao de arquivos e NTFS.[Filerecover, 2004]

Figura 3.10 Tela principal da ferramenta File Recover

A verso da ferramenta analisada v2.78_0_0d e apresenta as seguintes caractersticas: Faz uma varredura para identificar os arquivos apagados na partio selecionada; No consegue recuperar nem listar os arquivos e diretrios de uma partio aps uma formatao rpida;

27

No foi possvel executar uma recuperao e uma anlise mais detalhada por ser uma verso demo.

3.3.3 Ferramenta Magic Recovery A ferramenta Magic Recovery recupera arquivos e diretrios removidos de forma rpida e fcil. No recupera arquivos afetados por vrus ou por problemas fsicos do disco rgido. Funciona em Windows 3.11 / 95 / 98 / Me / NT / 2000. [Ondata, 2004]

Figura 3.11 Tela principal da ferramenta Magic Recovery

A verso da ferramenta analisada v1.0 e apresenta as seguintes caractersticas: Lista na abertura do programa as opes de Recuperar arquivos, Procurar dados perdidos e Procurar partio perdida; Lista informaes do sistema como quantidade de processadores na mquina avaliada, quantidade de memria, capacidade de resoluo do monitor, tamanho de swap, verso do Windows, unidades existentes e as informaes da unidade; No consegue recuperar nem listar os arquivos e diretrios de uma partio aps uma formatao rpida; No foi possvel executar uma recuperao e uma anlise mais detalhada por ser uma verso demo.

28

3.3.4 Ferramenta Recover4all Professional A ferramenta Recover4all Professional um programa que permite recuperar facilmente arquivos apagados acidentalmente do Windows. Para evitar que o arquivo apagado seja sobrescrito, essa ferramenta no requer a instalao podendo funcionar diretamente de um disco flexvel. O Recover4all funciona em Windows 95 / 98 / Me / NT / 2000 / XP, ou seja, em sistema de arquivo de tabela de partio de arquivos e NTFS. Suporta drives reconhecidos pelo Windows com IDE, SCSI, USB, PCMCIA e outras interfaces. [Recover4all, 2004]

Figura 3.12 Tela principal da ferramenta Recover4all

A verso da ferramenta analisada v2.21 e apresenta as seguintes caractersticas: Lista os arquivos apagados da partio selecionada; No consegue recuperar nem listar os arquivos e diretrios de uma partio aps uma formatao rpida; No foi possvel executar uma recuperao e uma anlise mais detalhada por ser uma verso demo.

29

3.3.5 Ferramenta Super Undelete A ferramenta Super Undelete um programa de recuperao de arquivos apagados do Windows. No possvel a recuperao de dados causados por problemas fsicos no disco rgido. Em todas as outras situaes a recuperao possvel, dependendo apenas da situao e condio especfica da integridade da cada arquivo. possvel recuperar arquivos que no esto mais na lixeira, arquivos apagados por ao de vrus, arquivos apagados por problema na tabela de partio de arquivos e por perda de parties e discos lgicos. Funciona em sistemas de arquivos de tabela de partio de arquivos. [Siliconaction, 2004]

Figura 3.13 Tela principal da ferramenta Super Undelete

A verso da ferramenta analisada v4.0 e apresenta as seguintes caractersticas: Lista arquivos do disco real, perdidos, encontrados e apagados da partio selecionada; Possui um recurso de localizao de arquivos igual ao do Windows; No consegue recuperar nem listar os arquivos e diretrios de uma partio aps uma formatao rpida;

- No foi possvel executar uma recuperao por ser uma verso demo.

30

Captulo 4 Proposta de Metodologias de recuperao

4.1 Introduo Nesta seo, trataremos as propostas de metodologias de recuperao de arquivos perdidos, considerando os fatores citados anteriormente, que ocasionam em uma remoo indesejada. Para facilitar as ilustraes, utilizaremos as informaes de um disco rgido de 2,40 Gbytes, com a partio primria de 1 Gbytes e a partio estendida com 3 parties lgicas. O sistema operacional instalado no disco o Windows 98SE e o sistema de arquivo de tabela de partio de arquivos com entradas de 16bits. Sero apresentados, de maneira simples e clara, os procedimentos que devem ser realizados na recuperao de arquivos. So procedimentos de baixo custo e fcil implementao, podendo ser rapidamente desenvolvido, para a utilizao em ensino de graduao ou para um possvel aperfeioamento e utilizao em outros projetos. So metodologias que permitem ao programador, com um editor de disco ou em assembly, se recuperar de qualquer problema ocorrido na rea de controle do disco, recuperando arquivos, pois so propostas altamente especializadas. Para facilitar a compreenso, veremos cada problema separadamente, identificando os possveis efeitos sobre o sistema e o modo de como a ferramenta deve trat-lo, de forma a enxergar os dados do disco para que se possa executar a recuperao. Discutiremos individualmente como se recuperar dos problemas ocorridos nas informaes da rea de controle, as remoes decorrentes da deleo e formatao, e como executar a transferncia das informaes a serem recuperadas para outra mdia. Os procedimentos sero apresentados utilizando-se de operaes possveis na linguagem de programao C. No sero utilizados comandos nem funes especficas da linguagem, somente procedimentos suportados. Essa linguagem possui recursos de linguagens de baixo nvel com as facilidades das linguagens de alto nvel, que facilitam a implementao.

31

4.2 Recuperando arquivos 4.2.1 Danos no Master Boot Record O Master Boot Record contm a tabela de parties para o disco e uma pequena quantidade de cdigo executvel. Danos nesse setor impossibilitam a inicializao do computador a partir desse disco. Como o cdigo no Master Boot Record executado antes de qualquer sistema operacional ser inicializado, no possvel detectar ou se recuperar de corrupes neste setor. Alm de no conseguir inicializar o sistema, perde-se tambm a tabela de parties, que contm informaes importantes referentes ao disco. Para fazer funcionar o disco rgido e executar a ferramenta proposta, deve-se, aps detectar algum problema no Master Boot Record, inicializar o sistema atravs do disco de inicializao (disquete de boot), ou atravs de outro disco rgido, deixando o disco com problema como secundrio. Para executar uma recuperao de arquivos nessa situao, preciso executar os seguintes procedimentos: 1) Varredura do disco rgido. Executar uma varredura, setor por setor, para localizar a seguinte informao: Setor que possuir os trs primeiros bytes com os valores E9 XX XX ou EB XX 90, e terminar com os valores 55 AA nos dois ltimos bytes, conforme a Figura 4.1.

Figura 4.1 Hexadecimal do comeo e final do setor de boot

Essa a configurao do setor de Boot das parties. Os trs primeiros bytes representam a instruo de jump e os dois ltimos bytes representam a marcao de final de setor; e

32

Setor que possuir o byte no offset 0x01BF (byte de nmero 447 do setor) igual a 00 ou 80, e terminar com os valores 55 AA nos dois ltimos bytes, conforme a Figura 4.2.

Figura 4.2 Hexadecimal do setor contendo a tabela de parties

Essa a configurao da tabela de parties contida no primeiro setor da segunda partio, caso houver. No offset 0x01BF, o valor 80 indica que uma partio do sistema, e o valor 00, que no utilizado para inicializao. Essa varredura deve ser executada at encontrar o setor que contm a tabela de parties da segunda partio ou o final do disco. Sempre que identificar os setores acima citados, deve-se armazenar o tipo de setor e a sua localizao em um vetor, para anlise posterior pelo prximo procedimento. 2) Montagem da tabela de partio. Com as informaes obtidas na varredura, possvel remontar a tabela de partio e obter informaes completas dos dados existentes no disco. Se a varredura terminar com o final de disco, conclui-se que s existe uma partio e o endereo armazenado o setor de boot com o bloco de parmetros da nica partio ativa no disco. Mas, se a varredura terminar ao encontrar o primeiro setor da segunda partio, o vetor conter o endereo do setor de boot da primeira partio e o endereo contendo uma tabela de parties. A partir desse endereo, contendo a tabela de parties, pode-se calcular os endereos do restante das parties no disco. Com essas informaes, tendo o disco uma ou mais parties, possvel montar uma tabela de parties na memria, para uso da ferramenta na recuperao dos arquivos.

33

3) Identificao das reas de controle de cada partio. Com uma tabela de parties montada na memria, possvel vasculhar qualquer informao contida no disco. Para garantir a integridade das informaes de controle do disco, a ferramenta poderia listar todas as informaes contidas no bloco de parmetros do setor de boot de cada partio, assim como a tabela de alocao de arquivos e suas cpias. Essa listagem permitiria ao usurio identificar algum problema em outros setores na rea de controle, ou se a tabela de parties foi montada corretamente. 4) Listagem dos arquivos e diretrios. Certificando-se de que a tabela de parties contenha informaes coerentes, deve-se listar ao usurio o diretrio raiz, mostrando os arquivos e diretrios contidos nas parties, assim como os subdiretrios, para que seja selecionado o contedo a ser recuperado. A transferncia dos dados a serem recuperados para outra mdia ser tratada na seo 4.3

4.2.2 Danos no setor de boot da partio Caso ocorram danos no setor de boot da partio utilizada para inicializao, com a utilizao de um disco de inicializao (disquete de boot), geralmente possvel o acesso aos arquivos nessa partio. Transferindo esses arquivos para outra unidade de disco, podese formatar a partio para corrigir o setor de boot, sem que seja perdido nenhum arquivo. Se o disco de inicializao no permitir a leitura dessa partio, na tentativa de seu acesso ocorrer um erro, onde o sistema solicitar a sua formatao. Para recuperar arquivos nessa situao, deve-se executar os seguintes procedimentos: 1) Obter informaes dessa partio. Atravs do Master Boot Record, a ferramenta pode obter as informaes referentes ao incio e o fim da partio em questo. 2) Localizar os setores da rea de controle do sistema. A partir do primeiro setor dessa partio, necessrio fazer uma varredura para identificar as seguintes informaes:

34

Setores com os primeiros bytes com os valores F8 FF FF 0F FF FF FF 07 para sistema TAA 32, F8 FF FF 7F para sistema TAA 16, ou F8 FF FF para sistema TAA 12. Essa a configurao do incio de uma tabela de alocao de arquivos, onde as duas primeiras entradas so reservadas, conforme as ilustraes a seguir;

Figura 4.3 Hexadecimal incio TAA 12

Figura 4.4 Hexadecimal incio TAA 16

Figura 4.5 Hexadecimal incio TAA 32

Em seguida, deve-se localizar o prximo setor contendo essa mesma configurao, para localizar a cpia da tabela de alocao de arquivos. A quantidade de setores entre essas duas tabelas representa o seu tamanho;

Aps a quantidade de setores referente s duas tabelas, podem existir mais cpias da tabela de alocao de arquivos. Caso no tiver, a prxima estrutura aps as tabelas o diretrio raiz;

Para identificar o tamanho do diretrio raiz e o incio da rea de dados, deve-se executar uma varredura verificando se os setores contm, a cada 32 bytes, a configurao das entradas de diretrio. Por exemplo, pode-se verificar se os campos de atributo do arquivo e data de criao contm valores vlidos. Caso contrrio, o setor representa o incio da rea de dados.

35

3) Listar as informaes das reas de controle. Para garantir a integridade das informaes de controle do disco, a ferramenta poderia listar todas as informaes encontradas at o momento. Essa listagem permitiria ao usurio identificar se foram encontradas informaes coerentes, como por exemplo, se as cpias da tabela de alocao de arquivos so iguais e se o diretrio raiz contm informaes contendo os nomes dos arquivos.

4) Listagem dos arquivos e diretrios. Certificando-se de que as informaes encontradas so coerentes, deve-se listar ao usurio o diretrio raiz, mostrando os arquivos e diretrios contidos nas parties, assim como os subdiretrios, para que seja selecionado o contedo a ser recuperado. A transferncia dos dados a serem recuperados para outra mdia ser tratada na seo 4.3

4.2.3 Danos na Tabela de Alocao de Arquivos - TAA Quando ocorrem problemas na tabela de alocao de arquivos, o prprio sistema tenta se recuperar atravs das cpias da tabela existente no disco. Caso as cpias tambm estiverem danificadas, so recuperadas somente as informaes que o sistema considerar consistente, ou seja, que estiverem fora da rea danificada. Nesse caso, os arquivos que tiverem as informaes de seus blocos na rea danificada da tabela sero removidos, no sendo possvel a sua recuperao. Geralmente, quando ocorrem danos na tabela de alocao de arquivos, o prprio sistema consegue se recuperar. Quando o sistema no consegue se recuperar, possivelmente houve perda integral da tabela e de suas cpias. Considerando essa situao, no foi possvel propor uma metodologia de recuperao de arquivos, pois em todas propostas aqui tratadas, so essenciais as informaes da tabela de alocao de arquivos.

36

4.2.4 Danos no Diretrio Raiz Se danos ocorrerem no diretrio raiz, provavelmente o sistema no reconhecer a partio e pedir uma formatao. Pode acontecer do sistema reconhecer a partio, mas no conseguir mostrar nenhum contedo e no conseguir manusear corretamente gravaes e leituras no diretrio raiz. Com a perda das informaes do diretrio raiz, possvel recuperar somente os arquivos contidos nos sub-diretrios, pois suas entradas de diretrio esto localizados na rea de dados do disco. Para isso, preciso executar os seguintes procedimentos: 1) Identificar o incio da rea de dados. Para se efetuar a recuperao dos subdiretrios, necessrio identificar, primeiramente, o incio da rea de dados. Todas as informaes para esse clculo podem ser encontradas no setor de boot. Somando o tamanho do diretrio raiz com o tamanho das tabelas de alocao de arquivos mais os setores reservados, obtm-se o tamanho da rea de sistema. Posterior a essa rea encontra-se a rea de dados. 2) Localizar as entradas dos sub-diretrios. Aps encontrar o incio da rea de dados, deve-se executar uma varredura procurando todos os setores que contiverem a seguinte configurao: Primeiro byte com o valor em hexadecimal igual a 2E, e o segundo at o oitavo byte com os valores iguais a 20; Trigsimo terceiro e o trigsimo quarto byte com o valor igual a 2E, e o trigsimo quinto at o quadrigsimo byte com o valores iguais a 20. Essa a configurao dos setores contendo as entradas dos sub-diretrios, com as duas primeiras entradas reservadas ponto e ponto-ponto, ilustrado na Figura 4.6. Aps encontrar esses setores, deve-se calcular sua localizao na tabela de alocao de arquivos, para poder encontrar os blocos que contm sua continuao.

37

Figura 4.6 Entrada reservada ponto e ponto-ponto dos sub-diretrios

3) Listagem dos arquivos e diretrios. Encontrados os setores do passo anterior, possvel a listagem e a obteno de informaes de todos os arquivos e diretrios dos sub-diretrios. A transferncia dos dados a serem recuperados para outra mdia ser tratada na seo 4.3.

4.2.5 Perda de arquivos por remoo ou formatao Em uma remoo, o sistema operacional marca no diretrio raiz como arquivo apagado e libera suas entradas na tabela de alocao de arquivos. Sem as informaes referentes ao arquivo na tabela de alocao de arquivos, no possvel executar sua recuperao. Uma tentativa, que possivelmente poderia recuperar um arquivo removido, seria da seguinte maneira: 1) Verificar no diretrio raiz, na entrada do arquivo a ser recuperado, qual o primeiro agrupamento de unidades para localiz-lo na tabela de alocao de arquivos; 2) A partir desse agrupamento, verificar se existe uma seqncia de agrupamentos de unidades consecutivas do tamanho do arquivo apagado; 3) Se no existir, marcar o arquivo como no recupervel. Caso contrrio, permitiria sua recuperao. Na tentativa de recuperao, preciso ativar o arquivo no diretrio raiz, mudando o primeiro byte por um caractere vlido, e realizar as devidas ligaes, consecutivas, nas entradas da tabela de alocao de arquivos a partir do primeiro agrupamento.

38

Nessa tentativa, existe uma possibilidade do arquivo ser recuperado. Caso o arquivo no ocupe agrupamentos de unidades seqenciais, ou alguns deles j no tiverem os dados corretos, o arquivo ser recuperado e no permitir sua execuo. Se isso acontecer, ser emitida uma mensagem de erro de Arquivo corrompido ou Arquivo invlido. Nessa situao, basta apag-lo novamente. J na formatao, tanto a rpida como a completa, so zerados todos os campos do diretrio raiz e da tabela de alocao de arquivos. Sem essas duas estruturas de controle, no possvel executar a recuperao de qualquer informao. Talvez exista uma maneira de recuperar esses arquivos, mas at o momento, no foi possvel encontrar uma soluo para esse problema.

4.3 Transferncia dos dados recuperados Aps a listagem e a seleo dos arquivos a serem recuperados, necessrio a sua transferncia para outra mdia. Geralmente, no feita a recuperao de arquivos na mesma mdia para evitar que outros dados removidos sejam sobrescritos. Para a transferncia, necessrio executar os seguintes procedimentos: 1) Verificao de espao para transferncia. Aps a seleo, pelo usurio, dos arquivos a serem recuperados e a mdia destino, deve-se verificar se a mdia destino possui espao suficiente para a gravao. Essa verificao pode ser realizada da seguinte maneira: Calcular, atravs das informaes de tamanho do arquivo, contido no diretrio raiz dos arquivos selecionados, o tamanho total exigido para transferncia. Basta, para cada arquivo, verificar sua entrada de diretrio o valor do Byte no offset 1CH, ilustrado na Figura 4.7.

Figura 4.7 Informao de tamanho do arquivo na entrada de diretrio

39

Verificar, atravs de operaes de alto nvel, se a unidade destino possui espao suficiente para a gravao requerida.

2) Transferncia de dados. Caso haja espao suficiente na mdia destino, deve-se iniciar a transferncia dos arquivos da seguinte maneira: Localizar o bloco de dados inicial, do arquivo a ser transferido, atravs do diretrio raiz; Calcular e encontrar, atravs da tabela de alocao de arquivos, os blocos subsequentes desse arquivo. Caso o arquivo tenha mais de um bloco, devem ser todos armazenados na memria, para a montagem do arquivo; Gravar na outra unidade, atravs de operaes de escrita de arquivos, da linguagem de programao. Utilizando-se essas operaes de alto nvel, no necessrio a identificao da estrutura do sistema de arquivos na unidade destino, pois o prprio sistema operacional se encarrega de seu gerenciamento.

4.4 Linguagem de programao C A linguagem de programao C foi desenvolvida no incio dos anos 70 nos Laboratrios AT&T Bell, nos Estados Unidos. Um dos grandes atrativos dessa linguagem o balano atingido entre caractersticas prximas da arquitetura de computadores e caractersticas de linguagens de programao de alto nvel de abstrao. A simplicidade da linguagem no restringe, no entanto, a potencialidade de suas aplicaes. Blocos de tarefas complexas podem ser criados a partir de blocos elementares, podendo se estender por diversos nveis. Esta habilidade de construir aplicaes complexas a partir de elementos simples uma das principais caractersticas da linguagem. [DCA, 2004] As linguagens de baixo nvel so as linguagens que mais se aproximam do cdigo de mquina, ou seja, dos 0 ou 1. Os programas resultantes destas linguagens so pequenos em

40

tamanho e extremamente rpidos. As linguagens de alto nvel so orientadas para o problema, necessitando pouca ou nenhuma ateno s caractersticas do computador que ir executar o programa, onde facilita a interao da linguagem com o programador. A linguagem C possui boa parte dessas duas caractersticas, de alto e de baixo nvel. A combinao dos apontadores e operadores a nvel de bit, faz do C uma linguagem capaz de substituir o Assembly, com as propriedades e abstraes de uma linguagem de alto nvel. A facilidade de utilizao de recursos de baixo nvel, com operadores similares ao Assembly, o fator mais importante da linguagem C para a implementao da metodologia proposta. Nela possvel executar operaes de baixo nvel como as interrupes de hardware, e alocando seus valores em endereos de memria, pode-se tratar facilmente essas informaes atravs de operadores de alto nvel. Veja as funes de interrupes da Linguagem Assembly no Apndice A, que podem ser utilizados similarmente na Linguagem C.

41

Concluso
Com a concluso deste trabalho, podemos perceber que com a evoluo da informtica e a crescente necessidade de armazenamento de dados, cresce tambm a necessidade de se utilizar ferramentas de back-up e de recuperao de arquivos removidos. Com freqncia houve-se falar em perda de informaes por ao de vrus ou remoes indesejadas. A crescente necessidade de informatizao, das empresas e das pessoas, induz ao manuseio de computadores por usurios leigos, sem conhecimentos em relao aos programas mal intencionados e at mesmo aos aplicativos que ocasionam na remoo de arquivos. Como se pode ver, dependendo do motivo da remoo do arquivo, possvel garantir 100% da integridade na sua recuperao. claro que empresas especializadas em recuperao de arquivos e discos rgidos garantem a possibilidade de recuperao em qualquer tipo de situao, mas os mesmos possuem equipamentos avanados e cobram uma fortuna para fazer o servio. Agora, para usurios domsticos ou pequenas empresas, que possuem documentos de textos, trabalhos escolares ou aplicaes comerciais, e tudo isso em computadores de pequeno porte, necessitam de uma ferramenta no to avanada, de baixo custo e que permita recuperar informaes sempre que houver algum problema. A recuperao de arquivos removidos no uma operao muito complexa, mas como podemos ver, ficamos muito dependentes do diretrio raiz e da tabela de alocao de arquivos. Estas duas estruturas, principalmente a tabela de alocao de arquivos, so essenciais para a localizao dos arquivos na superfcie do disco. Alm das solues baseadas nessas estruturas, no foi encontrado nenhum outro meio em que fosse possvel identificar os agrupamentos de unidades inerentes a um arquivo removido. Outro problema, que pode prejudicar uma correta recuperao de arquivo pela ferramenta proposta o modo de como identificar de maneira automatizada o tipo de dano a ser tratado. Um programador, com conhecimentos em linguagem assembly para manusear diretamente as informaes do disco, por exemplo, consegue identificar e executar uma recuperao de arquivos facilmente, se baseando nas metodologias apresentadas. Agora, como uma ferramenta automatizada poderia identificar de forma realmente correta, sempre, em que rea de controle ocorreu o problema? Sempre havero casos em que a

42

ferramenta por si s, no conseguir identificar exatamente qual o procedimento a ser executado. E por isso que muitas ferramentas, existentes no mercado, so direcionadas para um tipo de problema especfico. Mas, considerando serem propostas de metodologias para recuperao de arquivos removidos, e no para reconhecimento de danos na rea de controle, espera-se poder garantir a recuperao dos arquivos, de maneira simples e rpida, na sua execuo em problemas claramente identificado.

43

Referncias Bibliogrficas
[ClayBrook, 1985] [Tanenbaum, 2000] ClayBrook, Billy G.; Tcnicas de gerenciamento de arquivos, traduo de Luiz Orlando Coutinho Lemos, Editora Campus, 1985. Tanenbaum, Andrew S.; Sistemas Operacionais: projeto e implementao, traduo de Edson Furmankiewicz, Editora Bookman, 2000. Holzner, Steven; Linguagem Assembly avanada para IBM PC, McGraw Hill, 1990. Norton, Peter; Desvendando o IBM PC (acesso a caractersticas avanadas de programao), Editora Campos, 1989. Microsoft Windows NT Server 4.0 Resource Guide, Microsoft Corporation, MAKRON Books do Brasil Editora Ltda, 1997. Duncan, Ray; MS-DOS Avanado, MAKRON Books do Brasil Ltda., Editora McGraw-Hill Ltda, 1952. Tischer, Michael; PC Intern System Programming The Encyclopedia of DOS Programming Know How, ABACUS A data becker book, 1953. Network Associates, Inc., disponvel em www.mcafee.com.br, acessado em fevereiro de 2004. The Absolute, disponvel em www.theabsolute.net/sware/dskinv.html, acessado em fevereiro de 2004 FileRecover, disponvel em www.filerecover.com, acessado em fevereiro de 2004. Ondata Laboratrios, disponvel em www.ondata.es, acessado em fevereiro de 2004. Recover4all, disponvel em www.recover4all.com, acessado em fevereiro de 2004. Siliconaction, disponvel em www.siliconaction.com.br, acessado em fevereiro de 2004. Departament of Computer Engineering and Industrial Automation School of Electrical and Computer Engineering State University of Campinas, disponvel em http://www.dca.fee.unicamp.br, acessado em fevereiro de 2004.

[Holzner, 1990] [Norton, 1989] [WinNT, 1997] [Duncan, 1991] [Tischer, 1992]

[Mcaffe, 2004] [Absolute, 2004]

[Filerecover, 2004] [Ondata, 2004] [Recover4all, 2004] [Siliconaction, 2004] [DCA, 2004]

44

[Guia, 2004] [Infowester, 2004] [Unisinos, 2004]

Morimoto, Carlos E.; Guia do Hardware.net, disponvel em www.guiadohardware.info, acessado em fevereiro de 2004. Info Wester, disponvel em www.infowester.com, acessado em fevereiro de 2004. Unisinos Universidade do Vale do Rio dos Sinos, curso de informtica, disponvel em www.inf.unisinos.br/~cac/sisop/material/sisarq.pdf, acessado em fevereiro de 2004

45

Apndice A

Referncias da BIOS e do DOS


A.1 Introduo Este apndice pode ser usado como referncia em uma implementao em baixo nvel. Sero apresentadas as principais interrupes da BIOS e interrupes do DOS, em linguagem Assembly, para manipulao de disco, na qual so similares s utilizadas na linguagem de programao C. A.2 Interrupes da BIOS INT 13 Servio 0 Reinicializar o Disco
Entrada AH = 0 Sada CF = 0 AH = 0, Sucesso CF = 1 AH = Cdigo de erro Sistemas com disco rgido: DL = 80H Reinicializa os disquetes DL = 81H Reinicializa o disco rgido

INT 13 Servio 1 Ler o estado da ltima operao


Entrada AH = 1 Sada Cdigo de erro AL = 00 Sem erros AL = 01 Comando invlido passado para o controlador AL = 02 Marca de incio de setor no encontrado AL = 03 Disco protegido contra escrita AL = 04 Setor no encontrado AL = 05 Falha de reinicializao AL = 07 Parmetros do acionador errados AL = 09 Transferncia de dados alm do final do segmento AL = 0BH encontrado sinalizador de trilha ruim AL = 10H Encontrado erro no CRC AL = 11H Os dados so erros corrigidos AL = 20H Falha do controlador

46

AL = 40H Erro no posicionamento da cabea de leitura AL = 80H Sem resposta do disco AL = 0BBH Erro Indefinido AL = 0FFH Falha na operao

INT 13 Servio 2 Ler Setores para a Memria


Entrada AH = 2 DL = Nmero do acionador DH = Nmero da cabea CH = Nmero da trilha CL = Nmero do setor AL = Nmero de setores a ler ES:BX = Endereo do buffer para leitura e escrita Para disco rgido, o nmero do acionador em DL pode variar de 80H a 87H. Sada CF = 0 AH = 0, Sucesso CF = 1 AH = Cdigo de erro

INT 13 Servio 3 Escrever setores para o disco


Entrada AH = 3 DL = Nmero do acionador DH = Nmero da cabea CH = Nmero da trilha CL = Nmero do setor AL = Nmero de setores a ler ES:BX = Endereo do buffer para leitura e escrita Para disco rgido, o nmero do acionador em DL pode variar de 80H a 87H. Sada CF = 0 AH = 0, Sucesso CF = 1 AH = Cdigo de erro

INT 13 Servio 4 Verificar os setores


Entrada AH = 4 DL = Nmero do acionador DH = Nmero da cabea CH = Nmero da trilha CL = Nmero do setor AL = Nmero de setores a ler ES:BX = Endereo do buffer para leitura e escrita Sada CF = 0 AH = 0, Sucesso CF = 1 AH = Cdigo de erro

47

Para disco rgido, o nmero do acionador em DL pode variar de 80H a 87H.

INT 13 Servio 5, 6 e 7 Formatar


Entrada AH = 5, 6 ou 7 DL = Nmero do acionador DH = Nmero da cabea CH = Nmero da trilha AH = 5 Formatar a trilha desejada AH = 6 Formatar a trilha desejada e marcar os setores ruins AH = 7 Formatar o disco desejado, iniciando pela trilha indicada O servio 5 vlido somente para discos flexveis. Os servios 6 e 7 so vlidos somente para discos rgidos. Sada CF = 0 AH = 0, Sucesso CF = 1 AH = Cdigo de erro

INT 13 Servio 8 Informar parmetros do acionador


Entrada AH = 8 DL > 80H Sada DL = Nmero de acionadores ligados ao controlador DH = Valor mximo para o nmero da cabea CH = Valor mximo para cilindro CL = Valor mximo para o nmero do setor e bits altos do nmero do cilindro Este servio vlido somente para discos rgidos.

INT 13 Servio 9 Inicializar o acionador


Este um servio usado internamente pela BIOS para inicializar o acionador.

INT 13 Servios 0AH e 0BH Ler e escrever longos setores


Entrada AH = 0AH (ler) AH = 0BH (Escrever) DL = Nmero do acionador DH = Nmero da cabea CH = Nmero do cilindro Sada CF = 0 AH = 0, Sucesso CF = 1 AH = Cdigo de erro

48

CL = Nmero do setor AL = Nmero de setores a ler ES:BX = Endereo do buffer para leitura e escrita Este servio vlido somente para discos rgidos.

INT 13 Servio 0CH Posicionar a cabea de leitura


Entrada AH = 0CH DL = Nmero do acionador DH = Nmero da cabea CH = Nmero do cilindro CL = Nmero do setor Esse servio vlido somente para discos rgidos. Sada CF = 0 AH = 0, Sucesso CF = 1 AH = Cdigo de erro

INT 13 Servio 0DH Reinicializar o disco


Este um servio alternativo para reinicializar o disco, usado somente para discos rgidos.

INT 13 Servios 0EH e 0FH Ler e escrever o buffer de setor


Entrada AH = 0EH (ler) AH = 0FH (Escrever) DL = Nmero do acionador DH = Nmero da cabea CH = Nmero do cilindro CL = Nmero do setor AL = Nmero de setores a ler ES:BX = Endereo do buffer para leitura e escrita Este servio vlido somente para discos rgidos. Sada CF = 0 AH = 0, Sucesso CF = 1 AH = Cdigo de erro

INT 13 Servio 10H Verificar se o acionador est pronto


Este uma verificao interna que a BIOS faz, para testar se o acionador de disco rgido est ou no pronto.

49

INT 13 Servio 11H Recalibrar o acionador de disco rgido


Entrada AH = 11H DL = Nmero do acionador Sada CF = 0 AH = 0, Sucesso CF = 1 AH = Cdigo de erro

Esse servio vlido somente para discos rgidos.

INT 13 Servios de diagnstico


Entrada AH = 12H (teste da RAM) AH = 13H (teste do acionador) AH = 14H (teste do controlador) DL = Nmero do acionador Esse servio vlido somente para discos rgidos. Sada CF = 0 AH = 0, Sucesso CF = 1 AH = Cdigo de erro

A.3 Interrupes do DOS INT 21 Servio 0DH Reinicializar o Disco


Entrada AH = 0DH Sada

INT 21 Servio 0EH Selecionar o Acionador de Disco


Entrada AH = 0EH DL = Nmero do Acionador (DL=0 A DL=1B etc.) Sada

INT 21 Servio 19H Informar o Acionador Corrente


Entrada AH = 19H Sada AL = Acionador corrente (DL=0 A DL=1B etc.)

INT 21 Servio 1BH Informar sobre a FAT do Acionador Default


Entrada AH = 1BH Sada DS:BX aponta para o byte da FAT DX = Nmero de Clusters AL = Nmero de setores/Cluster CX = Tamanho de um setor (512)

50

INT 21 Servio 1CH Informar sobre a FAT do Acionador Especificado


Entrada AH = 1CH DL = Nmero do Acionador (0=Default, 1=A...) Sada DS:BX aponta para o byte da FAT DX = Nmero de Clusters AL = Nmero de setores/Cluster CX = Tamanho de um setor (512)

51

Apndice B

Cdigo Fonte utilizando Interrupes


B.1 Introduo Este apndice pode ser usado como referncia em uma implementao em baixo nvel utilizando interrupes na Linguagem C. Ser apresentado o cdigo fonte de um programa implementado no desenvolvimento do trabalho, que encontra as informaes de controle em um disquete. B.2 Cdigo Fonte #include<dos.h> #include<stdio.h> #include<conio.h> typedef unsigned int Word; //definicao das variaveis globais... unsigned char *buf, *fat, *fat1, boot[512]; int nsetor, cilindro, setor, superficie, temp, pos; Word endereco[30]; //executa a interrupcao no boot com os parametros passados void interrupcao_boot() //ao chamar precisa definir nsetor, cilindro, //setor, superficie. { _AH = 0; //RESETA _DL = 0; //DRIVE geninterrupt(0x13); _ES = FP_SEG(boot); _BX = FP_OFF(boot); _AH = 2; //LEITURA _AL = nsetor; //N. DE SETOR - TAMANHO

52

_CH = cilindro; //CILINDRO 0 _CL = setor; //SETOR 1 _DH = superficie; //SUPERFICIE 0 _DL = 0; //DRIVE geninterrupt(0x13); clrscr(); } //executa a interrupcao com os parametros passados... void interrupcao() //ao chamar precisa definir nsetor, cilindro, //setor, superficie. { _AH = 0; //RESETA _DL = 0; //DRIVE geninterrupt(0x13); _ES = FP_SEG(buf); _BX = FP_OFF(buf); _AH = 2; //LEITURA _AL = nsetor; //N. DE SETOR - TAMANHO _CH = cilindro; //CILINDRO 0 _CL = setor; //SETOR 1 _DH = superficie; //SUPERFICIE 0 _DL = 0; //DRIVE geninterrupt(0x13); } //executa a interrupcao na fat com os parametros passados... void interrupcao_fat() //ao chamar precisa definir nsetor, cilindro, //setor, superficie. { _AH = 0; //RESETA

53

_DL = 0; //DRIVE geninterrupt(0x13); _ES = FP_SEG(fat); _BX = FP_OFF(fat); _AH = 2; //LEITURA _AL = nsetor; //N. DE SETOR - TAMANHO _CH = cilindro; //CILINDRO 0 _CL = setor; //SETOR 1 _DH = superficie; //SUPERFICIE 0 _DL = 0; //DRIVE geninterrupt(0x13); clrscr(); } //executa a interrupcao na fat com os parametros passados... void interrupcao_fat1() //ao chamar precisa definir nsetor, cilindro, //setor, superficie. { _AH = 0; //RESETA _DL = 0; //DRIVE geninterrupt(0x13); _ES = FP_SEG(fat1); _BX = FP_OFF(fat1); _AH = 2; //LEITURA _AL = nsetor; //N. DE SETOR - TAMANHO _CH = cilindro; //CILINDRO 0 _CL = setor; //SETOR 1 _DH = superficie; //SUPERFICIE 0 _DL = 0; //DRIVE geninterrupt(0x13); clrscr(); }

54

void mostrafat() { int pranada, p, contia, espera; contia = 0; espera = 1; do { pranada = contia; p = contia * 1.5; if( !(pranada&0x0001)) pranada = (fat[p]) + (((Word)fat[p + 1]&0x000f) << 8); else pranada = ((fat[p]&0x00f0) >> 4) + ((Word)fat[p + 1] << 4); printf("%4u = %4u ", contia, pranada); contia = contia + 1; if ((espera % 5) == 0) printf ("\n"); if (espera > 114) { getch(); printf("\n"); espera = 1; } else espera = espera + 1; } while (contia < ((boot[0x13] + boot[0x14] * 256) / (boot[0x0D]))); getch(); } void recuperabyte() { int byte; //calcula o endereco do diretorio raiz nsetor = (((boot[0x11]+boot[0x12]*256) * 32) / (boot[0x0B]+boot[0x0C]*256) + 1);

55

//nsetor recebe n. de entradas no diretorio raiz * 32 bytes por entrada //dividido pela qtdade bytes por setor para saber o tamanho do dir. //raiz em setores. + 1 para setores nao inteiros... setor = ((boot[0x0f]*256 + boot[0x0e]) + (boot[0x10] * (boot[0x17]*256 + boot[0x16])) + 1); //setor recebe n. de setores reservados + n. de fat * n.setores por //fat + 1 temp = setor / (boot[0x18]+boot[0x19]*256); if ((temp % (boot[0x1A])) == 0) superficie = 0; else superficie = 1; cilindro = temp / boot[0x1A]; //cilindro = trilha / n. de cabeca setor = setor % (boot[0x18]+boot[0x19]*256); //setor recebe setor no determinado cilindro/trilha interrupcao(); //executa interrupcao no diretorio raiz buf[128] = 'P'; _AH = 0; //RESETA _DL = 0; //DRIVE geninterrupt(0x13); _ES = FP_SEG(buf); _BX = FP_OFF(buf); _AH = 3; //ESCRITA _AL = nsetor; //N. DE SETOR - TAMANHO _CH = cilindro; //CILINDRO 0 _CL = setor; //SETOR 1

56

_DH = superficie; //SUPERFICIE 0 _DL = 0; //DRIVE geninterrupt(0x13); } void subdiretorio(int xpos)//lista os subdiretorios se houver { nsetor = 1; setor = ((endereco[xpos]-2) * (boot[0x0D]) + 33); temp = setor / (boot[0x18]+boot[0x19]*256); if ((temp % (boot[0x1A])) == 0) superficie = 0; else superficie = 1; cilindro = temp / boot[0x1A]; setor = (setor % (boot[0x18]+boot[0x19]*256) + 1); interrupcao(); //executa interrupcao no endereco do arquivo encontrada pela fat unsigned int momento; unsigned int data; int arquivus, demais, byte, dirlocal; arquivus = 0; dirlocal = 0; demais = 0; byte = 0; printf("LISTAGEM DO DIRETORIO %u\n", xpos); do { do {

57

printf("\n%c%c%c%c%c%c%c%c", buf[byte], buf[byte + 1], buf[byte + 2],buf[byte + 3],buf[byte + 4],buf[byte + 5], buf[byte + 6], buf[byte + 7]); if ((buf[byte + 11] == '\x10') && (buf[byte] != '.')) { printf(" <DIR> "); if (buf[byte] != 0xe5) { endereco[pos] = (buf[byte + 26] + buf[byte + 27]*256); pos = pos + 1; dirlocal = dirlocal + 1; } } else if (buf[byte + 11] == ' ') { printf(" 10]); arquivus = arquivus + 1; } else { printf(" -- -- "); demais = demais + 1; } if ((buf[byte + 11] == '\x10') || (buf[byte + 11] == ' ')) { momento = buf[byte + 22] + buf[byte + 23] * 256; printf("%02u:%02u:%02u", (momento & 0xf800)>>11 , (momento & 0x07e0)>>5, (momento & 0x001f)*2); data = buf[byte + 24] + buf[byte + 25] * 256; printf(" %02u\\%02u\\%u", (data & 0x001f), (data & 0x01e0)>>5, %u", (buf[byte + 28] + buf[byte (((data & 0xfe00)>>9) + 1980)); if (buf[byte + 11] != '\x10') printf(" + 29]*256 + buf[byte + 30]*65536 + buf[byte + 31]*256*65536)); %c%c%c ", buf[byte + 8], buf[byte + 9], buf[byte +

58

} byte = byte + 32; } while ((buf[byte] != 0x00) || ((byte % 32) != 0) || (byte < 32));//(byte < 7168); //era 7168 // para quando o primeiro char do nome == 0x00 -> ultima entrada //busca na fat o endereco do proximo bloco int end; end = endereco[xpos] * 1.5; if( !(endereco[xpos]&0x0001)) endereco[xpos] = (fat[end]) + (((Word)fat[end + 1]&0x000f) << 8); else endereco[xpos] = ((fat[end]&0x00f0) >> 4) + ((Word)fat[end + 1] << 4); nsetor = 1; setor = ((endereco[xpos]-2) * (boot[0x0D]) + 33); temp = setor / (boot[0x18]+boot[0x19]*256); if ((temp % (boot[0x1A])) == 0) superficie = 0; else superficie = 1; cilindro = temp / boot[0x1A]; setor = setor % (boot[0x18]+boot[0x19]*256); interrupcao(); //executa interrupcao no endereco do arquivo encontrada pela fat } while (buf[byte] != 0x00); printf("\n\nNumero de arquivos ativos: %u", arquivus); printf("\nNumero de diretorios ativos: %u", dirlocal); printf("\nDemais (sistema/oculto/apagados): %u", demais);

59

printf("\n\nPressione qualquer tecla para continuar..."); getch(); clrscr(); } void diretorio()//lista diretorio raiz { int byte; //calcula o endereco do diretorio raiz nsetor = (((boot[0x11]+boot[0x12]*256) * 32) / (boot[0x0B]+boot[0x0C]*256) + 1); //nsetor recebe n. de entradas no diretorio raiz * 32 bytes por entrada //dividido pela qtdade bytes por setor para saber o tamanho do dir. //raiz em setores. + 1 para setores nao inteiros... setor = ((boot[0x0f]*256 + boot[0x0e]) + (boot[0x10] * (boot[0x17]*256 + boot[0x16])) + 1); //setor recebe n. de setores reservados + n. de fat * n.setores por //fat + 1 temp = setor / (boot[0x18]+boot[0x19]*256); if ((temp % (boot[0x1A])) == 0) superficie = 0; else superficie = 1; cilindro = temp / boot[0x1A]; //cilindro = trilha / n. de cabeca setor = setor % (boot[0x18]+boot[0x19]*256); //setor recebe setor no determinado cilindro/trilha interrupcao(); //executa interrupcao no diretorio raiz

60

byte = 0; pos = 0; unsigned int momento; unsigned int data; int arquivus, demais; arquivus = 0; demais = 0; printf("LISTAGEM DO DIRETORIO RAIZ\n"); do { printf("\n%c%c%c%c%c%c%c%c", buf[byte], buf[byte + 1], buf[byte + 2],buf[byte + 3],buf[byte + 4],buf[byte + 5], buf[byte + 6], buf[byte + 7]); if (buf[byte + 11] == '\x10') { printf(" <DIR> "); if (buf[byte] != 0xe5) { endereco[pos] = (buf[byte + 26] + buf[byte + 27]*256); pos = pos + 1; } } else if (buf[byte + 11] == ' ') { printf(" 10]); arquivus = arquivus + 1; } else { printf(" -- -- "); demais = demais + 1; } if ((buf[byte + 11] == '\x10') || (buf[byte + 11] == ' ')) %c%c%c ", buf[byte + 8], buf[byte + 9], buf[byte +

61

{ momento = buf[byte + 22] + buf[byte + 23] * 256; printf("%02u:%02u:%02u", (momento & 0xf800)>>11 , (momento & 0x07e0)>>5, (momento & 0x001f)*2); data = buf[byte + 24] + buf[byte + 25] * 256; printf(" %02u\\%02u\\%u", (data & 0x001f), (data & 0x01e0)>>5, %u", (buf[byte + 28] + buf[byte (((data & 0xfe00)>>9) + 1980)); if (buf[byte + 11] != '\x10') printf(" } byte = byte + 32; } while ((buf[byte] != 0x00) || ((byte % 32) != 0) || (byte < 32));//(byte < 7168); //era 7168 // para quando o primeiro char do nome == 0x00 -> ultima entrada printf("\n\nNumero de arquivos ativos: %u", arquivus); printf("\nNumero de diretorios ativos: %u", pos); printf("\nDemais (sistema/oculto/apagados): %u", demais); printf("\n\nPressione qualquer tecla para continuar..."); getch(); clrscr(); if (endereco[0] != 0) { int xpos; xpos = 0; do { subdiretorio(xpos); xpos = xpos + 1; } while (xpos < pos); } } + 29]*256 + buf[byte + 30]*65536 + buf[byte + 31]*256*65536));

62

void fati()//lista fat { //define o buffer fat com o tamanho da fat (n. setor fat * bytes setor) //calcula o endereco da primeira fat nsetor = (boot[0x16]+boot[0x17]*256); //nsetor recebe o tamanho da fat setor = ((boot[0x0f]*256 + boot[0x0e]) + 1); //setor recebe n. de setores reservados + 1 temp = setor / (boot[0x18]+boot[0x19]*256); if ((temp % (boot[0x1A])) == 0) superficie = 0; else superficie = 1; cilindro = temp / boot[0x1A]; //cilindro = trilha / n. de cabeca setor = setor % (boot[0x18]+boot[0x19]*256); //setor recebe setor no determinado cilindro/trilha interrupcao_fat(); //executa interrupcao na fat //calcula o endereco da segunda fat nsetor = (boot[0x16]+boot[0x17]*256); //nsetor recebe o tamanho da fat setor = ((boot[0x0f]*256 + boot[0x0e]) + 1 + (boot[0x16]+boot[0x17]*256)); //setor recebe n. de setores reservados + 1 + n. setor por fat(primeira fat)

63

temp = setor / (boot[0x18]+boot[0x19]*256); if ((temp % (boot[0x1A])) == 0) superficie = 0; else superficie = 1; cilindro = temp / boot[0x1A]; //cilindro = trilha / n. de cabeca setor = setor % (boot[0x18]+boot[0x19]*256); //setor recebe setor no determinado cilindro/trilha interrupcao_fat1(); //executa interrupcao na fat1 temp = 0; do { printf("%u %u\n", fat[temp], fat1[temp]); temp = temp + 1; } while (temp < 25); //mostra primeiros 100 char das 2 fats getch(); } void info() { printf("Informacoes do BOOT da midia\n\n"); printf("Bytes por setor: %u \n", boot[0x0B]+boot[0x0C]*256); printf("Setor por cluster: %u \n", boot[0x0D]); printf("N. setores reservados: %u \n", boot[0x0E]+boot[0x0F]*256); printf("N. de FATs: %u \n", boot[0x10]); printf("N. de entradas no Dir. Raiz: %u \n", boot[0x11]+boot[0x12]*256); printf("N. setores no volume: %u \n", boot[0x13]+boot[0x14]*256); printf("Descritor da midia: %u \n", boot[0x15]); printf("N. de setor por FAT: %u \n", boot[0x16]+boot[0x17]*256); printf("N. de setor por trilha: %u \n", boot[0x18]+boot[0x19]*256);

64

printf("N. de cabeca de r/w: %u \n", boot[0x1A]+boot[0x1B]*256); printf("N. setores escondidos: %u \n", boot[0x1C]+boot[0x1D]*256); printf("\nPressione qualquer tecla para continuar...\n"); getch(); } void main() { nsetor = 1; setor = 1; superficie = 0; cilindro = 0; for (pos = 0; pos < 30; pos++) endereco[pos] = 0; interrupcao_boot(); //executa uma interrupcao no setor de boot... fat = (unsigned char *)new unsigned char[((boot[0x16] + boot[0x17]*256) * (boot[0x0b] + boot[0x0c]*256))]; fat1 = (unsigned char *)new unsigned char[((boot[0x16] + boot[0x17]*256) * (boot[0x0b] + boot[0x0c]*256))]; buf = (unsigned char *)new unsigned char[((boot[0x11] + boot[0x12]*256) * 32)]; //clrscr(); //info();//lista info do boot //clrscr(); //recuperabyte(); //clrscr(); //diretorio();//lista diretorio raiz clrscr(); fati();//lista fat clrscr(); mostrafat();
}

Вам также может понравиться