bit-wise complemento com dd?

0

Quando segura o apagamento de um disco, como posso fazer um "complemento bit a bit" com o dd? (ou com outras ferramentas UNIX?)

    
por gasko peter 10.12.2013 / 18:55

3 respostas

3

Vou começar isso dizendo que bitwise complementando um disco não é um apagamento seguro, porque se alguém souber o que você fez, tudo o que eles têm a fazer é reverter o processo para restaurar o disco ao seu estado original.

Embora bash tenha um operador de complemento, não creio que possa ser usado aqui porque você não pode trabalhar com bytes brutos sem alguma ferramenta adicional.

Aqui está um pequeno programa em C que servirá como um pipeline de complemento bit a bit:

#include <stdio.h>
#include <unistd.h>
#include <inttypes.h>

#define BUFSZ 4096

int main (void) {
    unsigned char buffer[BUFSZ];
    int i, check;
    uint64_t total = 0;

    while ((check = read(0, buffer, BUFSZ)) > 0) {
        for (i = 0; i < check; i++) buffer[i] = ~buffer[i];
        write(1, buffer, check);
        total += check;
    }

    fprintf(stderr, "Bitcomp processed %lu bytes.\n", total);
    return 0;
}                     

Compile isso:

gcc whatever.c -o bitcomp

Então:

dd if=something | ./bitcomp | dd of=something conv=notrunc

O conv=notrunc (sem truncamento) é necessário ao gravar no mesmo arquivo que está sendo lido. Você pode não precisar dele para um dispositivo. Você também pode usar:

./bitcomp < something 1<> something

Onde 1<> serve como a versão "não truncada" de > (obrigado Stephane Chazelas). Esteja ciente de que o programa reporta ao erro padrão (descritor 2 para o shell), portanto, não redirecione 2>&1 etc.

Se você quiser ver o que quero dizer com reversível, execute-o em um arquivo de texto e execute-o novamente no mesmo arquivo de texto. Estará de volta do jeito que começou.

    
por 10.12.2013 / 19:59
4

tr é a ferramenta para transliterar bytes:

LC_ALL=C tr < file 1<> file '
LC_ALL=C tr < file 1<> file '
LC_ALL=C tr < file 1<> file '
LC_ALL=C tr < file 1<> file '%pre%-7'  "$(awk '
  BEGIN{for (i=0;i<256;i++) printf "\%o", 255-i}')"
-7' '765432107654321076543210765432107654321076543210765432107654321076543210765432107654321076543210765432107654321076543210765432107654321076543210765432107654321076543210765432107654321076543210%pre%'
-7' "$(awk ' BEGIN{for (i=0;i<256;i++) printf "\%o", 255-i}')"
-7' '765432107654321076543210765432107654321076543210765432107654321076543210765432107654321076543210765432107654321076543210765432107654321076543210765432107654321076543210765432107654321076543210%pre%'

Ou:

%pre%

Mas, como outros apontaram, isso não faz sentido como um apagamento seguro. Primeiro, não é seguro, pois o original é facilmente derivado e, do ponto de vista do desempenho, é muito ineficiente no armazenamento rotacional, pois os dados precisam ser lidos e, em seguida, é necessária uma busca para reescrever os dados.

    
por 10.12.2013 / 21:51
4

Eu acho que vou pular a tentativa de fazer isso com dd e olhar para as ferramentas reais que fornecem esses tipos de recursos. As 4 ferramentas que eu conheço e que podem fazer isso são as seguintes:

  • nwipe
  • limpe
  • shred
  • BleachBit

Dos 4, eu procuraria nwipe , que tem uma variedade de métodos para limpar com segurança dados de discos e / ou partições. Eu também posso olhar para o BleachBit também.

NOTA:nwipepodeserexecutadoapartirdeumaTUIncursesoudiretamentedalinhadecomando.

excertodapáginanwipeman

-m,--method=METHODThewipingmethod(default:dodshort).dod522022m/dod-7passDOD5220.22-Mmethoddodshort/dod3pass-3passDODmethodgutmann-PeterGutmann'sAlgorithmops2-RCMPTSSITOPS-IIrandom/prng/stream-PRNGStreamzero/quick-Overwritewithzeros

Vocêtambémpodeinformarquantasrodadaspararealizarisso:

-r,--rounds=NUMNumberoftimestowipethedeviceusingtheselectedmethod(default:1)

Exemplo

$nwipe-mdod/dev/sda1

Referências

Complemento bit a bit

Se você der uma olhada no código-fonte para nwipe , perceberá que os métodos DoD 7 e DoD 3 executam um complemento bit a bit.

DoD 7

    char dod [7];

    nwipe_pattern_t patterns [] =
    {
            {  1, &dod[0] }, /* Pass 1: A random character.               */
            {  1, &dod[1] }, /* Pass 2: The bitwise complement of pass 1. */
            { -1, ""      }, /* Pass 3: A random stream.                  */
            {  1, &dod[3] }, /* Pass 4: A random character.               */
            {  1, &dod[4] }, /* Pass 5: A random character.               */
            {  1, &dod[5] }, /* Pass 6: The bitwise complement of pass 5. */
            { -1, ""      }, /* Pass 7: A random stream.                  */
            {  0, NULL   }
    };

DoD 3

    char dod [3];

    nwipe_pattern_t patterns [] =
    {
            {  1, &dod[0] }, /* Pass 1: A random character.               */
            {  1, &dod[1] }, /* Pass 2: The bitwise complement of pass 1. */
            { -1, ""      }, /* Pass 3: A random stream.                  */
            {  0, NULL   }
    };

Pesquisando isso mais, parece que qualquer software que pretenda fazer DoD 3 ou 7 executará este complemento bit a bit como parte do processo de passes que precisam ser executados para esses métodos específicos de limpeza.

    
por 10.12.2013 / 20:42

Tags