Este tutorial não é de minha, foi incorporado na integra da url de fonte.
Primeiramente, criamos uma imagem :
# dd if=/dev/zero of=linux.iso bs=1024 count=100000
Depois disso, formatamos ela como ext3:
# mkfs.ext3 linux.iso
Responda y, a pergunta, caso seja feita alguma.
Agora, criaremos um lugar para montarmos a imagem :
# mkdir /media/forense
Agora montaremos a imagem nesse diretórios que acabamos de criar.
# mount -o loop linux.iso /media/forense
Com isso a imagem deverá estar montada, e ao acessar esse diretório, veremos uma pasta chamada lost+found
# cd /media/forense && ls -la
Se você está vendo lost+found, é sinal que está no caminho certo.
Agora criaremos alguns arquivos. Você pode usar por exemplo o nano ( editor de textos ). Crie os arquivos : naoapagar.txt, seraapagado.txt, cobaia.txt, etc… Coloque algum texto nos arquivos, para que você possa identificá-lo mais tarde.
Apague o arquivo : seraapagado.txt
# rm seraapagado.txt
Feito isso, volte para onde estava e desmonte o /media/forense. Por exemplo :
# cd /root && umount /media/forense
Feito isso, teremos um “sistema” pronto para ser explorado.
Façamos o seguinte :
# debugfs -w linux.iso
Com isso entraremos no modo de debug do filesystem. No prompt irá aparecer algo semelhante a isto:
# debugfs -w linux.iso
debugfs 1.41.12 (17-May-2010)
debugfs :
Para sabermos qual arquivo foi deletado faça :
# ls -d
Nos meus testes, os arquivos apareceram dessa forma :
11 (12) . 2 (12) .. 12 (52) naoseraapagado.txt
<13> (24) seraapagado.txt 14 (948) cobaia.txt
Veja que o arquivo que foi apagado é justamente o arquivo que está diferente, começando pelo inode <13>, o número entre <> significa nesse caso que ele foi apagado. Podemos obter mais detalhes sobre esse arquivo fazendo o seguinte :
# stat <13>
A saída desse comando vai resultar em :
Inode: 13 Type: regular Mode: 0644 Flags: 0×0
Generation: 3864096146 Version: 0×00000000
User: 0 Group: 0 Size: 0
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 0
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x4cdb2a17 — Wed Nov 10 21:26:15 2010
atime: 0x4cdb2a04 — Wed Nov 10 21:25:56 2010
mtime: 0x4cdb2a17 — Wed Nov 10 21:26:15 2010
dtime: 0x4cdb2a17 — Wed Nov 10 21:26:15 2010
BLOCKS:
Ótimo, agora temos bastante informações sobre o arquivo. Faremos agora o seguinte :
# dump_unused
Esse comando vai mostrar os blocos não utilizados, nos meus testes ficaram assim :
Unused block 6145 contains non-zero data:
Sera apagado
Bem, agora sabemos qual o bloco em que o arquivo apagado se encontra. E aí que entra a mágica. Faremos o seguinte comando :
# mi <14>
O mi <14>, vai modificar o inode do arquivo 14, então continuando com o comando acima teremos :
debugfs: mi <14>
Mode [0100644]
User ID [0]
Group ID [0]
Size [15]
Creation time [1289431571]
Modification time [1289431571]
Access time [1289431571]
Deletion time [0]
Link count [1]
Block count high [0]
Block count [2]
File flags [0x0]
Generation [0xe6516d93]
File acl [0]
High 32bits of size [0]
Fragment address [0]
Direct Block #0 [6657] 6145
Direct Block #1 [0] 6146
Direct Block #2 [0]
Direct Block #3 [0]
Direct Block #4 [0]
Direct Block #5 [0]
Direct Block #6 [0]
Direct Block #7 [0]
Direct Block #8 [0]
Direct Block #9 [0]
Direct Block #10 [0]
Direct Block #11 [0]
Indirect Block [0]
Double Indirect Block [0]
Triple Indirect Block [0]
O que fizemos acima ? Explico.
Pegamos o arquivo cobaia.txt emprestado, e usamos o mi para modifica-lo. Sabíamos que o número do bloco seria o 6145, porque pegamos esse número no dump_unused, e como o arquivo era pequeno, “chutamos” o próximo bloco, com isso obteremos o seguinte
resultado:
debugfs: cat <14>
Sera apagado
Veja que conseguimos voltar com o conteúdo do arquivo apagado, simplesmente modificando os Direct Blocks #0 e #1
Agora que sabemos que o arquivo está legível via cat, podemos providenciar a gravação em alguma parte do disco, com por exemplo no /tmp. Então fazemos :
debugfs: dump <14> /tmp/recuperado.txt
debugfs: q
Pronto, com isso você deve ter saido do debugfs, e retornado ao shell. Agora basta proceder da seguinte forma :
# cat /tmp/recuperado.txt
Sendo assim você verá o conteúdo do arquivo.
Bem, não me aprofundarei muito na parte técnica da coisa.
Espero que tenham gostado. E qualquer dúvida ou se acharem algum erro, basta comentar no blog do autor, link da fonte.
Fonte: http://www.gustavoroberto.blog.br/2010/11/10/recuperando-arquivos-apagados-no-linux-ext3/
Primeiramente, criamos uma imagem :
# dd if=/dev/zero of=linux.iso bs=1024 count=100000
Depois disso, formatamos ela como ext3:
# mkfs.ext3 linux.iso
Responda y, a pergunta, caso seja feita alguma.
Agora, criaremos um lugar para montarmos a imagem :
# mkdir /media/forense
Agora montaremos a imagem nesse diretórios que acabamos de criar.
# mount -o loop linux.iso /media/forense
Com isso a imagem deverá estar montada, e ao acessar esse diretório, veremos uma pasta chamada lost+found
# cd /media/forense && ls -la
Se você está vendo lost+found, é sinal que está no caminho certo.
Agora criaremos alguns arquivos. Você pode usar por exemplo o nano ( editor de textos ). Crie os arquivos : naoapagar.txt, seraapagado.txt, cobaia.txt, etc… Coloque algum texto nos arquivos, para que você possa identificá-lo mais tarde.
Apague o arquivo : seraapagado.txt
# rm seraapagado.txt
Feito isso, volte para onde estava e desmonte o /media/forense. Por exemplo :
# cd /root && umount /media/forense
Feito isso, teremos um “sistema” pronto para ser explorado.
Façamos o seguinte :
# debugfs -w linux.iso
Com isso entraremos no modo de debug do filesystem. No prompt irá aparecer algo semelhante a isto:
# debugfs -w linux.iso
debugfs 1.41.12 (17-May-2010)
debugfs :
Para sabermos qual arquivo foi deletado faça :
# ls -d
Nos meus testes, os arquivos apareceram dessa forma :
11 (12) . 2 (12) .. 12 (52) naoseraapagado.txt
<13> (24) seraapagado.txt 14 (948) cobaia.txt
Veja que o arquivo que foi apagado é justamente o arquivo que está diferente, começando pelo inode <13>, o número entre <> significa nesse caso que ele foi apagado. Podemos obter mais detalhes sobre esse arquivo fazendo o seguinte :
# stat <13>
A saída desse comando vai resultar em :
Inode: 13 Type: regular Mode: 0644 Flags: 0×0
Generation: 3864096146 Version: 0×00000000
User: 0 Group: 0 Size: 0
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 0
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x4cdb2a17 — Wed Nov 10 21:26:15 2010
atime: 0x4cdb2a04 — Wed Nov 10 21:25:56 2010
mtime: 0x4cdb2a17 — Wed Nov 10 21:26:15 2010
dtime: 0x4cdb2a17 — Wed Nov 10 21:26:15 2010
BLOCKS:
Ótimo, agora temos bastante informações sobre o arquivo. Faremos agora o seguinte :
# dump_unused
Esse comando vai mostrar os blocos não utilizados, nos meus testes ficaram assim :
Unused block 6145 contains non-zero data:
Sera apagado
Bem, agora sabemos qual o bloco em que o arquivo apagado se encontra. E aí que entra a mágica. Faremos o seguinte comando :
# mi <14>
O mi <14>, vai modificar o inode do arquivo 14, então continuando com o comando acima teremos :
debugfs: mi <14>
Mode [0100644]
User ID [0]
Group ID [0]
Size [15]
Creation time [1289431571]
Modification time [1289431571]
Access time [1289431571]
Deletion time [0]
Link count [1]
Block count high [0]
Block count [2]
File flags [0x0]
Generation [0xe6516d93]
File acl [0]
High 32bits of size [0]
Fragment address [0]
Direct Block #0 [6657] 6145
Direct Block #1 [0] 6146
Direct Block #2 [0]
Direct Block #3 [0]
Direct Block #4 [0]
Direct Block #5 [0]
Direct Block #6 [0]
Direct Block #7 [0]
Direct Block #8 [0]
Direct Block #9 [0]
Direct Block #10 [0]
Direct Block #11 [0]
Indirect Block [0]
Double Indirect Block [0]
Triple Indirect Block [0]
O que fizemos acima ? Explico.
Pegamos o arquivo cobaia.txt emprestado, e usamos o mi para modifica-lo. Sabíamos que o número do bloco seria o 6145, porque pegamos esse número no dump_unused, e como o arquivo era pequeno, “chutamos” o próximo bloco, com isso obteremos o seguinte
resultado:
debugfs: cat <14>
Sera apagado
Veja que conseguimos voltar com o conteúdo do arquivo apagado, simplesmente modificando os Direct Blocks #0 e #1
Agora que sabemos que o arquivo está legível via cat, podemos providenciar a gravação em alguma parte do disco, com por exemplo no /tmp. Então fazemos :
debugfs: dump <14> /tmp/recuperado.txt
debugfs: q
Pronto, com isso você deve ter saido do debugfs, e retornado ao shell. Agora basta proceder da seguinte forma :
# cat /tmp/recuperado.txt
Sendo assim você verá o conteúdo do arquivo.
Bem, não me aprofundarei muito na parte técnica da coisa.
Espero que tenham gostado. E qualquer dúvida ou se acharem algum erro, basta comentar no blog do autor, link da fonte.
Fonte: http://www.gustavoroberto.blog.br/2010/11/10/recuperando-arquivos-apagados-no-linux-ext3/
Comentários