Другой ответ утверждал, что "скрывающие элементы" (скрытое вредоносное программное обеспечение) имеют внутреннее преимущество перед "детекторами".Я не согласен. Это верно при ограничении себя подходами обнаружения, которые полагаются на подписи или эвристику для обнаружения вредоносного программного обеспечения. Но существует другой способ обнаружить вредоносное программное обеспечение: проверьте известные товары. Растяжка, ПОМОЩНИК, и т.д. может проверить файлы на диске. Второй Взгляд может проверить рабочее ядро и процессы. Второй Взгляд использует судебную экспертизу памяти для прямого осмотра операционной системы, активных служб и приложений. Это сравнивает код в памяти к тому, что было выпущено поставщиком дистрибутива Linux. Таким образом это может сразу точно определить злонамеренные модификации, сделанные руткитами и бэкдорами и несанкционированными программами, которые выполняются (троянцы, и т.д.).
(Раскрытие: Я - ведущий разработчик Второго Взгляда.)
$ echo AB | perl -lpe '$_=unpack"B*"'
0100000101000010
$ echo 0100000101000010 | perl -lpe '$_=pack"B*",$_'
AB
-e expression
оцените данное выражение как perl
код-p
: sed
режим. Выражение оценено для каждой строки входа с содержанием строки, сохраненной в $_
переменная и распечатанный после оценки выражения.-l
: еще больше как sed
: вместо сплошной линии только содержание строки (то есть, без разделителя строки) находится в $_
(и новая строка добавляется назад на выводе). Так perl -lpe code
работы как sed code
за исключением того, что это perl
код в противоположность sed
код.unpack "B*"
продолжает работать $_
переменная по умолчанию и извлечения ее содержание как немного строки, идущей от самого высокого бита первого байта к самому низкому биту последнего байта.pack
делает реверс unpack
. Посмотрите perldoc -f pack
для деталей.С пробелами:
$ echo AB | perl -lpe '$_=join " ", unpack"(B8)*"'
01000001 01000010
$ echo 01000001 01000010 | perl -lape '$_=pack"(B8)*",@F'
AB
(это предполагает, что вход находится в блоках (0-заполненных) 8 битов).
С unpack "(B8)*"
, мы извлекаем 8 битов за один раз, и мы присоединяемся к получившим строкам с пробелами с join " "
.
Используя до н.э и удар:
#!/bin/bash
chrbin() {
echo $(printf \\$(echo "ibase=2; obase=8; $1" | bc))
}
ordbin() {
a=$(printf '%d' "'$1")
echo "obase=2; $a" | bc
}
ascii2bin() {
echo -n $* | while IFS= read -r -n1 char
do
ordbin $char | tr -d '\n'
echo -n " "
done
}
bin2ascii() {
for bin in $*
do
chrbin $bin | tr -d '\n'
done
}
ascii2bin "This is a binary message"
bin2ascii 01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101
Можно использовать xxd
преобразовать из ASCII и двоичного файла.
$ echo -n "A" | xxd -b
0000000: 01000001 A
$ echo -n "A" | xxd -b | awk '{print $2}'
01000001
Если Вы обращаетесь, действительно просто основывают преобразования между Шестнадцатеричным числом, Восьмеричным, и декабрь, я обычно использую основной инструмент командной строки калькулятора (bc
) сделать такие вещи. Отметьте это bc
всегда очень требовательно в отношении правильного порядка оснований: необходимо указать получающуюся основу (obase
) во-первых, затем добавьте свой выбор ibase
.
$ echo "obase=2; ibase=16; A" | bc
1010
$ echo "obase=16; ibase=2; 1010" | bc
A
xxd
было бы хорошо, кроме него показывает что сначала раздражающий столбец и основной вход в конце строки.
– RSFalcon7
05.11.2013, 17:27
awk
для избавлений от него, но он, кажется, не имеет переключатели для отключения этого дисплея. | awk '{print $2}'
. Также существуют другие инструменты. od
& hexdump
. Я ищу другой метод с помощью тех.
– slm♦
05.11.2013, 17:30
xxd -b
приблизьтесь ко мне, однако, нельзя использовать xxd
один для преобразования двоичного файла назад в ASCII. Todo так, я боюсь, что необходимо было бы использовать что-то как printf 'obase=16;ibase=2;%s\n' "$n" | bc | xxd -p -r
, с $n, содержащим число для преобразования, или как длинная строка цифр, или строки цифр, разделенных с точками с запятой. Если можно гарантировать, что $n вписывается арифметический тип оболочек, то можно сойти с рук printf '%x\n' $((2#$n)) | xxd -p -r
– Franki
02.12.2014, 10:41
Оболочка для преобразования двоичного кода в ascii:
bin2ascii() { { tr -cd 01 | fold -w8; echo; } | sed '1i obase=8; ibase=2' | bc | sed 's/^/\\/' | tr -d '\n' | xargs -0 echo -e; }
Для символов ASCII в диапазоне
[-~]
в Python 2:>>> import binascii >>> bin(int(binascii.hexlify('привет'), 16)) '0b110100001100101011011000110110001101111'
Обратно:
>>> n = int('0b110100001100101011011000110110001101111', 2) >>> binascii.unhexlify('%x' % n) 'Привет'
В Python 3.2+:
>>> bin(int.from_bytes('hello'.encode(), 'big')) '0b110100001100101011011000110110001101111'
Обратно:
>>> n = int('0b110100001100101011011000110110001101111', 2) >>> n.to_bytes((n.bit_length() + 7) // 8, 'большой').decode() 'Привет'
$ echo "This is a binary message" | base64
VGhpcyBpcyBhIGJpbmFyeSBtZXNzYWdlCg==
$ echo "VGhpcyBpcyBhIGJpbmFyeSBtZXNzYWdlCg==" | base64 -d
This is a binary message