Grave arquivos em pendrive sem sistema de arquivos

Publicado por Davidson Francis (última atualização em 28/08/2013)

[ Hits: 5.125 ]

Download NTN.sh




Creio que este script sirva mais para curiosidade/estudo do que para ser utilizado cotidianamente, mas, talvez seja útil a alguém.

Basicamente o NTN (nome dado a simples falta de criatividade: Não Tem Nome) grava arquivos utilizando o dd, em conjunto com isso é gerado o que chamo de "header" (que será gravado junto com o arquivo desejado na mídia removível) que identifica o nome e tamanho do arquivo em questão (nos seus primeiros 30 bytes), para quando formos copiar o arquivo de volta para o HD (por exemplo) possamos saber exatamente o ponto em que o arquivo se encontra no pendrive. (afinal, estamos trabalhando na ausência de um FS).

Um ponto interessante de gravar arquivos desta maneira, é que apenas quem estiver de posse do NTN (e souber que o pendrive possua arquivos) poderá extraí-los de lá, afinal, nenhum S.O. irá conseguir montar a unidade.

O script em si permite a gravação de apenas um único arquivo, mas comprimindo podemos colocar a quantidade que bem entendermos.

O código em si é simples de entender, mas fico a disposição para eventuais dúvidas que possam ter.

* Peço desculpas a eventuais erros e POGs no script, afinal, esse é o meu primeiro (de muitos) Shell Script.

  



Esconder código-fonte

#!/bin/bash
clear

echo "------------------------------------------------"
echo "        NTN v1.1, by Davidson        "
echo "------------------------------------------------"
echo "################################################"
echo "# Nao utilize o disco rigido como destino                                               #"
echo "# para armazenamento e ao utilizar pendrives                                       #"
echo "# certifique-se de realizar backup.                                                        #"
echo "#                                                                                                       #"
echo "# Um metodo alternativo seria criar um arquivo                                     #"
echo "# como destino para o armazenamento.                                                #"
echo "################################################"
echo ""

function gravar()
{
    echo ""
    echo "Digite o nome do arquivo:"
    read arq2

    while [ ${#arq2} -gt 17 ]
    do
        echo "Nome muito grande, por favor renomeie para um menor!"
        read arq2
    done

    echo "Digite o caminho do dispositivo destino:"
    read destino

    echo ""
    echo "Criando header..."

    echo $(du -b $arq2 | cut -f1 -s) > .htmp
    tamanho=$(wc -m .htmp | cut -d' ' -f1)
    tamanho=$((10-$tamanho));

    #Obtencao/criacao do campo tamanho
    rm .h 2&>/dev/null
    while [ $tamanho -gt 0 ]
    do
        echo -n "0" >> .h
        tamanho=$(($tamanho-1));
    done
    cat .htmp >> .h
    rm  .htmp

    #Obtencao/criacao do campo nome arquivo
    echo "" >> .h
    tamanho=$((17-${#arq2}));
    while [ $tamanho -gt 0 ]
    do
        echo -en "0" >> .h
        tamanho=$(($tamanho-1));
    done
    echo -en "\t" >> .h
    echo $arq2 >> .h

    #Gravacao no dispositivo
    echo ""
    echo "------------------------"
    echo "Gravando header..."
    dd status=noxfer conv=notrunc if=./.h of=$destino 2>/dev/null

    echo ""
    echo "Gravando arquivo..."
    dd status=noxfer conv=notrunc if=./$arq2 of=$destino bs=1 obs=1 seek=30 2>/dev/null
    echo "------------------------"

    rm .h
}

function ler()
{
    echo ""
    echo "Digite o caminho do dispositivo:"
    read origem

    echo ""
    echo "------------------------"
    echo "Lendo header..."
    dd status=noxfer if=$origem of=.h bs=1 count=30 2>/dev/null

    echo ""
    echo "Gravando arquivo..."
    dd status=noxfer if=$origem of=$(tail -n1 .h | cut -f2 -s) bs=1 ibs=1 skip=30 count=$(head -n1 .h) 2>/dev/null
    echo "------------------------"

    rm .h
}

function criar_arquivo()
{
    echo ""
    echo "Qual do arquivo a ser gerado? i.e: 1K/2K... 1M/10M..."
    read opt

    echo ""
    echo "Gerando arquivo..."
    dd status=noxfer if=/dev/zero of=arq.bin bs=$opt count=1 2>/dev/null
}


echo "Deseja criar um arquivo para armazenamento(S/N) ?"
read opt

if [ $opt == 'S' ]
then
    criar_arquivo
fi

echo ""
echo "Deseja ler(1) ou escrever(2)?"
read opt

if [ $opt -eq 1 ]
then
    ler
else
    if [ $opt -eq 2 ]
    then
        gravar
    fi
fi

Scripts recomendados

Montar PenDrive

Backup Subversion

Script para limpeza de arquivos temporários em Sabayon Linux

Screenserver no modo texto - versão 2

SLAC - Programa de manutenção para Slackware 14x


  

Comentários
[1] Comentário enviado por hugoeustaquio em 28/08/2013 - 12:58h

Muito boa ideia, isso aí tem ótimo potencial de se desenvolver para uma nova forma de esteganografia, se pensarmos em uma forma de compartilhar as posições dos arquivos. Isso junto com criptografia vai fazer um combo de segurança excelente!!

[2] Comentário enviado por lcavalheiro em 28/08/2013 - 14:08h


[1] Comentário enviado por hugoeustaquio em 28/08/2013 - 12:58h:

Muito boa ideia, isso aí tem ótimo potencial de se desenvolver para uma nova forma de esteganografia, se pensarmos em uma forma de compartilhar as posições dos arquivos. Isso junto com criptografia vai fazer um combo de segurança excelente!!


Adorei a idéia, mas isso não é prático a não ser para aplicações que não vão fazer muita leitura/escrita de dados...

[3] Comentário enviado por DavidsonDFGL em 28/08/2013 - 21:06h

Valeu hugoeustaquio e lcavalheiro.
Realmente, quando bolei esse script era justamente pensando na idéia de ocultar arquivos; com relação a leitura/escrita é um pouco desanimador mesmo, com bs de 1byte arquivos com vários mb demora um bocado pra copiar/ler. Mas já penso em futuramente desenvolver algo mais complexo (provavelmente em C/C++) com direito a criptografia, posições aleatórias de arquivos, velocidade...

[4] Comentário enviado por hugoeustaquio em 28/08/2013 - 23:10h


[3] Comentário enviado por DavidsonDFGL em 28/08/2013 - 21:06h:

Valeu hugoeustaquio e lcavalheiro.
Realmente, quando bolei esse script era justamente pensando na idéia de ocultar arquivos; com relação a leitura/escrita é um pouco desanimador mesmo, com bs de 1byte arquivos com vários mb demora um bocado pra copiar/ler. Mas já penso em futuramente desenvolver algo mais complexo (provavelmente em C/C++) com direito a criptografia, posições aleatórias de arquivos, velocidade...


Sim, com criptografia + café + coca cola isso pode ficar ótimo!

Para o usuário que previamente saiba a posição onde está o arquivo, podemos preencher o resto do disco com pedaços aleatórios do arquivo criptografado! Assim nem um ataque extraindo dados vai conseguir descobrir a posição inicial!!! E se alguém quiser fazer um brute force na criptografia, vai ter que testar MUITAS combinações de possíveis inícios do arquivo! Nem o FBI extrai o que tiver nele ahahahahah (risada maligna)


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts