У меня есть немного трудного вопроса здесь для экспертов по сценариям удара... У меня есть сценарий удара, который должен создать маленький (80-байтовый) двоичный файл, когда он работает. Содержание файла должно содержаться в самом сценарии (т.е. Я не хочу, просто упаковывают файл наряду со сценарием).
Мой сценарий в настоящее время делает это как это:
echo 'begin-base64 644 dummy.wav' > /tmp/dummy.uu
echo 'UklGRkgAAABXQVZFZm10IBAAAAADAAEAAHcBAADcBQAEACAAZmFjdAQAAAAAAAAAUEVBSxAAAAAB' >> /tmp/dummy.uu
echo 'AAAAQDYlTAAAAAAAAAAAZGF0YQAAAAA=' >> /tmp/dummy.uu
echo '====' >> /tmp/dummy.uu
uudecode -o /tmp/dummy.wav /tmp/dummy.uu
rm /tmp/dummy.uu
... после вышеупомянутых выполнений у меня есть свой файл /tmp/dummy.wav. Но я просто узнал, что компьютер, на котором должен работать этот сценарий, не имеет программы uudecode установленной (и мне не разрешают установить его), таким образом, я должен найти некоторый другой способ создать этот файл. Какие-либо идеи?
Некоторые программы установки делают нечто подобное:
#!/bin/bash
tail -n +4 $0 | tar xvzf -
exit
<tgz file appended here><newline>
Если на целевом компьютере имеется perl
:
perl -ne 'print unpack("u",$_)' > dummy.wav <<EOD
M4DE&1D@```!7059%9FUT(!`````#``$``'<!``#<!0`$`"``9F%C=`0`````
C````4$5!2Q`````!````0#8E3```````````9&%T80``````
EOD
Это используется в формате, отличном от base64, который вы получаете, просто выполняя uuencode dummy.wav
В противном случае вы всегда можете сделать это:
echo -ne '\x52\x49\x46\x46\x48\x00\x00\x00' > dummy.wav
echo -ne '\x57\x41\x56\x45\x66\x6d\x74\x20' >> dummy.wav
echo -ne '\x10\x00\x00\x00\x03\x00\x01\x00' >> dummy.wav
echo -ne '\x00\x77\x01\x00\x00\xdc\x05\x00' >> dummy.wav
echo -ne '\x04\x00\x20\x00\x66\x61\x63\x74' >> dummy.wav
echo -ne '\x04\x00\x00\x00\x00\x00\x00\x00' >> dummy.wav
echo -ne '\x50\x45\x41\x4b\x10\x00\x00\x00' >> dummy.wav
echo -ne '\x01\x00\x00\x00\x40\x36\x25\x4c' >> dummy.wav
echo -ne '\x00\x00\x00\x00\x00\x00\x00\x00' >> dummy.wav
echo -ne '\x64\x61\x74\x61\x00\x00\x00\x00' >> dummy.wav
Этот небольшой фрагмент bash был создан с помощью:
$ hexdump -e '"echo -ne '\''" 8/1 "x%02x" "'\'' >> dummy.wav\n"' dummy.wav | sed 's;x;\\x;g;1s/>/ /'
Отредактировано для добавления: Как указано в ответе здесь, возможно и следующее:
xargs -d'\n' -n1 echo -ne > dummy.wav <<EOD
\x52\x49\x46\x46\x48\x00\x00\x00\x57\x41\x56\x45\x66\x6d\x74\x20
\x10\x00\x00\x00\x03\x00\x01\x00\x00\x77\x01\x00\x00\xdc\x05\x00
\x04\x00\x20\x00\x66\x61\x63\x74\x04\x00\x00\x00\x00\x00\x00\x00
\x50\x45\x41\x4b\x10\x00\x00\x00\x01\x00\x00\x00\x40\x36\x25\x4c
\x00\x00\x00\x00\x00\x00\x00\x00\x64\x61\x74\x61\x00\x00\x00\x00
EOD
(аргумент -d
важен для отключения собственной обработки обратной косой черты xargs
)
Вы также можете превратить 8/1
в моей команде hexdump в 80/1
и получить одну длинную строку echo
.
Поместите exit
в конец вашего сценария, добавьте файл в конец сценария и используйте tail -c 80
, чтобы получить содержимое. Это будет работать до тех пор, пока вам не нужно беспокоиться о проблемах преобразования новой строки.