TGViewer
Bash Days | Linux | DevOps Bash Days | Linux | DevOps @bashdays · 23.6K subscribers
Post #193 9.02K
Как и обещал, сегодня у нас с тобой хитрая стеганография на bash. Не скажу что тема простая, но будут готовые инструменты, которые можно взять и использовать. Не вникая в кишки.

Как говорится - чтобы что-то спрятать, нужно поместить это на видное место.

Начнём со спойлера:

ls -l /tmp/box

-rw---x---
-rw----r--
-rwx--xr--
-rw-r-----
-rw--w----
-rw----r--
-rwxr--r--
-rwx--xr--


Пока ничего не понятно, а если я сделаю так:

./mode2char /tmp/box

-rw---x--- (610)
1100010 (98) ('b')

-rw----r-- (604)
1100001 (97) ('a')

-rwx--xr-- (714)
1110011 (115) ('s')

-rw-r----- (640)
1101000 (104) ('h')

-rw--w---- (620)
1100100 (100) ('d')

-rw----r-- (604)
1100001 (97) ('a')

-rwxr--r-- (744)
1111001 (121) ('y')

-rwx--xr-- (714)
1110011 (115) ('s')

bashdays


Сечешь фишку? Это и называется стеганография. Я спрятал в правах файлов скрытое сообщение «bashdays». Вот тут нам и пригодилась тема с правами доступа и всякими этими системами счислений. Давай разбираться как это работает.

Сами bash скрипты mode2char и char2mode закину в конце поста на гитхаб.

В примере выше у меня сопоставляются права доступа с диапазоном символов 32..126 (ASCII). Если номер 7ми битной кодировки ASCII сдвинуть на два бита, то получаем как раз те самые 9 бит прав доступа.

Давай подвигаем!

Распечатаем диапазон ACSII символов 32..126 в восьмеричном формате:

for i in 10 {32..126} ; do printf '%03o\n' $(( i << 2 )) ; done


На экран вывалится куча всего, что-то похожее на права доступа:

372
376
380


Чтобы преобразовать в обратную сторону делаем так:

for i in 440 524 545 ; do echo $(( 8#$i >> 2 )) ; done


То есть сдвигаем вправо на 2 бита. Из цифр 440, 524, 545 - получили 72, 85, 89.

Ну а теперь всю эту херню ненаглядную, преобразуем в читаемые символы.

for i in 440 524 545 ; do printf -v hex '\\x%x' $(( 8#$i >> 2 )) ; echo -e "$hex" ; done


Вот это поворот! Странно что на такую строчку антивирус не триггернулся. В общем теперь на экране красуется всем известное слово.

Помнишь я сегодня писал, что единицы двоичного представления прав доступа, соответствуют символам rwx, а нули символу «-». Таким образом можно легко получить закодированный символ вручную подставляя 0 и 1 в нужных местах.

А вот и сам скрипт, который разбивает строку и генерирует кучку файлов с нужными правами доступа. В скрипте не используются сдвиги, работает всё через ассоциативные массивы для декодирования.

Запускается так:


./char2mode /tmp/box 'Welcome to bashdays'


Указываешь директорию, где создаем структуру файлов и саму строчку, которую нужно спрятать в правах доступа.

Конечно есть нюансы. Скрипт будет орать если что-то не так. Существующие файлы не перезаписываются. Именование файлов соответствуют лексикографическому порядку сортировки. Это нужно для того, чтобы получить ту же последовательность файлов, что и при создании. Скрипт декодирования получает имена используя globbing, который сортирует именно так.

Сам скрипт декодирования лежит тут, запускается аналогично:

./mode2char /tmp/box


При использовании скрипта декодирования, можно привязать какие угодно права к конкретному символу без какой-либо логики.

Выбор велик:

printf '%s\n' {0..7}{0..7}{0..7}
printf '%s\n' {r,-}{w,-}{x,-}{r,-}{w,-}{x,-}{r,-}{w,-}{x,-}


А еще же есть имена файлов, временные метки с наносекундами. Ну или вообще упороться и упаковывать более одного числа в атрибуты файла используя уникальную сортировку имен файлов.

Сложно? Конечно! Но думаю общую идею ты понял. Изучай! Увидимся совсем скоро.

tags: #linux #bash
—
💩 @bashdays
  • 👍 64
More from @bashdays
  1. Sep 29, 2026Самый жаркий холивар в команде — это не systemd, а какие заказать роллы на всю команду. Од…
  2. Sep 24, 2026Post #1565
  3. Sep 23, 2026Здрасти приехали, решил я в кой-то веке воспользоваться услугами Codex, создал аккаунт, по…
  4. Sep 22, 2026Всем привет, с вами TagdTagd. Сегодня опять поднимем тему архивов, но немного с другой сто…
  5. Sep 15, 2026Всем привет, с вами TagdTagd. И это вторая часть. Практическая. С первой частью можешь озн…
  6. Sep 9, 2026Всем привет, с вами TagdTagd! Я тут вынужденно перешёл на MAX. Просто Telegram перестал ра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →