Use DD to write specific file recursively

4.8k views Asked by At

I have a hard drive that I want to overwrite, not with null bytes, but with a message.

48 69 64 64 65 6e 20 = "Hidden "

Here's my command thus far:

echo "Hidden " > /myfile
dd if=/myfile of=/dev/sdb bs=1M

Note: I have also tried an assorment of parameters such as count and conv to no avail

Now, this is fine. When I run:

dd if=/dev/sdb | hexdump -C | less

I can see the first few bytes written over, however, the rest is unchanged. I'd like to recursively write "Hidden " to the drive.

3

There are 3 answers

3
Digital Trauma On BEST ANSWER

I don't have a spare disk to try this out on, but you can use the yes command to continuously push your string into the pipe:

yes "Hidden" | dd of=/dev/sdb

I assume once dd has written the whole disk, then it will close the pipe and this command will finish.

The above will newline-delimit the "Hidden" string. If you want it space-delimited, as in the question you can do:

yes "Hidden" | paste -d' ' -s - | dd of=/dev/sdb

Or if you want it null-delimited:

yes "Hidden" | tr '\n' '\0' | dd of=/dev/sdb
2
Niels Keurentjes On

If you don't specify if parameter, input is read from stdin. This allows you to do something like this:

dd of=/dev/sdb < for((i=0;i<100000;i++)); do echo 'Hidden '; done;

The value of 100000 obviously needs to be at least diskSizeInBytes / strlen('Hidden ').

Given the consequences I didn't test this for you but it ought to work ;)

0
Bill Lynch On

dcfldd, a fork of dd, has some additional features that you may find useful. For example, your problem would be solved by:

dcfldd textpattern="Hidden " of=/dev/sdb bs=1M