ASCII к Двоичному файлу и Двоичному файлу к инструментам преобразования ASCII?

Другой ответ утверждал, что "скрывающие элементы" (скрытое вредоносное программное обеспечение) имеют внутреннее преимущество перед "детекторами".Я не согласен. Это верно при ограничении себя подходами обнаружения, которые полагаются на подписи или эвристику для обнаружения вредоносного программного обеспечения. Но существует другой способ обнаружить вредоносное программное обеспечение: проверьте известные товары. Растяжка, ПОМОЩНИК, и т.д. может проверить файлы на диске. Второй Взгляд может проверить рабочее ядро и процессы. Второй Взгляд использует судебную экспертизу памяти для прямого осмотра операционной системы, активных служб и приложений. Это сравнивает код в памяти к тому, что было выпущено поставщиком дистрибутива Linux. Таким образом это может сразу точно определить злонамеренные модификации, сделанные руткитами и бэкдорами и несанкционированными программами, которые выполняются (троянцы, и т.д.).

(Раскрытие: Я - ведущий разработчик Второго Взгляда.)

31
14.09.2017, 09:36
6 ответов
$ 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 " ".

36
27.01.2020, 19:37
  • 1
    . Я несколько знаком с жемчугом, но расширенные детали будут очень полезны абсолютно плохо знакомым с жемчугом. –  Yokai 19.08.2017, 13:28

Используя до н.э и удар:

#!/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
8
27.01.2020, 19:37

Можно использовать 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
23
27.01.2020, 19:37
  • 1
    xxd было бы хорошо, кроме него показывает что сначала раздражающий столбец и основной вход в конце строки. –  RSFalcon7 05.11.2013, 17:27
  • 2
    @RSFalcon7 - Я знаю, можно передать его по каналу к awk для избавлений от него, но он, кажется, не имеет переключатели для отключения этого дисплея. | awk '{print $2}'. Также существуют другие инструменты. od & hexdump. Я ищу другой метод с помощью тех. –  slm♦ 05.11.2013, 17:30
  • 3
    @RSFalcon7 -p опция получить 'чистый' выходной –  Pureferret 23.01.2014, 00:51
  • 4
    я использую 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
  • 5
    Если Вы не можете использовать что-то как perl/python –  Franki 02.12.2014, 10:46

Оболочка для преобразования двоичного кода в ascii:

bin2ascii() { { tr -cd 01 | fold -w8; echo; } | sed '1i obase=8; ibase=2' | bc | sed 's/^/\\/' | tr -d '\n' | xargs -0 echo -e; }
5
27.01.2020, 19:37

В Python

Для символов 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()
'Привет'
 
5
27.01.2020, 19:37

Двоичное кодирование по base64

$ echo "This is a binary message" | base64
VGhpcyBpcyBhIGJpbmFyeSBtZXNzYWdlCg==

Декодирование base64

$ echo "VGhpcyBpcyBhIGJpbmFyeSBtZXNzYWdlCg==" | base64 -d
This is a binary message
0
27.01.2020, 19:37

Теги

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