Как сценарий удара может выписать двоичный файл, не используя программу uudecode?

У меня есть немного трудного вопроса здесь для экспертов по сценариям удара... У меня есть сценарий удара, который должен создать маленький (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 установленной (и мне не разрешают установить его), таким образом, я должен найти некоторый другой способ создать этот файл. Какие-либо идеи?

6
задан Jeremy Friesner 26 June 2010 в 00:42
поделиться

3 ответа

Некоторые программы установки делают нечто подобное:

#!/bin/bash
tail -n +4 $0 | tar xvzf -
exit
<tgz file appended here><newline>
6
ответ дан 8 December 2019 в 14:40
поделиться

Если на целевом компьютере имеется 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 .

6
ответ дан 8 December 2019 в 14:40
поделиться

Поместите exit в конец вашего сценария, добавьте файл в конец сценария и используйте tail -c 80, чтобы получить содержимое. Это будет работать до тех пор, пока вам не нужно беспокоиться о проблемах преобразования новой строки.

1
ответ дан 8 December 2019 в 14:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: